2016-04-19 31 views
6

C'è un modo, posso distribuire alle funzioni di blu utilizzando gli script di PowerShell? CI non funzionerà per noi perché utilizziamo la distribuzione di polpo per l'implementazione in tutti i nostri servizi di produzione. Quindi sarebbe utile se c'è un modo di distribuire usando gli script di PowerShell.Distribuisci alle funzioni di blu usando PowerShell

Grazie!

risposta

7

È possibile distribuire le funzioni in Azure utilizzando Kudu REST API. Puoi anche vedere alcuni codici/esempi di ciò nel nostro templates repository. Nell'esempio di codice this, puoi vedere come il nostro script di test richiama le apis di Kudu Rest per distribuire un zip all'app Function.

Il folder structure per le funzioni è una funzione per cartella. È necessario distribuire le cartelle delle funzioni su ./site/wwwroot sull'app delle funzioni. Devi inoltre aggiungere eventuali impostazioni dell'app che potrebbero contenere i tuoi segreti se aggiungi nuovi collegamenti tra gli aggiornamenti.

codice L'PowerShell apparirebbe qualcosa sulla falsariga di:

$apiUrl = $config.scmEndpoint + "/api/zip/" 
    if ($destinationPath) 
    { 
     $apiUrl = $apiUrl + $destinationPath 
    } 

    $response = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $config.authInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data" 
+0

appena corretto il "questo" url, speranza rimanere legale con il tuo pensiero –

5

In aggiunta a quello che Chris descrive, c'è una prima classe di API ARM è possibile utilizzare per distribuire le funzioni. Ecco come si presenta in PowerShell:

Function DeployHttpTriggerFunction($ResourceGroupName, $SiteName, $FunctionName, $CodeFile, $TestData) 
{ 
    $FileContent = "$(Get-Content -Path $CodeFile -Raw)" 

    $props = @{ 
     config = @{ 
      bindings = @(
       @{ 
        type = "httpTrigger" 
        direction = "in" 
        webHookType = "" 
        name = "req" 
       } 
       @{ 
        type = "http" 
        direction = "out" 
        name = "res" 
       } 
      ) 
     } 
     files = @{ 
      "index.js" = $FileContent 
     } 
     test_data = $TestData 
    } 

    New-AzureRmResource -ResourceGroupName $ResourceGroupName -ResourceType Microsoft.Web/sites/functions -ResourceName $SiteName/$FunctionName -PropertyObject $props -ApiVersion 2015-08-01 -Force 
} 

Vedi https://github.com/projectkudu/kudu/wiki/Functions-API per informazioni sulle API sottostante.

+0

posso ottenere alle funzioni registrare usando 'Invoke-RestMethod' e l'endpoint sotto. Come si può/puoi farlo in PowerShell con un'API ARM di prima classe? '$ scmEndpoint =" https: //$SiteName.scm.azurewebsites.net/api/vfs/LogFiles/Application/Functions/Function/$functionName/ "' –

+0

Funziona se voglio distribuire una nuova di zecca funzione app? Viene visualizzato un errore che indica che la risorsa non può essere trovata. – willem

+0

@David Ebbo come si carica un assembly personalizzato insieme a questo. ci sono esempi di codice per questo scenario? – raghav710

1

È inoltre possibile utilizzare Azure CLI 2.0 + Azure Function CLI per distribuire le funzioni di Azure modulo di comando/PowerShell

Azure CLI API può essere utilizzata per disposizione una funzione di app, utilizzando il comando

az functionapp create --name $functionappName --resource-group $resourceGroup --storage-account $storageAccountName --consumption-plan-location $consumptionPlanLocation 

e applicare applicazione impostando

az functionapp config appsettings set --name $functionappName --resource-group $resourceGroup --settings "test=value" 

E Azure Function CLI api può essere utilizzato per distribuire le funzioni disponibili

func azure functionapp publish <azurefunctionapp> 

Utensili pratici!

3

Nel caso in cui ci siano persone come me che hanno bisogno di soluzioni passo-passo. Ecco la procedura per implementare funzioni azzurre con PowerShell (modo ARM non)

  1. Creare una funzione azzurro con la seguente struttura

    myFunctionName(Folder) 
    | 
    |_ function.json (contains info on input, output, trigger) 
    |_ run.csx (contains code) 
    |_ [OPTIONAL] project.json (for nuget packages) 
    |_ [OPTIONAL] bin(Folder) 
        |_ all custom DLLs go in this folder 
    
  2. Creare una zip della cartella myFunctionName - Diamo il nome my.zip .Assicurarsi che dopo zippare my.zip contiene la cartella myFunctionName e tutto il suo contenuto

  3. Trova il tuo profilo di pubblicazione nome utente e la password come descritto here, vale a dire

$creds = Invoke-AzureRmResourceAction -ResourceGroupName YourResourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName YourWebApp/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force 

    $username = $creds.Properties.PublishingUserName 
    $password = $creds.Properties.PublishingPassword 

e quindi richiamare l'API Kudu REST utilizzando PowerShell come segue

$username = '<publish username>' #IMPORTANT: use single quotes as username may contain $ 
    $password = "<publish password>" 
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password))) 

    $apiUrl = "https://<yourFunctionApp>.scm.azurewebsites.net/api/zip/site/wwwroot" 
    $filePath = "<yourFunctionName>.zip" 
    Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $filePath -ContentType "multipart/form-data" 
  1. Vai a <yourFunctionApp>.scm.azurewebsites.net -> Debug menu at the top -> CMD. Nella pagina visualizzata, vai a site -> wwwroot. Dovresti vedere il contenuto del tuo file zip estratto lì e puoi anche verificare che la tua funzione azzurra sia disponibile nel portale azzurro.

RIFERIMENTI

  1. https://github.com/projectkudu/kudu/wiki/REST-API#sample-of-using-rest-api-with-powershell

  2. http://markheath.net/post/deploy-azure-functions-kudu-powershell

+0

Vorrei che questa fosse la risposta migliore a questo post, mi avrebbe risparmiata una settimana: -X –