Distribuzione con file ZIP per Funzioni di AzureZip deployment for Azure Functions

Questo articolo descrive come distribuire i file di progetto dell'app per le funzioni in Azure da un file ZIP (compresso).This article describes how to deploy your function app project files to Azure from a .zip (compressed) file. Vengono fornite informazioni su come eseguire una distribuzione push sia utilizzando l'interfaccia della riga di comando di Azure sia le API REST.You learn how to do a push deployment, both by using Azure CLI and by using the REST APIs. Strumenti di base di Funzioni di Azure usa anche le API di distribuzione quando pubblica un progetto locale in Azure.Azure Functions Core Tools also uses these deployment APIs when publishing a local project to Azure.

Funzioni di Azure include l'intera gamma di opzioni di integrazione e distribuzione continua offerte dal Servizio app di Azure.Azure Functions has the full range of continuous deployment and integration options that are provided by Azure App Service. Per altre informazioni, vedere Distribuzione continua per Funzioni di Azure.For more information, see Continuous deployment for Azure Functions.

Per velocizzare lo sviluppo, può risultare più semplice distribuire i file di progetto dell'app per le funzioni direttamente da un file con estensione zip.To speed up development, you may find it easier to deploy your function app project files directly from a .zip file. L'API della distribuzione con estensione zip prende il contenuto di un file con estensione zip e lo estrae nella cartella wwwroot dell'app per le funzioni.The .zip deployment API takes the contents of a .zip file and extracts the contents into the wwwroot folder of your function app. La distribuzione tramite file ZIP utilizza lo stesso servizio Kudu usato per le distribuzioni basate su integrazione continua, che include:This .zip file deployment uses the same Kudu service that powers continuous integration-based deployments, including:

  • Eliminazione di file rimasti da distribuzioni precedenti.Deletion of files that were left over from earlier deployments.
  • Personalizzazione della distribuzione, inclusa l'esecuzione di script di distribuzione.Deployment customization, including running deployment scripts.
  • Log di distribuzione.Deployment logs.
  • La funzione di sincronizzazione si attiva in un'app per le funzioni del Piano A consumo.Syncing function triggers in a Consumption plan function app.

Per altre informazioni, vedere le informazioni di riferimento sulla distribuzione tramite file ZIP.For more information, see the .zip deployment reference.

Requisiti di distribuzione con file ZIPDeployment .zip file requirements

Il file ZIP usato per la distribuzione push deve contenere tutti i file necessari per eseguire la funzione.The .zip file that you use for push deployment must contain all of the files needed to run your function.

Importante

Quando si usa la distribuzione con file ZIP, vengono eliminati dall'app per le funzioni i file della distribuzione esistente che non sono presenti nel file ZIP.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.

Il codice per tutte le funzioni in una specifica app per le funzioni si trova in una cartella di progetto radice che contiene un file di configurazione host e una o più sottocartelle.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. Ogni sottocartella contiene il codice di una funzione distinta.Each subfolder contains the code for a separate function. La struttura di cartelle è illustrata nella rappresentazione seguente:The folder structure is shown in the following representation:

FunctionApp
 | - host.json
 | - MyFirstFunction
 | | - function.json
 | | - ...  
 | - MySecondFunction
 | | - function.json
 | | - ...  
 | - SharedCode
 | - bin

Nella versione 2.x e successive del runtime di Funzioni, tutte le funzioni nell'app per le funzioni devono condividere lo stesso stack di linguaggio.In version 2.x and higher of the Functions runtime, all functions in the function app must share the same language stack.

Il file host.json contiene le configurazioni specifiche di runtime e si trova nella cartella radice dell'app per le funzioni.The host.json file contains runtime-specific configurations and is in the root folder of the function app. Una cartella bin contiene i pacchetti e altri file di libreria necessari per l'app per le funzioni.A bin folder contains packages and other library files that the function app requires. Vedere i requisiti specifici del linguaggio per un progetto di app per le funzioni:See the language-specific requirements for a function app project:

Un'app per le funzioni include tutti i file e le cartelle nella directory wwwroot.A function app includes all of the files and folders in the wwwroot directory. Una distribuzione di file ZIP include il contenuto della directory wwwroot, ma non la directory stessa.A .zip file deployment includes the contents of the wwwroot directory, but not the directory itself. Quando si distribuisce un progetto libreria di classi C# è necessario includere i file di libreria compilati e le dipendenze in una sottocartella bin nel pacchetto con estensione zip.When deploying a C# class library project, you must include the compiled library files and dependencies in a bin subfolder in your .zip package.

Scaricare i file dell'app per le funzioniDownload your function app files

Quando lo sviluppo avviene in un computer locale, è facile creare un file ZIP della cartella del progetto dell'app per le funzioni nel computer di sviluppo.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.

È possibile, tuttavia, che le funzioni siano state create tramite l'editor nel portale di Azure.However, you might have created your functions by using the editor in the Azure portal. È possibile scaricare un progetto di app per le funzioni esistente in uno dei modi seguenti:You can download an existing function app project in one of these ways:

  • Dal portale di Azure:From the Azure portal:

    1. Accedere al portale di Azure e passare all'app per le funzioni.Sign in to the Azure portal, and then go to your function app.

    2. Nella scheda Panoramica selezionare Scarica contenuto dell'app.On the Overview tab, select Download app content. Selezionare le opzioni di download, quindi Scarica.Select your download options, and then select Download.

      Scaricare il progetto dell'app per le funzioni

      Il file ZIP scaricato è nel formato corretto per essere ripubblicato nell'app per le funzioni utilizzando la distribuzione push con file ZIP.The downloaded .zip file is in the correct format to be republished to your function app by using .zip push deployment. Il download dal portale consente anche di aggiungere i file necessari per aprire l'app per le funzioni direttamente in Visual Studio.The portal download can also add the files needed to open your function app directly in Visual Studio.

  • Uso delle API REST:Using REST APIs:

    Usare l'API GET di distribuzione seguente per scaricare i file dal progetto <function_app>: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/
    

    Includendo /site/wwwroot/ ci si assicura che il file ZIP contenga solo i file di progetto dell'app per le funzioni e non l'intero sito.Including /site/wwwroot/ makes sure your zip file includes only the function app project files and not the entire site. Se l'accesso ad Azure non è ancora stato eseguito, verrà richiesto di farlo.If you are not already signed in to Azure, you will be asked to do so.

È anche possibile scaricare un file ZIP da un repository GitHub.You can also download a .zip file from a GitHub repository. Quando si scarica un repository GitHub come file ZIP, GitHub aggiunge un livello di cartelle aggiuntivo per il ramo.When you download a GitHub repository as a .zip file, GitHub adds an extra folder level for the branch. Questo livello di cartelle aggiuntivo implica che non è possibile distribuire direttamente il file ZIP così come è stato scaricato da GitHub.This extra folder level means that you can't deploy the .zip file directly as you downloaded it from GitHub. Se si usa un repository GitHub per mantenere l'app per le funzioni, è necessario utilizzare l'integrazione continua per distribuire l'app.If you're using a GitHub repository to maintain your function app, you should use continuous integration to deploy your app.

Eseguire la distribuzione usando l'interfaccia della riga di comando di AzureDeploy by using Azure CLI

Per attivare una distribuzione push, è possibile utilizzare l'interfaccia della riga di comando di Azure.You can use Azure CLI to trigger a push deployment. Eseguire la distribuzione push di un file ZIP nell'app per le funzioni usando il comando az functionapp deployment source config-zip.Push deploy a .zip file to your function app by using the az functionapp deployment source config-zip command. Per usare questo comando, è necessario utilizzare l'interfaccia della riga di comando di Azure 2.0.21 o versione successiva.To use this command, you must use Azure CLI version 2.0.21 or later. Per visualizzare la versione dell'interfaccia della riga di comando di Azure in uso, utilizzare il comando az --version.To see what Azure CLI version you are using, use the az --version command.

Nel comando seguente sostituire il segnaposto <zip_file_path> con il percorso del file ZIP.In the following command, replace the <zip_file_path> placeholder with the path to the location of your .zip file. Sostituire anche <app_name> con il nome univoco dell'app per le funzioni e sostituire <resource_group> con il nome del gruppo di risorse.Also, replace <app_name> with the unique name of your function app and replace <resource_group> with the name of your resource group.

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

Questo comando distribuisce i file di progetto del file ZIP scaricato nell'app per le funzioni in Azure.This command deploys project files from the downloaded .zip file to your function app in Azure. Riavvia quindi l'app.It then restarts the app. Per visualizzare l'elenco delle distribuzioni per questa app per le funzioni, è necessario utilizzare le API REST.To view the list of deployments for this function app, you must use the REST APIs.

Quando si utilizza l'interfaccia della riga di comando di Azure nel computer locale, <zip_file_path> è il percorso del file ZIP nel computer in uso.When you're using Azure CLI on your local computer, <zip_file_path> is the path to the .zip file on your computer. È anche possibile eseguire l'interfaccia della riga di comando di Azure in Azure Cloud Shell.You can also run Azure CLI in Azure Cloud Shell. Quando si utilizza Cloud Shell, è innanzitutto necessario caricare il file ZIP per la distribuzione nell'account File di Azure associato a Cloud Shell.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 tal caso <zip_file_path> è il percorso di archiviazione utilizzato dall'account Cloud Shell.In that case, <zip_file_path> is the storage location that your Cloud Shell account uses. Per altre informazioni, vedere Rendere persistenti i file in Azure Cloud Shell.For more information, see Persist files in Azure Cloud Shell.

Distribuire il file con estensione zip con le API RESTDeploy ZIP file with REST APIs

È possibile usare le API REST del servizio distribuzione per distribuire il file ZIP nella propria app in Azure.You can use the deployment service REST APIs to deploy the .zip file to your app in Azure. Per eseguire la distribuzione, inviare una richiesta POST all'indirizzo https://<app_name>.scm.azurewebsites.net/api/zipdeploy.To deploy, send a POST request to https://<app_name>.scm.azurewebsites.net/api/zipdeploy. La richiesta POST deve contenere il file ZIP nel corpo del messaggio.The POST request must contain the .zip file in the message body. Le credenziali di distribuzione per l'app vengono fornite nella richiesta usando l'autenticazione di base HTTP.The deployment credentials for your app are provided in the request by using HTTP BASIC authentication. Per altre informazioni, vedere le informazioni di riferimento sulla distribuzione push tramite file ZIP.For more information, see the .zip push deployment reference.

Per l'autenticazione HTTP di base sono necessarie le credenziali di distribuzione del servizio app.For the HTTP BASIC authentication, you need your App Service deployment credentials. Per informazioni su come impostare le credenziali di distribuzione, vedere Impostare e reimpostare le credenziali a livello di utente.To see how to set your deployment credentials, see Set and reset user-level credentials.

Con cURLWith cURL

L'esempio seguente usa lo strumento cURL per distribuire un file con estensione zip.The following example uses the cURL tool to deploy a .zip file. Sostituire i segnaposto <deployment_user>, <zip_file_path> e <app_name>.Replace the placeholders <deployment_user>, <zip_file_path>, and <app_name>. Quando richiesto da cURL, digitare la password.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

Questa richiesta attiva la distribuzione push dal file ZIP caricato.This request triggers push deployment from the uploaded .zip file. È possibile esaminare le distribuzioni correnti e passate usando l'endpoint https://<app_name>.scm.azurewebsites.net/api/deployments, come illustrato nell'esempio cURL seguente.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. Anche in questo caso, sostituire il segnaposto <app_name> con il nome dell'app e <deployment_user> con il nome utente delle credenziali di distribuzione.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

Con PowerShellWith PowerShell

L'esempio seguente usa Publish-AzWebapp per caricare il file zip.The following example uses Publish-AzWebapp upload the .zip file. Sostituire i segnaposto <group-name>, <app-name> e <zip-file-path>.Replace the placeholders <group-name>, <app-name>, and <zip-file-path>.

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

Questa richiesta attiva la distribuzione push dal file ZIP caricato.This request triggers push deployment from the uploaded .zip file.

Per esaminare le distribuzioni correnti e precedenti, eseguire i comandi seguenti.To review the current and past deployments, run the following commands. Anche in questo caso, sostituire i <deployment-user> <deployment-password> <app-name> segnaposto, e.Again, replace the <deployment-user>, <deployment-password>, and <app-name> placeholders.

$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

Eseguire le funzioni dal pacchetto di distribuzioneRun functions from the deployment package

È anche possibile scegliere di eseguire le funzioni direttamente dal file di pacchetto di distribuzione.You can also choose to run your functions directly from the deployment package file. Questo metodo ignora il passaggio di distribuzione relativo alla copia dei file dal pacchetto alla directory wwwroot dell'app per le funzioni.This method skips the deployment step of copying files from the package to the wwwroot directory of your function app. Il file del pacchetto è invece montato dal runtime di funzioni e il contenuto della directory wwwroot diventa di sola lettura.Instead, the package file is mounted by the Functions runtime, and the contents of the wwwroot directory become read-only.

La distribuzione ZIP si integra con questa funzionalità che può essere attivata impostando l'impostazione dell'app per le funzioni WEBSITE_RUN_FROM_PACKAGE su un valore di 1.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. Per altre informazioni, vedere Run your Functions from a deployment package file (Esecuzione di funzioni da un file di pacchetto di distribuzione).For more information, see Run your functions from a deployment package file.

Personalizzazione della distribuzioneDeployment customization

Il processo di distribuzione presuppone che il file ZIP di cui si esegue il push contenga un'app pronta da eseguire.The deployment process assumes that the .zip file that you push contains a ready-to-run app. Per impostazione predefinita, non vengono eseguite personalizzazioni.By default, no customizations are run. Per abilitare gli stessi processi di compilazione ottenuti con l'integrazione continua, aggiungere quanto segue alle impostazione applicazione: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

Quando si usa la distribuzione push tramite file ZIP, questa impostazione è false per impostazione predefinita.When you use .zip push deployment, this setting is false by default. L'impostazione predefinita è true per le distribuzioni tramite integrazione continua.The default is true for continuous integration deployments. Se impostata su true, durante la distribuzione vengono usate le impostazioni relative alla distribuzione.When set to true, your deployment-related settings are used during deployment. È possibile configurare queste impostazioni come impostazioni app o in un file di configurazione con estensione deployment disponibile nella radice del file ZIP.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. Per altre informazioni, vedere Repository and deployment-related settings (Repository e impostazioni relative alla distribuzione) nelle informazioni di riferimento sulla distribuzione.For more information, see Repository and deployment-related settings in the deployment reference.

Passaggi successiviNext steps