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.
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.
Anforderungen an ZIP-Bereitstellungsdateien
Das ZIP-Archiv, das Sie bereitstellen, muss alle Dateien enthalten, die für die Ausführung Ihrer Funktions-App erforderlich sind. Sie können manuell ein ZIP-Archiv basierend auf dem Inhalt eines Funktionsprojektordners erstellen, indem Sie eine integrierte ZIP-Komprimierungsfunktion oder Tools von Drittanbietern verwenden.
Das Archiv muss die host.json-Datei im Stammverzeichnis des extrahierten Ordners enthalten. Der ausgewählte Sprachstapel für die Funktions-App führt zu zusätzlichen Anforderungen:
- .NET (isoliertes Workermodell)
- .NET (prozessinternes Modell)
- Java
- JavaScript
- TypeScript
- PowerShell
- Python
Wichtig
Für Sprachen, die die kompilierte Ausgabe für die Bereitstellung generieren, müssen Sie den Inhalt des Ausgabeordners komprimieren, den Sie veröffentlichen möchten, und nicht den gesamten Projektordner. Wenn Functions den Inhalt des ZIP-Archivs extrahiert, muss die host.json
-Datei im Stammverzeichnis des Pakets vorhanden sein.
Ein ZIP-Bereitstellungsprozess extrahiert die Dateien und Ordner des ZIP-Archivs in das wwwroot
-Verzeichnis. Wenn Sie das übergeordnete Verzeichnis beim Erstellen des Archivs einschließen, findet das System nicht die Dateien, die es in wwwroot
erwartet.
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
Melden Sie sich beim Azure-Portal an, und navigieren Sie dann zu Ihrer Funktions-App.
Wählen Sie auf der Registerkarte Übersicht den Befehl App-Inhalt herunterladen aus. Wählen Sie Ihre Downloadoptionen und anschließend Herunterladen aus.
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.