ZIP-Bereitstellung für Azure Functions

In diesem Artikel wird beschrieben, wie Sie Ihre Projektdateien für Funktions-Apps aus einer ZIP-Datei (komprimierten Datei) in Azure bereitstellen. Sie erfahren, wie Push-Bereitstellungen ausgeführt werden, sowohl mithilfe der Azure-Befehlszeilenschnittstelle als auch mithilfe der REST-APIs. Azure Functions Core Tools verwenden auch beim Veröffentlichen eines lokalen Projekts in Azure diese Bereitstellungs-APIs.

Die ZIP-Bereitstellung ist auch eine einfache Möglichkeit, Ihre Funktionen aus dem Bereitstellungspaket auszuführen. Weitere Informationen finden Sie unter Ausführen Ihrer Funktionen aus einer Paketdatei in Azure.

Azure Functions bietet die ganze Bandbreite an Optionen für Continuous Deployment und Integration, die in Azure App Service zur Verfügung stehen. Weitere Informationen finden Sie unter Continuous Deployment für Azure Functions.

Um die Entwicklung zu beschleunigen, ist es für Sie womöglich einfacher, Ihre Projektdateien für die Funktions-App direkt über eine ZIP-Datei bereitzustellen. Die ZIP-Bereitstellungs-API extrahiert den Inhalt einer ZIP-Datei in den Ordner wwwroot Ihrer Funktions-App. Bei dieser Bereitstellung per ZIP-Datei wird der gleiche Kudu-Dienst verwendet, der auch bei der Continuous Integration-basierten Bereitstellungen zum Einsatz kommt, einschließlich dieser Funktionalität:

  • Löschen von Dateien, die von früheren Bereitstellungen übrig geblieben sind
  • Anpassen der Bereitstellung, einschließlich der Ausführung von Bereitstellungsskripts
  • Bereitstellungsprotokolle
  • Synchronisierung von Funktionstriggern in einer Verbrauchstarif-Funktions-App

Weitere Informationen finden Sie in der Referenz zur ZIP-Bereitstellung.

Anforderungen an ZIP-Bereitstellungsdateien

Die ZIP-Datei, die Sie für die Push-Bereitstellung verwenden, muss alle Projektdateien zur Ausführung Ihrer Funktion beinhalten.

Wichtig

Wenn Sie ZIP-Bereitstellung verwenden, werden alle Dateien aus einer vorhandenen Bereitstellung, die nicht in der ZIP-Datei vorhanden sind, aus Ihrer Funktions-App gelöscht.

Der Code für alle Funktionen in einer bestimmten Funktions-App befindet sich in einem Stammprojektordner, der eine Hostkonfigurationsdatei enthält. Die Datei host.json enthält die runtimespezifische Konfiguration und befindet sich im Stammordner der Funktions-App. Ein Ordner bin enthält Pakete und andere Bibliotheksdateien, die von der Funktions-App benötigt werden. Bestimmte Ordnerstrukturen, die von der Funktions-App benötigt werden, sind von der Sprache abhängig:

Alle Funktionen in einer Funktions-App müssen den gleichen Sprachstapel verwenden.

Eine Funktionen-App umfasst alle Dateien und Ordner im Verzeichnis wwwroot. Eine ZIP-Bereitstellungsdatei enthält den Inhalt des Verzeichnisses wwwroot, aber nicht das Verzeichnis selbst. Wenn Sie ein C#-Klassenbibliotheksprojekt bereitstellen, müssen Sie die kompilierten Bibliotheksdateien und Abhängigkeiten in einem bin-Unterordner im ZIP-Paket einschließen.

Wenn Sie auf einem lokalen Computer entwickeln, können Sie manuell eine ZIP-Datei des Funktions-App-Projektordners erstellen, indem Sie die integrierte ZIP-Komprimierungsfunktion oder Tools von Drittanbietern verwenden.

Bereitstellen über die Azure-Befehlszeilenschnittstelle

Sie können eine Push-Bereitstellung auch mithilfe der Azure-Befehlszeilenschnittstelle auslösen. Führen Sie eine Push-Bereitstellung einer ZIP-Datei in Ihrer Funktions-App mithilfe des Befehls az functionapp deployment source config-zip aus. Zum Ausführen dieses Befehls müssen Sie Azure CLI, Version 2.0.21 oder höher, verwenden. Sie können mithilfe des az --version-Befehls anzeigen, welche Azure CLI-Version Sie verwenden.

Ersetzen Sie im folgenden Befehl den <zip_file_path>-Platzhalter durch den Pfad zum Speicherort der ZIP-Datei. Ersetzen Sie außerdem <app_name> durch den eindeutigen Namen Ihrer Funktions-App, und ersetzen Sie <resource_group> durch den Namen Ihrer Ressourcengruppe.

az functionapp deployment source config-zip -g <resource_group> -n \
<app_name> --src <zip_file_path>

Mit diesem Befehl werden Projektdateien aus der heruntergeladenen ZIP-Datei in Ihrer Funktions-App in Azure bereitgestellt. Anschließend wird die App neu gestartet. Um die Liste der Bereitstellungen für diese Funktions-App anzuzeigen, müssen Sie die REST-APIs verwenden.

Wenn Sie die Azure-Befehlszeilenschnittstelle auf ihrem lokalen Computer verwenden, ist <zip_file_path> der Pfad zur ZIP-Datei auf Ihrem Computer. Sie können die Azure-Befehlszeilenschnittstelle ebenfalls in der Azure Cloud Shell ausführen. Wenn Sie Cloud Shell verwenden, müssen Sie zunächst die ZIP-Datei für die Bereitstellung auf das Azure Files-Konto hochladen, das Ihrer Cloud Shell zugeordnet ist. In diesem Fall ist <zip_file_path> der Speicherort, der von Ihren Cloud Shell-Konto verwendet wird. Weitere Informationen finden Sie unter Beibehalten von Dateien in Azure Cloud Shell.

Bereitstellen einer ZIP-Datei mit REST-APIs

Sie können die REST-APIs des Bereitstellungsdiensts verwenden, um die ZIP-Datei in Ihrer App in Azure bereitzustellen. Zur Bereitstellung senden Sie eine POST-Anforderung an https://<app_name>.scm.azurewebsites.net/api/zipdeploy. Die POST-Anforderung muss die ZIP-Datei im Nachrichtentext enthalten. Die Anmeldeinformationen für die Bereitstellung für Ihre App werden in der Anforderung mithilfe von HTTP-Standardauthentifizierung bereitgestellt. Weitere Informationen finden Sie in der .zip push deployment reference (Referenz zur ZIP-Push-Bereitstellung).

Für die HTTP-Standardauthentifizierung benötigen Sie die Anmeldeinformationen für die App Service-Bereitstellung. Informationen zum Festlegen der Anmeldeinformationen für Ihre Bereitstellung finden Sie unter Festlegen und Zurücksetzen von Anmeldeinformationen auf Benutzerebene.

Mit cURL

Im folgenden Beispiel wird das cURL-Tool verwendet, um eine ZIP-Datei bereitzustellen. Ersetzen Sie die Platzhalter <deployment_user>, <zip_file_path> und <app_name>. Wenn Sie von cURL dazu aufgefordert werden, geben Sie das Kennwort ein.

curl -X POST -u <deployment_user> --data-binary "@<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

Diese Anforderung löst die Push-Bereitstellung aus der hochgeladenen ZIP-Datei aus. Sie können die aktuelle und vorhergegangene Bereitstellungen mithilfe des Endpunkts https://<app_name>.scm.azurewebsites.net/api/deployments überprüfen, wie im folgenden cURL-Beispiel zu sehen. Ersetzen Sie auch hier <app_name> durch den Namen Ihrer App und <deployment_user> durch den Benutzernamen Ihrer Anmeldeinformationen für die Bereitstellung.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

Asynchrone Zip-Bereitstellung

Bei der synchronen Bereitstellung erhalten Sie möglicherweise Fehler im Zusammenhang mit Verbindungstimeouts. Fügen Sie der URL ?isAsync=true hinzu, um eine asynchrone Bereitstellung durchzuführen. Sie erhalten eine Antwort, sobald die ZIP-Datei mit einem Location-Header hochgeladen wird, der auf die URL des abrufbaren Bereitstellungsstatus verweist. Durch Polling der im Location-Header bereitgestellten URL erhalten Sie die HTTP-Antwort 202 (Akzeptiert), während der Prozess ausgeführt wird, und die HTTP-Antwort 200 (OK), sobald das Archiv erweitert wurde und die Bereitstellung erfolgreich abgeschlossen wurde.

Microsoft Entra-Authentifizierung

Alternativ zur HTTP-Standardauthentifizierung für die ZIP-Bereitstellung kann auch eine Microsoft Entra-Identität verwendet werden. Die Microsoft Entra-Identität ist möglicherweise erforderlich, wenn die HTTP-Standardauthentifizierung für die SCM-Website deaktiviert ist.

Für die Benutzer oder Dienstprinzipale, die die Bereitstellung durchführen, ist ein gültiges Microsoft Entra-Zugriffstoken erforderlich. Ein Zugriffstoken kann mit dem az account get-access-token-Befehl der Azure CLI abgerufen werden. Das Zugriffstoken wird im Authentifizierungsheader der HTTP POST-Anforderung verwendet.

curl -X POST \
    --data-binary "@<zip_file_path>" \
    -H "Authorization: Bearer <access_token>" \
    "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"

Mit PowerShell

Im folgenden Beispiel wird die ZIP-Datei mit Publish-AzWebapp hochgeladen. Ersetzen Sie die Platzhalter <group-name>, <app-name> und <zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

Diese Anforderung löst die Push-Bereitstellung aus der hochgeladenen ZIP-Datei aus.

Führen Sie die folgenden Befehle aus, um die aktuellen und vergangenen Bereitstellungen zu prüfen. Ersetzen Sie wieder die Platzhalter <deployment-user>, <deployment-password> und <app-name>.

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Bereitstellen unter Verwendung von ARM-Vorlagen

Sie können ZipDeploy ARM-Vorlagenerweiterung verwenden, um Ihre ZIP-Datei an Ihre Funktions-App zu übertragen.

Beispiel für ZIPDeploy ARM-Vorlage

Diese Vorlage enthält sowohl einen Produktions- als auch einen Staging-Slot und wird entweder auf dem einen oder auf dem anderen bereitgestellt. In der Regel würden Sie diese Vorlage verwenden, um das Staging-Slot bereitzustellen und dann zu tauschen, um Ihr neues ZIP-Paket auf dem Produktionsslot auszuführen.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceName": {
      "type": "string"
    },
    "deployToProduction": {
      "type": "bool",
      "defaultValue": false
    },
    "slot": {
      "type": "string",
      "defaultValue": "staging"
    },
    "packageUri": {
      "type": "secureString"
    }
  },
  "resources": [
    {
      "condition": "[parameters('deployToProduction')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/ZipDeploy', parameters('appServiceName'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    },
    {
      "condition": "[not(parameters('deployToProduction'))]",
      "type": "Microsoft.Web/sites/slots/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}/ZipDeploy', parameters('appServiceName'), parameters('slot'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    }
  ]
}

Für die erste Bereitstellung würden Sie direkt im Produktionsslot bereitstellen. Weitere Informationen finden Sie unter Slot-Bereitstellungen.

Ausführen von Funktionen aus dem Bereitstellungspaket

Sie können Ihre Funktionen auch direkt aus der Bereitstellungspaketdatei heraus ausführen. Bei dieser Methode wird der Bereitstellungsschritt übersprungen, indem Dateien aus dem Paket in das wwwroot-Verzeichnis Ihrer Funktions-App kopiert werden. Stattdessen wird die Paketdatei durch die Functions-Laufzeit bereitgestellt, und der Inhalt des wwwroot Verzeichnisses ist schreibgeschützt.

Die ZIP-Bereitstellung ist mit diesem Feature integriert. Sie können es aktivieren, indem Sie die Einstellung WEBSITE_RUN_FROM_PACKAGE der Funktions-App auf einen Wert von 1 festlegen. Weitere Informationen finden Sie unter Ausführen von Functions über eine Bereitstellungspaketdatei.

Anpassung von Bereitstellungen

Der Bereitstellungsprozess geht von der Annahme aus, dass die ZIP-Datei, die Sie per Push übertragen, eine ausführungsbereite App enthält. Standardmäßig werden keine Anpassungen ausgeführt. Um den gleichen Buildprozess zu ermöglichen, der Ihnen bei Continuous Integration zur Verfügung steht, fügen Sie Ihren Anwendungseinstellungen Folgendes hinzu:

SCM_DO_BUILD_DURING_DEPLOYMENT=true

Wenn Sie die ZIP-basierte Push-Bereitstellung verwenden, ist diese Einstellung standardmäßig false. Der Standardwert für Bereitstellungen mithilfe von Continuous Integration ist true. Wenn Sie den Wert auf true festlegen, werden Ihre bereitstellungsbezogenen Einstellungen während der Bereitstellung verwendet. Sie können diese Einstellungen entweder als App-Einstellungen oder in einer DEPLOYMENT-Konfigurationsdatei konfigurieren, die sich im Stammordner Ihrer ZIP-Datei befindet. Weitere Informationen finden Sie unter Repository and deployment-related settings (Repository- und bereitstellungsbezogene Einstellungen) in der Bereitstellungsreferenz.

Herunterladen der Dateien Ihrer Funktionen-App

Wenn Sie Ihre Funktionen mithilfe des Editors im Azure-Portal erstellt haben, können Sie Ihr vorhandenes Funktions-App-Projekt auf eine der folgenden Arten als ZIP-Datei herunterladen:

  • Im Azure-Portal

    1. Melden Sie sich beim Azure-Portal an, und navigieren Sie dann zu Ihrer Funktions-App.

    2. Wählen Sie auf der Registerkarte Übersicht den Befehl App-Inhalt herunterladen aus. Wählen Sie Ihre Downloadoptionen und anschließend Herunterladen aus.

      Herunterladen des Funktions-App-Projekts

      Die heruntergeladene ZIP-Datei weist das richtige Format auf, um mithilfe der ZIP-Push-Bereitstellung wieder in Ihrer Funktions-App veröffentlicht zu werden. Beim Herunterladen im Portal können auch die Dateien hinzugefügt werden, die zum Öffnen der Funktionen-App direkt in Visual Studio erforderlich sind.

  • Mit REST-APIS

    Verwenden Sie die folgende GET-Bereitstellungs-API, um Dateien aus Ihrem <function_app>-Projekt herunterzuladen:

    https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    Das Hinzufügen von /site/wwwroot/ stellt sicher, dass die ZIP-Datei nur die Dateien des Funktionen-App-Projekts und nicht die gesamte Website enthält. Wenn Sie nicht bereits in Azure angemeldet sind, werden Sie aufgefordert, sich anzumelden.

Sie können aber auch eine ZIP-Datei aus einem GitHub-Repository herunterladen. Wenn Sie ein GitHub-Repositorys als ZIP-Datei herunterladen, fügt GitHub eine zusätzliche Ordnerebene für den Branch hinzu. Diese zusätzliche Ordnerebene bedeutet, dass Sie die ZIP-Datei nicht direkt so, wie Sie sie von GitHub heruntergeladen haben, bereitstellen können. Wenn Sie ein GitHub-Repository zum Verwalten Ihrer Funktions-App verwenden, sollten Sie die App mithilfe von Continuous Integration bereitstellen.

Nächste Schritte