Eseguire funzioni da un file pacchetto in Azure

In Azure, è possibile eseguire le funzioni direttamente da un file di pacchetto di distribuzione nell'app per le funzioni. L'altra opzione consiste nel distribuire i file nella directory c:\home\site\wwwroot (Windows) o /home/site/wwwroot (Linux) dell'app per le funzioni.

Questo articolo descrive i vantaggi dell'esecuzione delle funzioni da un pacchetto. Viene inoltre illustrato come abilitare questa funzionalità nell'app per le funzioni.

Vantaggi dell'esecuzione da un file di pacchetto

L'esecuzione di funzioni da un file di pacchetto offre diversi vantaggi:

  • Riduce il rischio di problemi di blocco di copia dei file.
  • Possono essere distribuiti in un'app di produzione (con il riavvio).
  • Verifica i file in esecuzione nell'app.
  • Migliora le prestazioni delle distribuzioni Azure Resource Manager.
  • Riduce i tempi di avvio a freddo, in particolare per le funzioni JavaScript con grandi alberi del pacchetto npm.

Per altre informazioni, vedere questo annuncio.

Abilitare le funzioni perché possano essere eseguite da un pacchetto

Per abilitare l'esecuzione dell'app per le funzioni da un pacchetto, aggiungere un'impostazione dell'appWEBSITE_RUN_FROM_PACKAGE all'app per le funzioni. L'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE deve avere almeno uno dei valori seguenti:

valore Descrizione
1 Essa indica che l'app per le funzioni viene eseguita da un file di pacchetto locale distribuito nella cartella c:\home\data\SitePackages (Windows) o /home/data/SitePackages (Linux) dell'app per le funzioni.
<URL> Imposta un URL che rappresenta il percorso remoto del file pacchetto specifico da eseguire. Obbligatorio per app per le funzioni in esecuzione in Linux in un piano a consumo.

La tabella seguente indica i valori WEBSITE_RUN_FROM_PACKAGE consigliati per la distribuzione in un sistema operativo e in un piano di hosting specifici:

Piano di hosting Windows Linux
Consumo 1 è altamente consigliato. È supportato solo <URL>.
Premium È consigliato1 . È consigliato1 .
Dedicato È consigliato1 . È consigliato1 .

Considerazioni generali

  • Il file del pacchetto deve essere di formato .zip. I formati tar e gzip non sono supportati.
  • La distribuzione zip è consigliabile.
  • Quando si distribuisce l'app per le funzioni in Windows, è necessario impostare WEBSITE_RUN_FROM_PACKAGE su 1 e pubblicare con distribuzione zip.
  • Quando si esegue da un pacchetto, la cartella wwwroot è di sola lettura e viene visualizzato un errore se si scrivono file in questa directory. Anche i file sono di sola lettura nel portale di Azure.
  • La dimensione massima per un file del pacchetto di distribuzione è di 1 GB.
  • Non è possibile usare la cache locale durante l'esecuzione da un pacchetto di distribuzione.
  • Se il progetto necessita di usare la compilazione remota, non usare l'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE. Aggiungere invece l'impostazione dell'app SCM_DO_BUILD_DURING_DEPLOYMENT=true di personalizzazione della distribuzione. Per Linux, aggiungere anche l'impostazione ENABLE_ORYX_BUILD=true. Per ulteriori informazioni, vedere Compilazione remota.

Nota

L'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE non funziona con MSDeploy come descritto in MSDeploy VS. ZipDeploy. Si riceverà un errore durante la distribuzione, ad esempio ARM-MSDeploy Deploy Failed. Per risolvere questo errore, bloccare /MSDeploy su /ZipDeploy.

Aggiungere l'impostazione WEBSITE_RUN_FROM_PACKAGE

Esistono diversi modi per aggiungere, aggiornare ed eliminare le impostazioni dell'app per le funzioni:

Le modifiche apportate alle impostazioni dell'app per le funzioni richiedono il riavvio dell'app per le funzioni.

Creazione dell'archivio ZIP

Il file compresso ZIP distribuito deve contenere tutti i file necessari per l'app per le funzioni. È possibile creare manualmente un archivio ZIP dal contenuto di una cartella del progetto Funzioni usando la funzionalità di compressione predefinita .zip o strumenti di terze parti.

L'archivio deve includere il file host.json nella radice della cartella estratta. Lo stack di linguaggio selezionato per l'app per le funzioni crea requisiti aggiuntivi:

Importante

Per i linguaggi che generano l'output compilato per la distribuzione, assicurarsi di comprimere il contenuto della cartella di output che si intende pubblicare e non l'intera cartella del progetto. Quando Funzioni estrae il contenuto dell'archivio ZIP, il file host.json deve esistere nella radice del pacchetto.

Usare WEBSITE_RUN_FROM_PACKAGE = 1

Questa sezione fornisce informazioni su come eseguire l'app per le funzioni da un file pacchetto in loco.

Considerazioni sulla distribuzione da un pacchetto in loco

  • L'uso di un pacchetto in loco è l'opzione consigliata per l'esecuzione da pacchetto di distribuzione, ad eccezione dell'esecuzione su Linux ospitato in un piano A consumo.
  • La distribuzione zip è il metodo consigliato per caricare un pacchetto di distribuzione sul sito.
  • Quando non si usa la distribuzione zip, assicurarsi che la cartella c:\home\data\SitePackages (Windows) o /home/data/SitePackages (Linux) contenga un file denominato packagename.txt. Questo file contiene solo il nome, senza spazi vuoti, del file del pacchetto in questa cartella attualmente in esecuzione.

Integrazione con distribuzione di file ZIP

La distribuzione con file ZIP è una funzionalità del Servizio app di Azure che consente di distribuire il progetto dell'app per le funzioni nella directory wwwroot. Il progetto viene impacchettato come un file di distribuzione di file ZIP. Le stesse API possono essere usate per distribuire il pacchetto nella cartella c:\home\data\SitePackages (Windows) o /home/data/SitePackages (Linux).

Quando si imposta il valore WEBSITE_RUN_FROM_PACKAGE dell'impostazione dell'app su 1, le API di distribuzione ZIP copiano il pacchetto nella cartella c:\home\data\SitePackages (Windows) o /home/data/SitePackages (Linux) invece di estrarre i file in c:\home\site\wwwroot (Windows) o /home/site/wwwroot (Linux). Questa operazione crea anche il file packagename.txt. Dopo il riavvio automatico dell'app per le funzioni, il pacchetto viene montato in wwwroot come file system di sola lettura. Per altre informazioni sulla distribuzione di file ZIP, vedere Distribuzione di file ZIP nelle Funzioni di Azure.

Nota

Quando si verifica una distribuzione, viene attivato un riavvio dell'app per le funzioni. Le esecuzioni di funzioni attualmente in esecuzione durante la distribuzione vengono terminate. Per informazioni su come scrivere funzioni senza stato e difensive, vedere Scrivere le funzioni in modo che siano senza stato.

Usare WEBSITE_RUN_FROM_PACKAGE = URL

Questa sezione fornisce informazioni su come eseguire l'app per le funzioni da un pacchetto distribuito in un endpoint URL. Questa opzione è l'unica supportata per l'esecuzione da un pacchetto ospitato in Linux con un piano A consumo.

Considerazioni sulla distribuzione da un URL

  • Le app per le funzioni in esecuzione in Windows riscontrano un lieve aumento del tempo di avvio a freddo quando il pacchetto dell'applicazione viene distribuito a un endpoint URL tramite WEBSITE_RUN_FROM_PACKAGE = <URL>.
  • Quando si specifica un URL, è anche necessario sincronizzare manualmente i trigger dopo la pubblicazione di un pacchetto aggiornato.
  • Il runtime di Funzioni deve disporre delle autorizzazioni per accedere all'URL del pacchetto.
  • Non distribuire il pacchetto in Archiviazione BLOB di Azure come BLOB pubblico. Usare invece un contenitore privato con una firma di accesso condiviso (SAS) o usare un'identità gestita per consentire al runtime di Funzioni di accedere al pacchetto.
  • È necessario conservare tutti gli URL di firma di accesso condiviso usati per la distribuzione. Quando una firma di accesso condiviso scade, il pacchetto non può più essere distribuito. In questo caso, è necessario generare una nuova firma di accesso condiviso e aggiornare l'impostazione nell'app per le funzioni. È possibile ovviare a quest’onere di gestione usando un'identità gestita.
  • Quando si è in esecuzione in un piano Premium, assicurarsi di eliminare gli avvii a freddo.
  • Quando si usa un piano dedicato, assicurarsi di abilitare Always On.
  • È possibile usare Azure Storage Explorer per caricare i file di pacchetto in contenitori BLOB nell'account di archiviazione.

Caricamento manuale di un pacchetto nell'archivio BLOB

Per distribuire un pacchetto compresso quando l'opzione URL è in uso, è necessario creare un pacchetto di distribuzione compresso .zip e caricarlo nella destinazione. La procedura seguente distribuisce in un contenitore nell'archiviazione BLOB:

  1. Creare un pacchetto .zip per il progetto usando l'utilità preferita.

  2. Nel portale di Azure cercare il nome dell'account di archiviazione o cercarlo nell'elenco degli account di archiviazione.

  3. Nell'account di archiviazione selezionare Contenitori in Archiviazione dati.

  4. Selezionare + Contenitore per creare un nuovo contenitore di archiviazione BLOB nell'account.

  5. Nella pagina Nuovo contenitore specificare un Nome (ad esempio, distribuzioni), assicurarsi che il Livello di accesso anonimo sia Privato e quindi selezionare Crea.

  6. Selezionare il contenitore creato, quindi selezionare Carica, andare al percorso del file ZIP creato con il progetto e selezionare Carica.

  7. Al termine del caricamento, scegliere il file BLOB caricato e copiare l'URL. Se non si usa un'identità gestita, può essere necessario generare un URL di firma di accesso condiviso.

  8. Cercare l'app per le funzioni o cercarla nella pagina App per le funzioni.

  9. Nell'app per le funzioni, espandere Impostazionie selezionare Variabili di ambiente.

  10. Nella scheda Impostazioni app selezionare + Aggiungi.

  11. Immettere il valore WEBSITE_RUN_FROM_PACKAGE per il Nome e incollare l'URL del pacchetto in Archiviazione BLOB per il Valore.

  12. Selezionare Applica seguito da Applica e Conferma per salvare l'impostazione e riavviare l'app per le funzioni.

È ora possibile eseguire la funzione in Azure per verificare che la distribuzione del file ZIP del pacchetto di distribuzione abbia avuto esito positivo.

Recuperare un pacchetto da Archiviazione BLOB di Azure usando un'identità gestita

È possibile configurare Archiviazione BLOB di Azure per autorizzare le richieste con Microsoft Entra ID. Questa configurazione significa che invece di generare una chiave di firma di accesso condiviso con una scadenza, è possibile basarsi sull'identità gestita dell'applicazione. Per impostazione predefinita, viene usata l'identità assegnata dal sistema dell'app. Se si vuole specificare un'identità assegnata dall'utente, è possibile impostare l'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID sull'ID risorsa di tale identità. L'impostazione può anche accettare SystemAssigned come valore, che equivale a omettere l'impostazione.

Per abilitare il recupero del pacchetto tramite l'identità:

  1. Assicurarsi che il BLOB sia configurato per l'accesso privato.

  2. Concedere all'identità il ruolo Lettore di dati BLOB di archiviazione con ambito che includa il BLOB del pacchetto. Per informazioni dettagliate sulla creazione dell'assegnazione di ruolo, vedere Assegnare un ruolo di Azure per l'accesso ai dati BLOB.

  3. Impostare l'impostazione dell'applicazione WEBSITE_RUN_FROM_PACKAGE sull'URL BLOB del pacchetto. Questo URL è in genere in formato https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} o simile.