Condividi tramite


Hosting di app contenitore di Azure di Funzioni di Azure

Funzioni di Azure offre supporto integrato per lo sviluppo, la distribuzione e la gestione di app per le funzioni in contenitori in App Azure Container. Usare App Azure Container per ospitare i contenitori di app per le funzioni quando è necessario eseguire le funzioni guidate dagli eventi in Azure nello stesso ambiente di altri microservizi, API, siti Web, flussi di lavoro o qualsiasi programma ospitato in contenitori. L'hosting di App contenitore consente di eseguire le funzioni in un ambiente completamente gestito basato su Kubernetes con supporto predefinito per il monitoraggio open source, mTLS, Dapr e KEDA.

È possibile scrivere il codice della funzione in qualsiasi stack di linguaggio supportato da Funzioni. È possibile usare gli stessi trigger e associazioni di Funzioni con il ridimensionamento basato su eventi. È anche possibile usare gli strumenti client di Funzioni esistenti e il portale di Azure per creare contenitori, distribuire contenitori di app per le funzioni in App contenitore e configurare la distribuzione continua.

L'integrazione di App contenitore significa anche che le configurazioni di rete e osservabilità, definite a livello di ambiente dell'app contenitore, si applicano all'app per le funzioni come fanno a tutti i microservizi in esecuzione in un ambiente App contenitore. Si ottengono anche le altre funzionalità native del cloud di App contenitore, tra cui KEDA, Dapr, Envoy. È comunque possibile usare Application Insights per monitorare le esecuzioni delle funzioni e l'app per le funzioni può accedere alle stesse risorse di rete virtuale fornite dall'ambiente.

Per una panoramica generale delle opzioni di hosting dei contenitori per Funzioni di Azure, vedere Supporto dei contenitori Linux in Funzioni di Azure.

Hosting e profili di carico di lavoro

Esistono due piani di hosting principali per le app contenitore, un piano a consumo serverless e un piano dedicato, che usa i profili di carico di lavoro per controllare meglio le risorse di distribuzione. Un profilo del carico di lavoro determina la quantità di risorse di calcolo e memoria disponibili per le app contenitore distribuite in un ambiente. Questi profili sono configurati per soddisfare le diverse esigenze delle applicazioni.

Il profilo del carico di lavoro Consumo è il profilo predefinito aggiunto a ogni tipo di ambiente profili di carico di lavoro. È possibile aggiungere profili di carico di lavoro dedicati all'ambiente durante la creazione di un ambiente o dopo la creazione. Per altre informazioni sui profili di carico di lavoro, vedere Profili del carico di lavoro in App Azure Container.

L'hosting di app per le funzioni in contenitori è supportato in tutte le aree che supportano App contenitore.

Se l'app non ha requisiti hardware specifici, è possibile eseguire l'ambiente in un piano a consumo o in un piano dedicato usando il profilo di carico di lavoro a consumo predefinito. Quando si eseguono funzioni in App contenitore, vengono addebitati solo i costi per l'utilizzo di App contenitore. Per altre informazioni, vedere la pagina dei prezzi app Azure Container.

Funzioni di Azure in App Azure Container supporta l'hosting abilitato per GPU nel piano dedicato con profili di carico di lavoro.

Per informazioni su come creare e distribuire un contenitore di app per le funzioni in App contenitore nel piano a consumo predefinito, vedere Creare le prime funzioni in contenitori in App Azure Container.

Per informazioni su come creare un ambiente app contenitore con profili di carico di lavoro e distribuire un contenitore di app per le funzioni in un carico di lavoro specifico, vedere Profili di carico di lavoro di App contenitore.

Funzioni nei contenitori

Per usare l'hosting di App contenitore, il codice deve essere eseguito in un'app per le funzioni in un contenitore Linux creato e gestito. Funzioni gestisce un set di immagini di base specifiche del linguaggio che è possibile usare per generare le app per le funzioni in contenitori.

Quando si crea un progetto di codice usando Azure Functions Core Tools e si include l'opzione --docker, Core Tools genera il Dockerfile con l'immagine di base corretta, che è possibile usare come punto di partenza per la creazione del contenitore.

Importante

Quando si creano contenitori personalizzati, è necessario mantenere aggiornata l'immagine di base del contenitore all'immagine di base supportata più recente. Le immagini di base supportate per Funzioni di Azure sono specifiche del linguaggio e sono disponibili nei repository dell'immagine di base di Funzioni di Azure.

Il team di Funzioni si impegna a pubblicare aggiornamenti mensili per queste immagini di base. Gli aggiornamenti regolari includono gli aggiornamenti della versione secondaria più recenti e le correzioni di sicurezza sia per il runtime di Funzioni che per i linguaggi. È consigliabile aggiornare regolarmente il contenitore dall'immagine di base più recente e ridistribuire la versione aggiornata del contenitore.

Quando si apportano modifiche al codice delle funzioni, è necessario ricompilare e ripubblicare l'immagine del contenitore. Per altre informazioni, vedere Aggiornare un'immagine nel Registro di sistema.

Opzioni di distribuzione

Funzioni di Azure supporta attualmente i metodi seguenti per distribuire un'app per le funzioni in contenitori in App Azure Container:

Integrazione della rete virtuale

Quando si ospitano le app per le funzioni in un ambiente App contenitore, le funzioni possono sfruttare sia le reti virtuali internamente che esterne. Per altre informazioni sulle reti dell'ambiente, vedere Rete nell'ambiente app contenitore di Azure.

Configurare le regole di scalabilità

Funzioni di Azure nelle app contenitore è progettato per configurare i parametri di scalabilità e le regole in base alla destinazione dell'evento. Non è necessario preoccuparsi di configurare gli oggetti con scalabilità KEDA. È comunque possibile impostare il numero minimo e massimo di repliche durante la creazione o la modifica dell'app per le funzioni. Il comando seguente dell'interfaccia della riga di comando di Azure imposta il numero minimo e massimo di repliche durante la creazione di una nuova app per le funzioni in un ambiente app contenitore da un Registro Azure Container:

az functionapp create --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1 --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --image <LOGIN_SERVER>/azurefunctionsimage:v1 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> --registry-server <LOGIN_SERVER>

Il comando seguente imposta lo stesso numero minimo e massimo di repliche in un'app per le funzioni esistente:

az functionapp config container set --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1

Gruppi di risorse gestiti

Funzioni di Azure nelle app contenitore esegue le risorse dell'app per le funzioni in contenitori in gruppi di risorse appositamente gestiti. Questi gruppi di risorse gestite consentono di proteggere la coerenza delle app impedendo modifiche o eliminazioni impreviste o non autorizzate delle risorse nel gruppo gestito, anche in base ai principi del servizio.

Viene creato un gruppo di risorse gestite per la prima volta che si creano risorse dell'app per le funzioni in un ambiente app contenitore. Le risorse di App contenitore richieste dall'app per le funzioni in contenitori vengono eseguite in questo gruppo di risorse gestite. Tutte le altre app per le funzioni create nello stesso ambiente usano questo gruppo esistente.

Un gruppo di risorse gestite viene rimosso automaticamente dopo che tutte le risorse del contenitore dell'app per le funzioni vengono rimosse dall'ambiente. Mentre il gruppo di risorse gestite è visibile, eventuali tentativi di modificare o rimuovere il gruppo di risorse gestite generano un errore. Per rimuovere un gruppo di risorse gestite da un ambiente, rimuovere tutte le risorse contenitore dell'app per le funzioni e rimuoverle automaticamente.

Se si verificano problemi con questi gruppi di risorse gestite, contattare il supporto tecnico.

Considerazioni sull'hosting di app contenitore

Quando si distribuiscono i contenitori dell'app per le funzioni in App contenitore, tenere presenti le considerazioni seguenti:

  • Anche se tutti i trigger possono essere usati, solo i trigger seguenti possono essere ridimensionati dinamicamente (da zero istanze) quando vengono eseguiti in un ambiente app contenitore:
    • HTTP
    • Archiviazione code di Azure
    • Bus di servizio di Azure
    • Hub eventi di Azure
    • Kafka
    • Timer
  • Queste limitazioni si applicano ai trigger Kafka:
    • Il valore del protocollo di ssl non è supportato quando è ospitato in App contenitore. Usare un valore di protocollo diverso.
    • Affinché un trigger Kafka venga ridimensionato in modo dinamico quando si è connessi a Hub eventi, la proprietà username deve essere risolta in un'impostazione dell'applicazione che contiene il valore effettivo del nome utente. Quando si usa il valore predefinito $ConnectionString, il trigger Kafka non sarà in grado di far sì che l'app venga ridimensionata in modo dinamico.
  • Per le definizioni dei criteri di App contenitore predefinite, attualmente solo i criteri a livello di ambiente si applicano ai contenitori di Funzioni di Azure.
  • È possibile usare le identità gestite sia per le connessioni di trigger che per l'associazione e per le distribuzioni da un Registro Azure Container.
  • Quando l'app per le funzioni e la distribuzione basata su Registro Azure Container usano connessioni gestite basate su identità, non è possibile modificare le impostazioni di allocazione della CPU e della memoria nel portale. È invece necessario usare l'interfaccia della riga di comando di Azure.
  • Attualmente non è possibile spostare una distribuzione di app per le funzioni ospitata in App contenitore tra gruppi di risorse o tra sottoscrizioni. È invece necessario ricreare la distribuzione dell'app in contenitori esistente in un nuovo gruppo di risorse, una sottoscrizione o un'area.
  • Quando si usano app contenitore, non si ha accesso diretto alle API Kubernetes di livello inferiore.
  • L'estensione containerapp è in conflitto con l'estensione appservice-kube nell'interfaccia della riga di comando di Azure. Se in precedenza sono state pubblicate app in Azure Arc, eseguire az extension list e assicurarsi che appservice-kube non sia installato. In caso affermativo, è possibile rimuoverlo eseguendo az extension remove -n appservice-kube.

Passaggi successivi