ZIP-Bereitstellung für Azure FunctionsZip deployment for Azure Functions

In diesem Artikel wird beschrieben, wie Sie Ihre Projektdateien für Funktions-Apps aus einer ZIP-Datei (komprimierten Datei) in Azure bereitstellen.This article describes how to deploy your function app project files to Azure from a .zip (compressed) file. Sie erfahren, wie Push-Bereitstellungen ausgeführt werden, sowohl mithilfe der Azure-Befehlszeilenschnittstelle als auch mithilfe der REST-APIs.You learn how to do a push deployment, both by using Azure CLI and by using the REST APIs. Azure Functions Core Tools verwenden auch beim Veröffentlichen eines lokalen Projekts in Azure diese Bereitstellungs-APIs.Azure Functions Core Tools also uses these deployment APIs when publishing a local project to Azure.

Azure Functions bietet die ganze Bandbreite an Optionen für Continuous Deployment und Integration, die in Azure App Service zur Verfügung stehen.Azure Functions has the full range of continuous deployment and integration options that are provided by Azure App Service. Weitere Informationen finden Sie unter Continuous Deployment für Azure Functions.For more information, see Continuous deployment for 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.To speed development, you may find it easier to deploy your function app project files directly from a .zip file. Die ZIP-Bereitstellungs-API extrahiert den Inhalt einer ZIP-Datei in den Ordner wwwroot Ihrer Funktions-App.The .zip deployment API takes the contents of a .zip file and extracts the contents into the wwwroot folder of your function 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:This .zip file deployment uses the same Kudu service that powers continuous integration-based deployments, including:

  • Löschen von Dateien, die von früheren Bereitstellungen übrig geblieben sindDeletion of files that were left over from earlier deployments.
  • Anpassen der Bereitstellung, einschließlich der Ausführung von BereitstellungsskriptsDeployment customization, including running deployment scripts.
  • BereitstellungsprotokolleDeployment logs.
  • Synchronisierung von Funktionstriggern in einer Verbrauchstarif-Funktions-AppSyncing function triggers in a Consumption plan function app.

Weitere Informationen finden Sie in der Referenz zur ZIP-Bereitstellung.For more information, see the .zip deployment reference.

Anforderungen an ZIP-BereitstellungsdateienDeployment .zip file requirements

Die ZIP-Datei, die Sie für die Push-Bereitstellung verwenden, muss alle Projektdateien zur Ausführung Ihrer Funktion beinhalten.The .zip file that you use for push deployment must contain all of the files needed to run your function.

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.When you use .zip deployment, any files from an existing deployment that aren't found in the .zip file are deleted from your function app.

Der Code für alle Funktionen in einer bestimmten Funktions-App befindet sich in einem Stammprojektordner, der eine Hostkonfigurationsdatei und mindestens einen Unterordner enthält.The code for all the functions in a specific function app is located in a root project folder that contains a host configuration file and one or more subfolders. Jeder Unterordner enthält den Code für eine separate Funktion, wie in folgender Darstellung gezeigt:Each subfolder contains the code for a separate function, as in the following representation:

FunctionApp
 | - host.json
 | - Myfirstfunction
 | | - function.json
 | | - ...  
 | - mysecondfunction
 | | - function.json
 | | - ...  
 | - SharedCode
 | - bin

In der Version 2.x der Functions-Runtime müssen sich alle Funktionen in der Funktions-App denselben Spracharbeitsthread teilen.In version 2.x of the Functions runtime, all functions in the function app must share the same language worker.

Die Datei host.json, die die laufzeitspezifische Konfiguration enthält, befindet sich im Stammordner der Funktions-App.The host.json file, which contains some runtime-specific configurations, is in the root folder of the function app. Ein bin-Ordner enthält Pakete und andere Bibliotheksdateien, die von der Funktions-App benötigt werden.A bin folder contains packages and other library files required by the function app. Sprachspezifische Anforderungen für ein Funktions-App-Projekt:See the language-specific requirements for a function app project:

Eine Funktionen-App umfasst alle Dateien und Ordner im Verzeichnis wwwroot.A function app includes all of the files and folders in the wwwroot directory. Eine ZIP-Bereitstellungsdatei enthält den Inhalt des Verzeichnisses wwwroot, aber nicht das Verzeichnis selbst.A .zip file deployment includes the contents of the wwwroot directory, but not the directory itself. Wenn Sie ein C#-Klassenbibliotheksprojekt bereitstellen, müssen Sie die kompilierten Bibliotheksdateien und Abhängigkeiten in einem bin-Unterordner im ZIP-Paket einschließen.When deploying a C# class library project, you must include the compiled library files and dependencies in a bin subfolder in your .zip package.

Herunterladen der Dateien Ihrer Funktionen-AppDownload your function app files

Wenn Sie auf einem lokalen Computer entwickeln, ist es einfach, eine ZIP-Datei des Projektordners der Funktions-App auf Ihrem Entwicklungscomputer zu erstellen.When you are developing on a local computer, it's easy to create a .zip file of the function app project folder on your development computer.

Allerdings haben Sie Ihre Funktionen möglicherweise mithilfe des Editors im Azure-Portal erstellt.However, you might have created your functions by using the editor in the Azure portal. Sie können ein vorhandenes Funktionen-App-Projekt auf eine der folgenden Weisen herunterladen:You can download an existing function app project in one of these ways:

  • Im Azure-PortalFrom the Azure portal:

    1. Melden Sie sich beim Azure-Portal an, und navigieren Sie dann zu Ihrer Funktions-App.Sign in to the Azure portal, and then go to your function app.

    2. Wählen Sie auf der Registerkarte Übersicht den Befehl App-Inhalt herunterladen aus.On the Overview tab, select Download app content. Wählen Sie Ihre Downloadoptionen und anschließend Herunterladen aus.Select your download options, and then select Download.

      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.The downloaded .zip file is in the correct format to be republished to your function app by using .zip push deployment. Beim Herunterladen im Portal können auch die Dateien hinzugefügt werden, die zum Öffnen der Funktionen-App direkt in Visual Studio erforderlich sind.The portal download can also add the files needed to open your function app directly in Visual Studio.

  • Mit REST-APISUsing REST APIs:

    Verwenden Sie die folgende GET-Bereitstellungs-API, um Dateien aus Ihrem <function_app>-Projekt herunterzuladen:Use the following deployment GET API to download the files from your <function_app> project:

      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.Including /site/wwwroot/ makes sure your zip file includes only the function app project files and not the entire site. Wenn Sie nicht bereits in Azure angemeldet sind, werden Sie aufgefordert, sich anzumelden.If you are not already signed in to Azure, you will be asked to do so.

Sie können aber auch eine ZIP-Datei aus einem GitHub-Repository herunterladen.You can also download a .zip file from a GitHub repository. Wenn Sie ein GitHub-Repositorys als ZIP-Datei herunterladen, fügt GitHub eine zusätzliche Ordnerebene für den Branch hinzu.When you download a GitHub repository as a .zip file, GitHub adds an extra folder level for the branch. Diese zusätzliche Ordnerebene bedeutet, dass Sie die ZIP-Datei nicht direkt so, wie Sie sie von GitHub heruntergeladen haben, bereitstellen können.This extra folder level means that you can't deploy the .zip file directly as you downloaded it from GitHub. Wenn Sie ein GitHub-Repository zum Verwalten Ihrer Funktions-App verwenden, sollten Sie die App mithilfe von Continuous Integration bereitstellen.If you're using a GitHub repository to maintain your function app, you should use continuous integration to deploy your app.

Bereitstellen über die Azure-BefehlszeilenschnittstelleDeploy by using Azure CLI

Sie können eine Push-Bereitstellung auch mithilfe der Azure-Befehlszeilenschnittstelle auslösen.You can use Azure CLI to trigger a push deployment. Führen Sie eine Push-Bereitstellung einer ZIP-Datei in Ihrer Funktions-App mithilfe des Befehls az functionapp deployment source config-zip aus.Push deploy a .zip file to your function app by using the az functionapp deployment source config-zip command. Zum Ausführen dieses Befehls müssen Sie Azure CLI, Version 2.0.21 oder höher, verwenden.To use this command, you must use Azure CLI version 2.0.21 or later. Sie können mithilfe des az --version-Befehls anzeigen, welche Azure CLI-Version Sie verwenden.To see what Azure CLI version you are using, use the az --version command.

Ersetzen Sie im folgenden Befehl den <zip_file_path>-Platzhalter durch den Pfad zum Speicherort der ZIP-Datei.In the following command, replace the <zip_file_path> placeholder with the path to the location of your .zip file. Ersetzen Sie außerdem <app_name> durch den eindeutigen Namen Ihrer Funktions-App.Also, replace <app_name> with the unique name of your function app.

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

Mit diesem Befehl werden Projektdateien aus der heruntergeladenen ZIP-Datei in Ihrer Funktions-App in Azure bereitgestellt.This command deploys project files from the downloaded .zip file to your function app in Azure. Anschließend wird die App neu gestartet.It then restarts the app. Um die Liste der Bereitstellungen für diese Funktions-App anzuzeigen, müssen Sie die REST-APIs verwenden.To view the list of deployments for this function app, you must use the REST APIs.

Wenn Sie die Azure-Befehlszeilenschnittstelle auf ihrem lokalen Computer verwenden, ist <zip_file_path> der Pfad zur ZIP-Datei auf Ihrem Computer.When you're using Azure CLI on your local computer, <zip_file_path> is the path to the .zip file on your computer. Sie können die Azure-Befehlszeilenschnittstelle ebenfalls in der Azure Cloud Shell ausführen.You can also run Azure CLI in Azure Cloud Shell. 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.When you use Cloud Shell, you must first upload your deployment .zip file to the Azure Files account that's associated with your Cloud Shell. In diesem Fall ist <zip_file_path> der Speicherort, der von Ihren Cloud Shell-Konto verwendet wird.In that case, <zip_file_path> is the storage location that your Cloud Shell account uses. Weitere Informationen finden Sie unter Beibehalten von Dateien in Azure Cloud Shell.For more information, see Persist files in Azure Cloud Shell.

Bereitstellen einer ZIP-Datei mit REST-APIsDeploy ZIP file with REST APIs

Sie können die REST-APIs des Bereitstellungsdiensts verwenden, um die ZIP-Datei in Ihrer App in Azure bereitzustellen.You can use the deployment service REST APIs to deploy the .zip file to your app in Azure. Senden Sie zum Bereitstellen eine POST-Anforderung an „https://<app_name>.scm.azurewebsites.net/api/zipdeploy“.To deploy, send a POST request to https://<app_name>.scm.azurewebsites.net/api/zipdeploy. Die POST-Anforderung muss die ZIP-Datei im Nachrichtentext enthalten.The POST request must contain the .zip file in the message body. Die Anmeldeinformationen für die Bereitstellung für Ihre App werden in der Anforderung mithilfe von HTTP-Standardauthentifizierung bereitgestellt.The deployment credentials for your app are provided in the request by using HTTP BASIC authentication. Weitere Informationen finden Sie in der .zip push deployment reference (Referenz zur ZIP-Push-Bereitstellung).For more information, see the .zip push deployment reference.

Für die HTTP-Standardauthentifizierung benötigen Sie die Anmeldeinformationen für die App Service-Bereitstellung.For the HTTP BASIC authentication, you need your App Service deployment credentials. Informationen zum Festlegen der Anmeldeinformationen für Ihre Bereitstellung finden Sie unter Festlegen und Zurücksetzen von Anmeldeinformationen auf Benutzerebene.To see how to set your deployment credentials, see Set and reset user-level credentials.

Mit cURLWith cURL

Im folgenden Beispiel wird das cURL-Tool verwendet, um eine ZIP-Datei bereitzustellen.The following example uses the cURL tool to deploy a .zip file. Ersetzen Sie die Platzhalter <username>, <password>, <zip_file_path> und <app_name>.Replace the placeholders <username>, <password>, <zip_file_path>, and <app_name>. Wenn Sie von cURL dazu aufgefordert werden, geben Sie das Kennwort ein.When prompted by cURL, type in the password.

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.This request triggers push deployment from the uploaded .zip file. 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.You can review the current and past deployments by using the https://<app_name>.scm.azurewebsites.net/api/deployments endpoint, as shown in the following cURL example. Ersetzen Sie auch hier <app_name> durch den Namen Ihrer App und <deployment_user> durch den Benutzernamen Ihrer Anmeldeinformationen für die Bereitstellung.Again, replace <app_name> with the name of your app and <deployment_user> with the username of your deployment credentials.

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

Mit PowerShellWith PowerShell

Im folgenden Beispiel wird Invoke-RestMethod verwendet, um eine Anforderung zu senden, die die ZIP-Datei enthält.The following example uses Invoke-RestMethod to send a request that contains the .zip file. Ersetzen Sie die Platzhalter <deployment_user>, <deployment_password>, <zip_file_path> und <app_name>.Replace the placeholders <deployment_user>, <deployment_password>, <zip_file_path>, and <app_name>.

#PowerShell
$username = "<deployment_user>"
$password = "<deployment_password>"
$filePath = "<zip_file_path>"
$apiUrl = "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"
$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 POST -InFile $filePath -ContentType "multipart/form-data"

Diese Anforderung löst die Push-Bereitstellung aus der hochgeladenen ZIP-Datei aus.This request triggers push deployment from the uploaded .zip file. Führen Sie die folgenden Befehle aus, um die aktuellen und vergangenen Bereitstellungen zu prüfen.To review the current and past deployments, run the following commands. Ersetzen Sie hierbei wieder den Platzhalter <app_name>.Again, replace the <app_name> placeholder.

$apiUrl = "https://<app_name>.scm.azurewebsites.net/api/deployments"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Ausführen von Funktionen aus dem BereitstellungspaketRun functions from the deployment package

Sie können Ihre Funktionen auch direkt aus der Bereitstellungspaketdatei heraus ausführen.You can also choose to run your functions directly from the deployment package file. Bei dieser Methode wird der Bereitstellungsschritt übersprungen, indem Dateien aus dem Paket in das wwwroot-Verzeichnis Ihrer Funktions-App kopiert werden.This method skips the deployment step of copying files from the package to the wwwroot directory of your function app. Stattdessen wird die Paketdatei durch die Functions-Laufzeit bereitgestellt, und der Inhalt des wwwroot Verzeichnisses ist schreibgeschützt.Instead, the package file is mounted by the Functions runtime, and the contents of the wwwroot directory become read-only.

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.Zip deployment integrates with this feature, which you can enable by setting the function app setting WEBSITE_RUN_FROM_PACKAGE to a value of 1. Weitere Informationen finden Sie unter Ausführen von Functions über eine Bereitstellungspaketdatei.For more information, see Run your functions from a deployment package file.

Anpassung von BereitstellungenDeployment customization

Der Bereitstellungsprozess geht von der Annahme aus, dass die ZIP-Datei, die Sie per Push übertragen, eine ausführungsbereite App enthält.The deployment process assumes that the .zip file that you push contains a ready-to-run app. Standardmäßig werden keine Anpassungen ausgeführt.By default, no customizations are run. Um den gleichen Buildprozess zu ermöglichen, der Ihnen bei Continuous Integration zur Verfügung steht, fügen Sie Ihren Anwendungseinstellungen Folgendes hinzu:To enable the same build processes that you get with continuous integration, add the following to your application settings:

SCM_DO_BUILD_DURING_DEPLOYMENT=true 

Wenn Sie die ZIP-basierte Push-Bereitstellung verwenden, ist diese Einstellung standardmäßig false.When you use .zip push deployment, this setting is false by default. Der Standardwert für Bereitstellungen mithilfe von Continuous Integration ist true.The default is true for continuous integration deployments. Wenn Sie den Wert auf true festlegen, werden Ihre bereitstellungsbezogenen Einstellungen während der Bereitstellung verwendet.When set to true, your deployment-related settings are used during deployment. Sie können diese Einstellungen entweder als App-Einstellungen oder in einer DEPLOYMENT-Konfigurationsdatei konfigurieren, die sich im Stammordner Ihrer ZIP-Datei befindet.You can configure these settings either as app settings or in a .deployment configuration file that's located in the root of your .zip file. Weitere Informationen finden Sie unter Repository and deployment-related settings (Repository- und bereitstellungsbezogene Einstellungen) in der Bereitstellungsreferenz.For more information, see Repository and deployment-related settings in the deployment reference.

Nächste SchritteNext steps