Panoramica di Funzioni di Azure nelle App contenitore di Azure

Funzioni di Azure in App contenitore di Azure offre un ambiente di hosting serverless completamente gestito che riunisce le funzionalità guidate dagli eventi di Funzioni di Azure con le funzionalità affidabili di App contenitore. Questa integrazione include funzionalità avanzate come l'orchestrazione basata su Kubernetes, la scalabilità automatica predefinita basata su KEDA (scalabilità automatica basata su Eventi basati su Kubernetes), l'integrazione Dapr (Distributed Application Runtime), il supporto del carico di lavoro GPU, il supporto sidecar, la connettività di rete virtuale e la gestione delle revisioni.

Questo approccio è utile quando si vuole che Funzioni venga eseguito insieme ad altre app in contenitori, ad esempio microservizi, API o siti Web. Inoltre, la creazione di contenitori delle app per le funzioni può essere utile quando sono necessarie dipendenze personalizzate o si vuole sfruttare i vantaggi della scalabilità a zero per risparmiare sui costi. Se si eseguono attività di calcolo massicce come l'inferenza IA, App contenitore supporta anche l'hosting basato su GPU tramite l'offerta GPU serverless e profili di carico di lavoro dedicati.

Come funzionalità integrata in App contenitore di Azure, è possibile distribuire immagini di Funzioni di Azure direttamente su App contenitore di Azure usando il fornitore delle risorse Microsoft.App, impostando kind=functionapp quando si utilizza az containerapp create. Le app create in questo modo hanno accesso a tutte le funzionalità di App contenitore di Azure. Se si esegue la distribuzione tramite Azure portale, è possibile abilitare l'opzione Optimize for Functions app durante l'installazione. Per altre informazioni, vedere la sezione relativa alla distribuzione e alla configurazione per altri dettagli.

Vantaggi principali

Il modello di hosting di Container Apps si basa sulla flessibilità dei carichi di lavoro containerizzati e sulla natura event-driven di Funzioni di Azure. Offre i vantaggi principali seguenti:

La tabella seguente consente di confrontare le funzionalità di Funzioni nelle App contenitore con il piano a consumo flessibile.

Caratteristica / Funzionalità App contenitore Piano di Consumo Flessibile
Ridimensionamento a zero ✅ Sì (via KEDA) ✅ Sì
Scalabilità orizzontale massima 1.000 (impostazione predefinita 10, configurabile) 1,000
Istanze Always On ✅ Sì (via minReplicas) ✅ Sì (tramite istanze sempre pronte)
Integrazione rete virtuale ✅ Sì ✅ Sì
Supporto di contenitori personalizzati ✅ Sì (porta la tua immagine) ❌ Limitato (nessuna possibilità di utilizzare un proprio contenitore)
Supporto GPU ✅ Sì (tramite il profilo del carico di lavoro dedicato serverless GPU) ❌ No
Funzionalità predefinite Supporto delle app container e delle loro funzionalità. Ad esempio, KEDA, Dapr, multi-revisioni, mTLS, sidecar, controllo in ingresso e altro ancora Funzionalità esclusivamente basate sulle funzioni
Modello di fatturazione Prezzi delle App contenitori: piano a consumo (vCPU, memoria, richieste) e piano dedicato (basato sul profilo di carico di lavoro) Tempo di esecuzione e istanze sempre pronte

Per un confronto completo delle funzioni nelle App contenitore con il piano a consumo flessibile e di tutti gli altri tipi di piano e hosting, vedere Scalabilità e opzioni di hosting di Funzioni.

Scenari

Funzioni di Azure nelle app contenitore sono ideali per un'ampia gamma di casi d'uso, soprattutto quando è necessaria l'esecuzione basata su eventi, la flessibilità dei contenitori o l'integrazione sicura con altri servizi:

  • API line-of-business: creare un pacchetto di librerie personalizzate, pacchetti e API con Funzioni di Azure per applicazioni line-of-business.
  • Migrazione e modernizzazione: migrazione di applicazioni legacy e/o monolitiche locali a microservizi nativi del cloud nei contenitori.
  • Elaborazione basata su eventi: gestire eventi da Griglia di eventi, Bus di servizio, Hub eventi e altre origini eventi con la facilità del modello di programmazione di Funzioni.
  • Carichi di lavoro IA e GPU: elaborazione serverless di carichi di lavoro video, immagini, trascrizioni o qualsiasi altra attività a elevato utilizzo di elaborazione che richiede risorse di calcolo GPU. Per ulteriori informazioni, vedere Uso delle GPU serverless in App contenitore di Azure.
  • Microservices: Integrare Funzioni di Azure con altri servizi ospitati di Container Apps.
  • Contenitori personalizzati: funzioni del pacchetto con sidecar o runtime personalizzati.
  • App private: proteggere funzioni solo interne usando la rete virtuale e l'ingresso interno.
  • .NET Aspire: L'integrazione di .NET Aspire con Funzioni di Azure consente di sviluppare, eseguire il debug e orchestrare un progetto Funzioni di Azure .NET come parte dell'host dell'app .NET Aspire. Altre informazioni su Funzioni di Azure con .NET Aspire
  • General Functions: Eseguire qualsiasi scenario standard Funzioni di Azure supportato (ad esempio timer, elaborazione di file, trigger di database).

Distribuzione e configurazione

Per distribuire Funzioni di Azure in App contenitore di Azure, confezioni l'applicazione Functions come immagine del contenitore personalizzata e la distribuisci come qualsiasi altra app contenitore, tranne per una differenza fondamentale. È necessario impostare la proprietà kind=functionapp quando si usano i modelli interfaccia della riga di comando di Azure o ARM/Bicep. Per i passaggi dettagliati ed esempi, vedere la documentazione introduttiva ufficiale.

az containerapp create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $CONTAINER_APP_NAME \
  --environment $ENVIRONMENT_NAME \
  --image mcr.microsoft.com/k8se/quickstart-functions:latest \
  --ingress external \
  --target-port 80 \
  --kind functionapp \
  --query properties.outputs.fqdn

Questo comando restituisce l'URL dell'app per le funzioni. Copiare questo URL e incollarlo in un browser Web.

Nel portale di Azure selezionare l'opzione Optimize per Funzioni di Azure durante la creazione dell'app contenitore per semplificare la configurazione.

Screenshot del portale di Azure quando si crea un'app contenitore preconfigurato per Funzioni di Azure.

Sono supportati tutti i metodi di distribuzione standard, tra cui:

Per i passaggi dettagliati ed esempi, vedere la documentazione introduttiva ufficiale.

Determinazione dei prezzi e fatturazione

Funzioni di Azure su App contenitore di Azure segue lo stesso modello tariffario di App contenitore di Azure. La fatturazione è basata sul tipo di piano selezionato per l'ambiente, che può essere A consumo o Dedicato.

  • Piano a consumo: questa opzione di calcolo serverless fattura solo le risorse usate dalle app durante l'esecuzione.
  • Piano dedicato: questa opzione fornisce risorse di calcolo personalizzate, fatturazione per le istanze allocate a ogni profilo del carico di lavoro.

La scelta del piano determina il modo in cui vengono eseguiti i calcoli di fatturazione. Diverse applicazioni all'interno di un ambiente possono usare piani diversi.

Punti chiave da notare:

  • Non sono previsti costi aggiuntivi per l'uso del modello di programmazione Funzioni di Azure in App contenitore.
  • Durable Functions e altri modelli avanzati sono supportati e fatturati secondo lo stesso modello tariffario di App contenitore. Per informazioni dettagliate sui meccanismi di fatturazione ed esempi, vedere la documentazione Billing nella documentazione di App contenitore di Azure.

Scalabilità basata su eventi

Funzioni di Azure su Container Apps supporta tutti i principali runtime dei linguaggi disponibili in Funzioni di Azure, tra cui C#, JavaScript / TypeScript (Node.js), Python, Java, PowerShell e contenitori personalizzati (porta la tua immagine).

Funzioni di Azure eseguite su App contenitore di Azure configurano automaticamente le regole di ridimensionamento in base all'origine dell'evento, eliminando la necessità di definizioni manuali delle regole di ridimensionamento KEDA. Ecco perché il pulsante "Aggiungi regole di scalabilità" nel portale di Azure è disabilitato per Funzioni nelle app contenitore. Tuttavia, è comunque possibile definire il numero minimo e massimo di repliche per stabilire i limiti di ridimensionamento e mantenere il controllo sull'allocazione delle risorse.

La piattaforma converte automaticamente i parametri del trigger Funzioni (dagli attributi del trigger o della configurazione host.json) in parametri scaler KEDA appropriati. Per informazioni di riferimento dettagliate sul mapping delle configurazioni del trigger Funzioni ai parametri di ridimensionamento KEDA, vedere Mapping di ridimensionamento KEDA di Funzioni di Azure.

Tutti i trigger e le associazioni standard di Funzioni di Azure sono supportati in Container Apps con le seguenti eccezioni:

Le identità gestite sono supportate per i trigger e le associazioni che lo consentono. Sono disponibili anche per:

Per i trigger non supportati, usare conteggi di repliche fisse, ovvero impostare minReplicas > 0) in Funzioni di Azure su App contenitore di Azure. Per altre informazioni, vedere la Guida per sviluppatori di Funzioni.

Ridimensionamento e prestazioni

Funzioni di Azure su Container Apps si ridimensionano automaticamente in base agli eventi utilizzando KEDA, senza dover configurare manualmente le regole di scalabilità. È comunque possibile impostare repliche min/max per controllare il comportamento di ridimensionamento.

  • Event-driven scaling: ridimensiona automaticamente in base a trigger come Griglia di eventi, bus di servizio o HTTP.
  • Scalabilità a zero: le app inattive vengono ridimensionate fino a zero per risparmiare sui costi.
  • Controllo dell'avvio a freddo: Scopri come ridurre il tempo di avvio a freddo su App contenitore di Azure.
  • Concorrenza: ogni istanza può elaborare più eventi in parallelo.
  • Scalabilità elevata: aumentare il numero di istanze a 1.000 istanze per app (il valore predefinito è 10).
  • Supporto GPU: eseguire carichi di lavoro con elevato carico di calcolo, ad esempio l'inferenza dell'intelligenza artificiale usando nodi basati su GPU.

Ciò rende le App contenitore ideali sia per carichi di lavoro con stato costante che bursty. Per altre informazioni, vedere Imposta le regole di ridimensionamento in App contenitore di Azure

Rete e sicurezza

Funzioni di Azure nelle app contenitore traggono vantaggio dalle solide funzionalità di rete e sicurezza delle App contenitore per distribuzioni scalabili e sicure:

  • Integrazione rete virtuale: accedere alle risorse private in modo sicuro tramite endpoint interni e database privati.
  • Identity gestita: eseguire l'autenticazione con i servizi Azure usando identità assegnate dal sistema o dall'utente, senza segreti o stringhe di connessione necessarie.
  • Supporto Dapr: abilitare pub/sub, gestione dello stato e chiamata al servizio sicura tramite sidecar Dapr. Per altre informazioni, vedere API di microservizi basate su Dapr.
  • Ingress e TLS: Esporre endpoint HTTP sicuri tramite TLS/mTLS, domini personalizzati o mantenerli interni.
  • Isolamento dell'ambiente: le funzioni condividono i confini dell'ambiente delle app su container per una comunicazione sicura e con ambiti definiti.

Queste funzionalità rendono le funzioni ospitate in App contenitore ideali per applicazioni serverless di livello aziendale e sicure.

Monitoraggio e registrazione

Funzioni di Azure su Container Apps si integrano perfettamente con gli strumenti di osservabilità di Azure per il monitoraggio delle prestazioni e l'individuazione e risoluzione dei problemi.

  • Application Insights: fornisce dati di telemetria per richieste, dipendenze, eccezioni e tracce personalizzate. Per altre informazioni, vedere Monitor Funzioni di Azure.
  • Log Analytics: acquisisce gli eventi di ridimensionamento e ciclo di vita dei contenitori, ad esempio voci FunctionsScalerInfo. Per altre informazioni, vedere Application Logging in App contenitore di Azure.
  • Registrazione personalizzata: supporta framework standard come ILogger e la registrazione della console per l'output strutturato.
  • Monitoraggio centralizzato: l'ambiente di App contenitore offre avvisi e dashboard unificati in tutte le app.

Variabili di ambiente

Funzioni di Azure in esecuzione su Container Apps hanno accesso alle variabili di ambiente fornite dal sistema. La CONTAINER_NAME variabile d'ambiente viene impostata automaticamente sul nome della replica per l'app delle funzioni. Usare questa variabile per la registrazione, la correlazione e il debug in scenari con più repliche.

Per un elenco completo delle variabili di ambiente fornite dal sistema, consultare Variabili di environment in App contenitore di Azure.

Considerazioni

Tenere presenti queste altre considerazioni quando si usano Funzioni di Azure su App contenitore di Azure:

  • Requisito di ingresso per il ridimensionamento automatico: per abilitare il ridimensionamento automatico in base agli eventi, è necessario abilitare l'ingresso, pubblicamente o all'interno dell'ambiente interno di App contenitore.
  • Account di archiviazione obbligatorio: ogni app per le funzioni distribuita in App contenitore deve essere collegata a un account di archiviazione. Questa operazione è necessaria per la gestione di trigger, log e stato. Per le procedure consigliate, esaminare le indicazioni per l'account di archiviazione.
  • Archiviazione con revisioni multiple: quando la distribuzione avviene con revisioni attive multiple, assegnare un account di archiviazione dedicato a ogni revisione. L'uso di un account di archiviazione dedicato consente di evitare conflitti e garantisce un isolamento appropriato. In alternativa, se non sono necessarie revisioni concorrenti, è consigliabile usare la modalità di revisione singola predefinita per una gestione semplificata.
  • Trigger multi-revisione: se si usa la modalità multi-revisione con un trigger basato sul pull, usare un'origine evento diversa per ogni revisione per evitare conflitti correlati ai consumer concorrenti. Le funzioni che usano trigger archiviazione code di Azure, Hub eventi di Azure, bus di servizio di Azure o Durable Functions sono esempi di trigger basati sul pull.
  • Latenza avvio a freddo: quando l'app contenitore viene ridimensionata a zero durante i periodi di inattività, la prima richiesta dopo l'inattività avviene con un avvio a freddo. Altre informazioni sulla riduzione dei tempi di avvio a freddo.
  • Integrazione di Application Insights: per un monitoraggio e una diagnostica affidabili, collegare l'app Funzioni ad Application Insights. Per altre informazioni, vedere Integrazione di App Insights con Funzioni.
  • Proxy di funzioni: non supportati. Per gli scenari del gateway API, integra con Gestione API di Azure.
  • Slot di distribuzione: gli slot di staging e produzione non sono disponibili. Usare strategie di distribuzione blu-verde per le versioni senza tempi di inattività.
  • Chiavi di accesso delle Funzioni: usare il portale per generare chiavi di accesso delle Funzioni non è supportato. È consigliabile usare Azure Key Vault per archiviare le chiavi. È anche possibile usare le opzioni seguenti per proteggere gli endpoint HTTP in produzione:
  • Limiti di quota e risorse: gli ambienti di App contenitore hanno limiti predefiniti per memoria, CPU e numero di istanze per area. Per altre informazioni, vedere i limiti dell'ambiente e le quote predefinite. Se il carico di lavoro richiede più risorse, è possibile richiedere un aumento della quota.
  • Configurazione delle regole di scalabilità gestita: il pulsante "Aggiungi regole di scalabilità" nel portale di Azure è disabilitato per Funzioni di Azure ospitata in App contenitore perché le regole di ridimensionamento vengono configurate automaticamente in base all'origine evento. Le definizioni manuali delle regole KEDA non sono necessarie in questa configurazione.

Inviare commenti e suggerimenti

Inviare un problema o una richiesta di funzionalità al repository App contenitore di Azure GitHub.

Passaggi successivi / Altre risorse

Per continuare l'apprendimento e la compilazione con Funzioni di Azure in App contenitore, esplorare le risorse seguenti: