Eseguire le funzioni da un file di 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 d:\home\site\wwwroot directory (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

Esistono diversi vantaggi nell'esecuzione da un file di pacchetto:

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

Per altre informazioni, vedere questo annuncio.

Abilitare le funzioni da eseguire da un pacchetto

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

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

La tabella seguente indica le opzioni consigliate WEBSITE_RUN_FROM_PACKAGE per la distribuzione in un sistema operativo specifico e in un piano di hosting:

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 formattato con estensione zip. I formati Tar e gzip non sono attualmente supportati.
  • È consigliabile distribuire zip.
  • Quando si distribuisce l'app per le funzioni in Windows, è necessario impostare WEBSITE_RUN_FROM_PACKAGE1 e pubblicare con la distribuzione zip.
  • Quando si esegue da un pacchetto, la cartella diventa di sola lettura e viene visualizzato un errore durante la wwwroot scrittura di 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 è attualmente 1 GB.
  • Non è possibile usare la cache locale durante l'esecuzione da un pacchetto di distribuzione.
  • Se il progetto deve usare la compilazione remota, non usare l'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE . Aggiungere invece l'impostazione dell'app di personalizzazione della SCM_DO_BUILD_DURING_DEPLOYMENT=true distribuzione. Per Linux, aggiungere anche l'impostazione ENABLE_ORYX_BUILD=true . Per altre informazioni, vedere Compilazione remota.

Nota

WEBSITE_RUN_FROM_PACKAGE non funziona con MSDeploy come descritto qui. Si riceverà un errore durante la distribuzione, ad esempio ARM-MSDeploy Deploy Failed. Modificare /MSDeploy in /ZipDeploy e questo errore verrà risolto.

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.

Uso di WEBSITE_RUN_FROM_PACKAGE = 1

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

Considerazioni sulla distribuzione da un pacchetto sul sito

  • L'uso di un pacchetto sul sito è l'opzione consigliata per l'esecuzione dal pacchetto di distribuzione, ad eccezione di Linux ospitata in un piano a consumo.
  • La distribuzione zip è il modo consigliato per caricare un pacchetto di distribuzione nel sito.
  • Quando non si usa la distribuzione ZIP, assicurarsi che la d:\home\data\SitePackages cartella (Windows) o /home/data/SitePackages (Linux) abbia 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

Distribuzione di file ZIP è una funzione 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 d:\home\data\SitePackages cartella (Windows) o /home/data/SitePackages (Linux).

Con il WEBSITE_RUN_FROM_PACKAGE valore dell'impostazione dell'app di 1, le API di distribuzione ZIP copiano il pacchetto nella d:\home\data\SitePackages cartella (Windows) o /home/data/SitePackages (Linux) anziché estrarre i file in d:\home\site\wwwroot (Windows) o /home/site/wwwroot (Linux). Questa operazione crea anche il file packagename.txt. Dopo un riavvio, il pacchetto viene montato wwwroot in 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 Migliorare le prestazioni e l'affidabilità di Funzioni di Azure.

Uso di 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 in Linux ospitato in un piano a consumo.

Considerazioni sulla distribuzione da un URL

  • Quando si esegue un'app per le funzioni in Windows, l'impostazione WEBSITE_RUN_FROM_PACKAGE = <URL> dell'app offre prestazioni di avvio a freddo peggiori e non è consigliata.
  • 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 ousare un'identità gestita per consentire al runtime di Funzioni di accedere al pacchetto.
  • È necessario mantenere 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 eliminare questo carico di gestione usando un'identità gestita.
  • Quando si esegue in un piano Premium, assicurarsi di eliminare gli avvii a freddo.
  • Quando si esegue in un piano dedicato, assicurarsi di aver abilitato Always On.
  • È possibile usare Archiviazione di Azure Explorer per caricare i file di pacchetto nei contenitori BLOB nell'account di archiviazione.

Caricamento manuale di un pacchetto in Archiviazione BLOB

Per distribuire un pacchetto compresso quando si usa l'opzione URL, è necessario creare un pacchetto di distribuzione compresso con estensione zip e caricarlo nella destinazione. Questo esempio viene distribuito in un contenitore in Archiviazione BLOB.

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

  2. Nella portale di Azure cercare il nome dell'account di archiviazione o cercarlo negli account di archiviazione.

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

  4. Selezionare + Contenitore per creare un nuovo contenitore blob Archiviazione nell'account.

  5. Nella pagina Nuovo contenitore specificare un nome, ad esempio "distribuzioni", assicurarsi che il livello di accesso pubblico sia Privato e selezionare Crea.

  6. Selezionare il contenitore creato, selezionare Carica, passare 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. Potrebbe essere necessario generare un URL di firma di accesso condiviso se non si usa un'identità

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

  9. Nell'app per le funzioni selezionare Configurazioni in Impostazioni.

  10. Nella scheda Applicazione Impostazioni selezionare Nuova impostazione applicazione

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

  12. Seleziona OK. Selezionare quindi Salva>continua per salvare l'impostazione e riavviare l'app.

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

Di seguito viene illustrata un'app per le funzioni configurata per l'esecuzione da un file con estensione zip ospitato in archiviazione BLOB di Azure:

WEBSITE_RUN_FROM_ZIP app setting

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

Archiviazione BLOB di Azure può essere configurato per autorizzare le richieste con Microsoft Entra ID. Ciò significa che invece di generare una chiave di firma di accesso condiviso con una scadenza, è invece possibile basarsi sull'identità gestita dell'applicazione. Per impostazione predefinita, verrà usata l'identità assegnata dal sistema dell'app. Se vuoi specificare un'identità assegnata dall'utente, puoi 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, anche se equivale a omettere completamente 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 Archiviazione con ambito sul 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. Probabilmente si tratta del formato "https://{nome-account-archiviazione}.blob.core.windows.net/{nome-contenitore}/{path-to-package}" o simile.

Passaggi successivi