Eseguire la distribuzione in Funzioni di Azure con Azure Developer CLI

Azure Developer CLI (azd) supporta le distribuzioni di codice e contenitori in Funzioni di Azure. Usare l'host dedicato function in azure.yaml per entrambe le modalità:

  • Distribuzione del codice crea un pacchetto di codice della funzione compilato come archivio ZIP e lo carica nell'app per le funzioni.
  • Distribuzione del contenitore compila o risolve un'immagine del contenitore, la pubblica in Registro Azure Container (ACR) quando necessario e aggiorna la Function App per eseguire l'immagine.

Funzioni di Azure e Servizio app di Azure usano entrambi il Microsoft.Web/sites provider di risorse e i flussi di distribuzione dei contenitori condividono alcuni meccanismi interni. Tuttavia, non si tratta dello stesso azd host. Functions usano host: function, hanno pacchetti specifici di Functions e comportamento di compilazione remota e non usano il flusso di lavoro dello slot di distribuzione di App Service.

Scegli una modalità di distribuzione

azd seleziona la modalità di distribuzione dalla configurazione del servizio:

Configurazione Modalità di distribuzione
Una sorgente project con un non Docker language supportato e nessuna docker.path Distribuzione del codice
language: docker Distribuzione del contenitore
Un valore docker.path con una lingua di origine Distribuzione del contenitore
Precompilato image Distribuzione del contenitore

La Function App di cui è stato effettuato il provisioning deve usare la stessa modalità della configurazione del servizio. Se l'app per le funzioni è configurata per i contenitori ma azure.yaml seleziona la distribuzione del codice o viceversa, azd deploy si arresta prima del caricamento e segnala la mancata corrispondenza.

Eseguire il deploy del codice funzione

Configurare un servizio di funzioni basato su codice con un progetto di origine, un linguaggio supportato e host: function:

services:
  api:
    project: ./src/api
    language: ts
    host: function

Durante azd deploy, azd compila il progetto, applica le .funcignore esclusioni, crea un archivio ZIP e carica il pacchetto tramite l'API di distribuzione Funzioni di Azure.

Bicep o Terraform devono effettuare il provisioning di un'app per le funzioni basata su codice e contrassegnarla con azd-service-name impostato sul nome del servizio, a meno che non si identifichi la risorsa usando resourceName in azure.yaml. Configurare il piano di hosting, il runtime, l'archiviazione, le identità, la rete e le impostazioni dell'applicazione tramite l'infrastruttura come codice.

Configurare compilazioni remote per i deployment di codice

La proprietà di servizio remoteBuild di primo livello si applica solo alle Function Apps basate su codice nel piano Flex Consumption. Controlla se Funzioni di Azure usa Oryx per compilare il pacchetto caricato:

services:
  api:
    project: ./src/api
    language: python
    host: function
    remoteBuild: true

Quando si omette remoteBuild in Flex Consumption, azd seleziona un valore predefinito in base alla lingua e al contenuto del pacchetto:

Language Comportamento predefinito
JavaScript o TypeScript Usa la compilazione remota quando .funcignore esclude node_modules, o quando non esiste alcun file .funcignore. In caso contrario, usa il pacchetto compilato in locale.
Python Usa la compilazione remota.
Go Compila in locale. Le Function Apps Go non supportano la compilazione remota.
Altre lingue supportate Usa il pacchetto generato localmente.

Per JavaScript e TypeScript, un valore configurato remoteBuild in modo esplicito deve essere coerente con .funcignore quando tale file esiste. Impostare remoteBuild: true quando .funcignore esclude node_modules. Impostare remoteBuild: false quando .funcignore include node_modules nel pacchetto.

Non impostare la proprietà remoteBuild di primo livello per i piani non Flex. Per abilitare una build Oryx in un altro piano supportato, configurare ENABLE_ORYX_BUILD=true e SCM_DO_BUILD_DURING_DEPLOYMENT=true come impostazioni di Function App nell'infrastruttura.

Distribuire una funzione containerizzata

Per un progetto di origine con un Dockerfile, impostare language: dockero mantenere la lingua di origine e specificare docker.path.

L'esempio seguente usa un progetto TypeScript con un Dockerfile:

services:
  api:
    project: ./src/api
    language: ts
    host: function
    docker:
      path: ./Dockerfile

È anche possibile distribuire un'immagine predefinita senza un progetto locale:

services:
  api:
    host: function
    image: myregistry.azurecr.io/functions/api:1.0

Per un'immagine predefinita, omettere language o impostarla su docker. Non combinare image con project.

Durante una distribuzione del contenitore, azd:

  1. Crea l'immagine in locale o in remoto oppure risolve l'immagine precompilata configurata.
  2. Pubblica l'immagine nell'istanza di ACR configurata per il progetto quando è necessaria la pubblicazione.
  3. Aggiorna linuxFxVersion dell'app per le funzioni a DOCKER|<image>.
  4. Esegue la distribuzione nel sito principale della Function App.

La proprietà del servizio remoteBuild di primo livello non si applica ai contenitori. Per compilare un'immagine del contenitore con ACR Tasks, usare docker.remoteBuild:

services:
  api:
    project: ./src/api
    language: docker
    host: function
    docker:
      path: ./Dockerfile
      remoteBuild: true

Effettuare il provisioning di una Function App pronta per i contenitori

azd deploy aggiorna il riferimento all'immagine, ma non converte una Function App basata su codice in una Function App basata su contenitore. L'infrastruttura deve effettuare il provisioning di un sito compatibile prima della distribuzione.

Requirement dettagli
Function App Linux Effettuare il provisioning di un'app per funzioni Linux in un piano Funzioni di Azure Premium o Dedicated (servizio app). Flex Consumption non supporta i contenitori personalizzati. Questo host: function flusso di lavoro è destinato a Microsoft.Web/sites, non ad Funzioni di Azure ospitate in App contenitore di Azure.
Configurazione del sito del contenitore Impostare il tipo di sito per includere functionapp, linuxe container. Inizializzare linuxFxVersion con un DOCKER\|<image> valore. Un'immagine segnaposto è sufficiente perché azd deploy la sostituisce.
Registro dei Container Per le compilazioni di origine, effettuare il provisioning di un'istanza di ACR ed esporre il server di login tramite l'output dell'infrastruttura AZURE_CONTAINER_REGISTRY_ENDPOINT o configurare docker.registry per il servizio. È possibile usare direttamente un image prebuilt completamente qualificato senza un registro di pubblicazione separato.
Accesso al Registro di sistema Concedere all'identità che pubblica l'immagine l'autorizzazione per eseguire il push nel registro di destinazione quando è necessaria la pubblicazione. Separatamente, configurare la Function App per eseguire il pull dell'immagine distribuita. Per le immagini private di Azure Container Registry (ACR), concedere all'identità gestita della Function App l'accesso pull e configurare il sito per utilizzare le credenziali dell'identità gestita. Per un altro registro privato, configurare le credenziali pull appropriate nell'infrastruttura.
Impostazioni della funzione Configurare le impostazioni necessarie, come FUNCTIONS_EXTENSION_VERSION, FUNCTIONS_WORKER_RUNTIME e AzureWebJobsStorage, tramite Bicep o Terraform.
Individuazione risorse Applica un tag azd-service-name il cui valore corrisponde al nome del servizio in azure.yaml, oppure imposta resourceName esplicitamente.

Le impostazioni a livello env di servizio non sono supportate per l'host function . Definire invece le impostazioni di Function App nell'infrastruttura.

Comprendere gli slot di distribuzione

azd effettua sempre il deployment di un servizio function nel sito principale di Function App. Non rileva, non chiede di specificare o distribuisce negli slot di Function App. Le impostazioni dello slot di App Service, ad esempio AZD_DEPLOY_{SERVICE}_SLOT_NAME, non influiscono sulla distribuzione di una Function App.

Se è necessario un processo di rilascio di Functions basate su slot, gestire lo slot e la distribuzione all'esterno del flusso di lavoro predefinito host: function.

Confrontare Functions e host di App Service

Funzioni e App Service condividono il Microsoft.Web/sites tipo di risorsa, ma selezionare l'host che corrisponde al carico di lavoro:

Behavior function host appservice host
Carico di lavoro Funzioni di Azure basate su eventi App Web e API
Distribuzione del codice Usa il flusso di distribuzione ZIP di Funzioni di Azure Usa il flusso di distribuzione di App Service
Distribuzione del contenitore Aggiorna l'immagine di Function App dopo aver verificato che il sito sia basato su contenitori Aggiorna l'immagine dell'app Web dopo aver verificato che il sito sia pronto per il container
Compilazione remota del codice Supporta l'opzione a livello di servizio remoteBuild per Function Apps Flex Consumption Non usa l'opzione Functions remoteBuild
Slot di implementazione Esegue sempre il deployment nel sito principale Supporta il flusso di lavoro dello slot di azd App Service
Livello di servizio env Non supportato; usare le impostazioni di Function App nell'infrastruttura Configurare le impostazioni dell'app nell'infrastruttura