Condividi tramite


Tecnologie di distribuzione in Funzioni di Azure

È possibile usare alcune tecnologie diverse per distribuire il codice del progetto di Funzioni di Azure in Azure. Questo articolo offre una panoramica dei metodi di distribuzione disponibili per l'utente e le raccomandazioni per il metodo migliore da usare in vari scenari. Fornisce anche un elenco completo di e dettagli chiave sulle tecnologie di distribuzione sottostanti.

Metodi di distribuzione

La tecnologia di distribuzione usata per pubblicare il codice nell'app per le funzioni in Azure dipende dalle esigenze specifiche e dal punto del ciclo di sviluppo. Ad esempio, durante lo sviluppo e il test è possibile distribuire direttamente dallo strumento di sviluppo, ad esempio Visual Studio Code. Quando l'app è in produzione, è più probabile pubblicare continuamente dal controllo del codice sorgente o usando una pipeline di pubblicazione automatizzata, che può includere la convalida e il test.

Nella tabella seguente vengono descritti i metodi di distribuzione disponibili per il progetto di codice.

Tipo di distribuzione Metodi Ideale per...
Strumenti basati su Pubblicazione di Visual Studio Code
Pubblicazione di Visual Studio
Pubblicazione degli strumenti di base
Distribuzioni durante lo sviluppo e altre distribuzioni improvvisate. Distribuzione del codice su richiesta tramite strumenti di sviluppo locali.
Servizio app gestito Centro distribuzione (CI/CD)
Distribuzioni di contenitori
Distribuzione continua (CI/CD) dal controllo del codice sorgente o da un registro contenitori. Le distribuzioni vengono gestite dalla piattaforma del servizio app (Kudu).
Pipeline esterne Azure Pipelines
GitHub Actions
Pipeline di produzione che includono convalida, test e altre azioni che devono essere eseguite come parte di una distribuzione automatizzata. Le distribuzioni vengono gestite dalla pipeline.

Le distribuzioni specifiche devono usare la tecnologia migliore in base allo scenario specifico. Molti dei metodi di distribuzione sono basati sulla distribuzione zip, consigliata per la distribuzione.

Disponibilità della tecnologia di distribuzione

Il metodo di distribuzione dipende anche dal piano di hosting e dal sistema operativo in cui si esegue l'app per le funzioni.

Funzioni offre attualmente cinque opzioni per l'hosting delle app per le funzioni:

Ogni piano ha comportamenti diversi. Non tutte le tecnologie di distribuzione sono disponibili per ogni piano di hosting e sistema operativo. Questo grafico fornisce informazioni sulle tecnologie di distribuzione supportate:

Tecnologia di distribuzione Piano a consumo Flex Consumo Elastic Premium Dedicato App contenitore
OneDeploy
Implementazione Zip
URL pacchetto esterno1
Contenitore Docker Solo Linux Solo Linux Solo Linux
Controllo del codice sorgente Solo Windows
Git locale1 Solo Windows
FTPS1 Solo Windows
Modifica nel portale2

1 Le tecnologie di distribuzione che richiedono la sincronizzazione manuale dei trigger non sono consigliate.
2 La modifica nel portale è disabilitata quando il codice viene distribuito nell'app per le funzioni dall'esterno del portale. Per altre informazioni, inclusi i dettagli del supporto linguistico per la modifica nel portale, vedere Dettagli del supporto linguistico.

Concetti chiave

Alcuni concetti chiave sono fondamentali per comprendere il funzionamento delle distribuzioni in Funzioni di Azure.

Attivazione della sincronizzazione

Quando si modifica uno dei trigger, l'infrastruttura di Funzioni deve essere a conoscenza delle modifiche. La sincronizzazione avviene automaticamente per molte tecnologie di distribuzione. Tuttavia, in alcuni casi, è necessario sincronizzare manualmente i trigger.

È necessario sincronizzare manualmente i trigger quando si usano queste opzioni di distribuzione:

È possibile sincronizzare i trigger in uno dei modi seguenti:

  • Riavviare l'app per le funzioni nel portale di Azure.

  • Usare il az rest comando per inviare una richiesta HTTP POST che chiama l'API syncfunctiontriggers , come in questo esempio:

    az rest --method post --url https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
    

Quando si distribuisce una versione aggiornata del pacchetto di distribuzione e si mantiene lo stesso URL del pacchetto esterno, è necessario riavviare manualmente l'app per le funzioni. Indica all'host che deve sincronizzare e ridistribuire gli aggiornamenti dallo stesso URL del pacchetto. L'host funzioni esegue anche una sincronizzazione dei trigger in background dopo l'avvio dell'applicazione. Tuttavia, per i piani di hosting A consumo e Elastic Premium è necessario sincronizzare manualmente i trigger in questi scenari:

  • Distribuzioni che usano un URL di pacchetto esterno con modelli ARM o Terraform.
  • Quando si aggiorna il pacchetto di distribuzione con lo stesso URL del pacchetto esterno.

Compilazione remota

È possibile richiedere Funzioni di Azure di eseguire una compilazione remota del progetto di codice durante la distribuzione. In questi scenari è consigliabile richiedere una compilazione remota invece di compilare localmente:

  • Si sta distribuendo un'app in un'app per le funzioni basata su Linux sviluppata in un computer Windows. Questo è in genere il caso per lo sviluppo di app Python. Puoi finire con in librerie errate usate durante la compilazione del pacchetto di distribuzione in locale in Windows.
  • Il progetto ha dipendenze da un indice di pacchetto personalizzato.
  • Si vuole ridurre le dimensioni del pacchetto di distribuzione.

La modalità di richiesta di una compilazione remota dipende dal fatto che l'app venga eseguita in Azure in Windows o Linux.

Tutte le app per le funzioni in esecuzione in Windows hanno un'app di gestione di piccole dimensioni, il sito scm fornito da Kudu. Questo sito gestisce gran parte della distribuzione e della logica di compilazione per Funzioni di Azure.

Quando un'app viene distribuita in Windows, vengono eseguiti comandi specifici del linguaggio, ad esempio dotnet restore (C#) o npm install (JavaScript).

Quando si usano build remote durante la distribuzione, si applicano le considerazioni seguenti:

  • Le build remote sono supportate per le app per le funzioni in esecuzione in Linux nel piano a consumo. Tuttavia, le opzioni di distribuzione sono limitate per queste app perché non hanno un sito scm (Kudu).
  • Le app per le funzioni in esecuzione in Linux in un piano Premium o in un piano dedicato (servizio app) hanno un scm sito (Kudu), ma è limitato rispetto a Windows.
  • Le compilazioni remote non vengono eseguite quando un'app usa run-from-package. Per informazioni su come usare la compilazione remota in questi casi, vedere Distribuzione zip.
  • Potrebbero verificarsi problemi con la compilazione remota quando l'app è stata creata prima che la funzionalità sia stata resa disponibile (1° agosto 2019). Per le app meno recenti, creare una nuova app per le funzioni o eseguire az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME> per aggiornare l'app per le funzioni. Questo comando potrebbe richiedere due tentativi di esito positivo.

Archiviazione del contenuto dell'app

I metodi di distribuzione basati su pacchetti archiviano il pacchetto nell'account di archiviazione associato all'app per le funzioni, definito nell'impostazione AzureWebJobsStorage . Se disponibili, le app del piano Consumo e Elastic Premium provano a usare la condivisione di contenuto File di Azure da questo account, ma è anche possibile gestire il pacchetto in un'altra posizione. Le app del piano a consumo flessibile usano invece un contenitore di archiviazione nell'account di archiviazione predefinito, a meno che non si configuri un account di archiviazione diverso da usare per la distribuzione. Per altre informazioni, vedere i dettagli in Dove archiviare il contenuto dell'app in ogni tecnologia di distribuzione illustrata nella sezione successiva.

Importante

L'account di archiviazione viene usato per archiviare dati importanti dell'app, a volte incluso il codice dell'applicazione stesso. È consigliabile limitare l'accesso da altre app e utenti all'account di archiviazione.

Dettagli della tecnologia di distribuzione

I metodi di distribuzione seguenti sono disponibili in Funzioni di Azure.

Una distribuzione

Una distribuzione è l'unica tecnologia di distribuzione supportata per le app nel piano Flex Consumption. Il risultato finale è un pacchetto di .zip pronto per l'esecuzione dell'app per le funzioni.

Come usarlo: eseguire la distribuzione con la funzionalità di pubblicazione di Visual Studio Code o dalla riga di comando usando Funzioni di Azure Core Tools o l'interfaccia della riga di comando di Azure. L'attività Azure Dev Ops e GitHub Action sfruttano in modo analogo una distribuzione quando rilevano che viene distribuita un'app Flex Consumption.

Quando si crea un'app Flex Consumption, è necessario specificare un contenitore di archiviazione di distribuzione (BLOB) e un metodo di autenticazione. Per impostazione predefinita viene usato lo stesso account di archiviazione della AzureWebJobsStorage connessione, con un stringa di connessione come metodo di autenticazione. Di conseguenza, le impostazioni di distribuzione vengono configurate durante la creazione dell'app senza alcuna necessità di impostazioni dell'applicazione.

Quando usarlo: una distribuzione è l'unica tecnologia di distribuzione disponibile per le app per le funzioni in esecuzione nel piano Flex Consumption.

Dove viene archiviato il contenuto dell'app: quando si crea un'app per le funzioni Flex Consumption, si specifica un contenitore di archiviazione della distribuzione. Si tratta di un contenitore BLOB in cui la piattaforma caricherà il contenuto dell'app distribuito. Per modificare il percorso, è possibile visitare il pannello Impostazioni distribuzione nel portale di Azure o usare l'interfaccia della riga di comando di Azure.

Distribuzione Zip

La distribuzione zip è la tecnologia di distribuzione predefinita e consigliata per le app per le funzioni nei piani Consumo, Elastic Premium e servizio app (dedicato). Il risultato finale è un pacchetto di .zip pronto per l'esecuzione dell'app per le funzioni. Differisce dall'URL del pacchetto esterno in quanto la piattaforma è responsabile della compilazione remota e dell'archiviazione del contenuto dell'app.

Come usarlo: eseguire la distribuzione usando lo strumento client preferito: Visual Studio Code, Visual Studio o dalla riga di comando usando Funzioni di Azure Core Tools o l'interfaccia della riga di comando di Azure. L'attività Azure Dev Ops e GitHub Action sfruttano in modo analogo la distribuzione zip.

Quando si esegue la distribuzione tramite zip deploy, è possibile impostare l'app da eseguire dal pacchetto. Per eseguire dal pacchetto, impostare il valore dell'impostazione dell'applicazione WEBSITE_RUN_FROM_PACKAGE su 1. È consigliabile distribuire zip. Offre tempi di caricamento più rapidi per le applicazioni ed è l'impostazione predefinita per VS Code, Visual Studio e l'interfaccia della riga di comando di Azure.

Quando usarlo: La distribuzione zip è la tecnologia di distribuzione predefinita e consigliata per le app per le funzioni nei piani Consumo di Windows, Windows e Linux Elastic Premium e Windows e Linux servizio app (dedicato).

Dove viene archiviato il contenuto dell'app: il contenuto dell'app da una distribuzione ZIP per impostazione predefinita viene archiviato nel file system, che può essere supportato da File di Azure dall'account di archiviazione specificato al momento della creazione dell'app per le funzioni. In Consumo linux, il contenuto dell'app viene invece salvato in modo permanente in un BLOB nell'account di archiviazione specificato dall'impostazione dell'app AzureWebJobsStorage e l'impostazione WEBSITE_RUN_FROM_PACKAGE dell'app assumerà il valore dell'URL del BLOB.

URL del pacchetto esterno

L'URL del pacchetto esterno è un'opzione se si vuole controllare manualmente la modalità di esecuzione delle distribuzioni. Si assume la responsabilità di caricare un pacchetto di .zip pronto per l'esecuzione contenente il contenuto dell'app compilato nell'archiviazione BLOB e fare riferimento a questo URL esterno come impostazione dell'applicazione nell'app per le funzioni. Ogni volta che l'app viene riavviata, recupera il pacchetto, lo monta e viene eseguito in modalità Esegui dal pacchetto .

Come usarlo: aggiungere WEBSITE_RUN_FROM_PACKAGE alle impostazioni dell'applicazione. Il valore di questa impostazione deve essere un URL BLOB che punta al percorso del pacchetto specifico che si vuole eseguire l'app. È possibile aggiungere impostazioni nel portale o usando l'interfaccia della riga di comando di Azure.

Se si usa Archiviazione BLOB di Azure, l'app per le funzioni può accedere al contenitore usando una connessione gestita basata su identità o con una firma di accesso condiviso. L'opzione scelta influisce sul tipo di URL usato come valore per WEBSITE_RUN_FROM_PACKAGE. L'identità gestita è consigliata per la sicurezza complessiva e perché i token di firma di accesso condiviso scadono e devono essere gestiti manualmente.

Ogni volta che si distribuisce il file di pacchetto a cui fa riferimento un'app per le funzioni, è necessario sincronizzare manualmente i trigger, inclusa la distribuzione iniziale. Quando si modifica il contenuto del file del pacchetto e non l'URL stesso, è anche necessario riavviare l'app per le funzioni per sincronizzare i trigger. Fare riferimento alla guida pratica sulla configurazione di questa tecnologia di distribuzione.

Quando usarlo: l'URL del pacchetto esterno è l'unico metodo di distribuzione supportato per le app in esecuzione nel piano a consumo Linux quando non si vuole che si verifichi una compilazione remota. Questo metodo è anche la tecnologia di distribuzione consigliata quando si crea l'app senza File di Azure. Per le app scalabili in esecuzione in Linux, è consigliabile prendere in considerazione l'hosting del piano a consumo Flex.

Dove viene archiviato il contenuto dell'app: si è responsabili del caricamento del contenuto dell'app nell'archivio BLOB. È possibile usare qualsiasi account di archiviazione BLOB, anche se è consigliabile Archiviazione BLOB di Azure.

Contenitore Docker

È possibile distribuire un'app per le funzioni in esecuzione in un contenitore Linux.

Come usarla: Creare le funzioni in un contenitore Linux e quindi distribuire il contenitore in un piano Premium o Dedicato in Funzioni di Azure o in un altro host contenitore. Usare Azure Functions Core Tools per creare un Dockerfile personalizzato per il progetto usato per compilare un'app per le funzioni in contenitori. È possibile usare il contenitore nelle distribuzioni seguenti:

Quando usarlo: usare l'opzione contenitore Docker quando è necessario un maggiore controllo sull'ambiente Linux in cui viene eseguita l'app per le funzioni e dove è ospitato il contenitore. Questo meccanismo di distribuzione è disponibile solo per le funzioni in esecuzione in Linux.

Dove viene archiviato il contenuto dell'app: il contenuto dell'app viene archiviato nel registro contenitori specificato come parte dell'immagine.

Controllo del codice sorgente

È possibile abilitare l'integrazione continua tra l'app per le funzioni e un repository di codice sorgente. Con il controllo del codice sorgente abilitato, un aggiornamento al codice nel repository di origine connesso attiva la distribuzione del codice più recente dal repository. Per altre informazioni, vedere Distribuzione continua per Funzioni di Azure.

Come usarlo: il modo più semplice per configurare la pubblicazione dal controllo del codice sorgente è dal Centro distribuzione nell'area Funzioni del portale. Per altre informazioni, vedere Distribuzione continua per Funzioni di Azure.

Quando usarlo: l'uso del controllo del codice sorgente è la procedura consigliata per i team che collaborano alle app per le funzioni. Il controllo del codice sorgente è un'opzione di distribuzione valida che consente pipeline di distribuzione più sofisticate. Il controllo del codice sorgente è in genere abilitato in uno slot di staging, che può essere scambiato in produzione dopo la convalida degli aggiornamenti dal repository. Per altre informazioni, vedere slot di distribuzione di Funzioni di Azure.

Dove viene archiviato il contenuto dell'app: Il contenuto dell'app si trova nel sistema di controllo del codice sorgente, ma un contenuto dell'app clonato e compilato localmente viene archiviato nel file system dell'app, che può essere supportato da File di Azure dall'account di archiviazione specificato al momento della creazione dell'app per le funzioni.

Repository Git locale

È possibile usare Git locale per eseguire il push del codice dal computer locale a Funzioni di Azure usando Git.

Come usarlo: seguire le istruzioni riportate in Distribuzione Git locale nel servizio app di Azure.

Quando usarlo: per ridurre la probabilità di errori, è consigliabile evitare di usare metodi di distribuzione che richiedono il passaggio aggiuntivo di sincronizzazione manuale dei trigger. Usare la distribuzione ZIP, quando possibile.

Dove viene archiviato il contenuto dell'app: il contenuto dell'app viene archiviato nel file system, che può essere supportato da File di Azure dall'account di archiviazione specificato al momento della creazione dell'app per le funzioni.

FTP/S

È possibile usare FTP/S per trasferire direttamente i file in Funzioni di Azure, anche se questo metodo di distribuzione non è consigliato. Quando non si prevede l'uso dell'FTP, è necessario disabilitarlo. Se si sceglie di usarlo, è necessario applicare FTPS. Per informazioni su come nel portale di Azure, vedere Applicare FTPS.

Come usarlo: seguire le istruzioni riportate in Impostazioni di distribuzione FTPS per ottenere l'URL e le credenziali che è possibile usare per eseguire la distribuzione nell'app per le funzioni tramite FTPS.

Quando usarlo: per ridurre la probabilità di errori, è consigliabile evitare di usare metodi di distribuzione che richiedono il passaggio aggiuntivo di sincronizzazione manuale dei trigger. Usare la distribuzione ZIP, quando possibile.

Dove viene archiviato il contenuto dell'app: il contenuto dell'app viene archiviato nel file system, che può essere supportato da File di Azure dall'account di archiviazione specificato al momento della creazione dell'app per le funzioni.

Modifica del portale

Nell'editor basato sul portale è possibile modificare direttamente i file presenti nell'app per le funzioni (essenzialmente distribuendo ogni volta che si salvano le modifiche).

Come usarlo: per poter modificare le funzioni nel portale di Azure, è necessario aver creato le funzioni nel portale. Per mantenere un'unica origine di verità, l'uso di qualsiasi altro metodo di distribuzione rende la funzione di sola lettura e impedisce la modifica continua del portale. Per tornare a uno stato in cui è possibile modificare i file nel portale di Azure, è possibile ripristinare manualmente la modalità di modifica in Read/Write e rimuovere eventuali impostazioni dell'applicazione correlate alla distribuzione (ad esempio WEBSITE_RUN_FROM_PACKAGE).

Quando usarlo: il portale è un buon modo per iniziare a usare Funzioni di Azure. Per operazioni di sviluppo più avanzate, è consigliabile usare uno degli strumenti client seguenti:

Dove viene archiviato il contenuto dell'app: il contenuto dell'app viene archiviato nel file system, che può essere supportato da File di Azure dall'account di archiviazione specificato al momento della creazione dell'app per le funzioni.

La tabella seguente illustra i sistemi operativi e le lingue che supportano la modifica nel portale:

Lingua Consumo Windows Windows Premium Windows Dedicato Consumo Linux Linux Premium Linux dedicato
C#1
Java
JavaScript (Node.js)
Python2
PowerShell
TypeScript (Node.js)

1 La modifica nel portale è supportata solo per i file di script C#, che vengono eseguiti in-process con l'host. Per altre informazioni, vedere le informazioni di riferimento per gli sviluppatori di script C# di Funzioni di Azure (con estensione csx).
2 La modifica nel portale è supportata solo per il modello di programmazione Python v1.

Comportamenti di distribuzione

Quando si distribuiscono gli aggiornamenti al codice dell'app per le funzioni, le funzioni attualmente in esecuzione vengono terminate. Al termine della distribuzione, il nuovo codice viene caricato per avviare l'elaborazione delle richieste. Vedere Migliorare le prestazioni e l'affidabilità di Funzioni di Azure per informazioni su come scrivere funzioni senza stato e difensive.

Se è necessario un maggiore controllo su questa transizione, è consigliabile usare gli slot di distribuzione.

Slot di distribuzione

Quando si distribuisce l'app per le funzioni in Azure, è possibile eseguire la distribuzione in uno slot di distribuzione separato anziché direttamente nell'ambiente di produzione. La distribuzione in uno slot di distribuzione e quindi lo scambio in produzione dopo la verifica è il modo consigliato per configurare la distribuzione continua.

Il modo in cui si esegue la distribuzione in uno slot dipende dallo strumento di distribuzione specifico usato. Ad esempio, quando si usa Azure Functions Core Tools, si include l'opzione--slot per indicare il nome di uno slot specifico per il comando func azure functionapp publish.

Per altre informazioni sugli slot di distribuzione, vedere la documentazione relativa agli slot di distribuzione di Funzioni di Azure.

Passaggi successivi

Leggere questi articoli per altre informazioni sulla distribuzione delle app per le funzioni: