Panoramica di Funzioni di Azure nelle App contenitore di Azure

Funzioni di Azure su App contenitore di Azure offre un ambiente serverless di hosting completamente gestito che combina le capacità event-driven di Funzioni di Azure con le funzionalità di Container Apps. Queste capacità includono orchestrazione basata su Kubernetes, autoscaling integrato alimentato da Kubernetes Event-driven Autoscaling (KEDA), integrazione Dapr, supporto al carico di lavoro GPU, supporto al sidecar, connettività della rete virtuale (VNet) e gestione delle versioni.

Questo approccio è utile quando vuoi che le tue funzioni funzionino insieme ad altre app containerizzate come microservizi, API o siti web. Containerizzare le app funzionali può aiutare anche quando hai bisogno di dipendenze personalizzate o vuoi scalare fino a zero per ridurre i costi. Per compiti molto calcolari come l'inferenza AI, Container Apps supporta l'hosting basato su GPU tramite GPU serverless e profili di carico di lavoro dedicati.

Come funzionalità integrata in App contenitore di Azure, puoi distribuire immagini container di Funzioni di Azure direttamente su App contenitore di Azure usando il Microsoft.App provider di risorse e impostando kind=functionapp quando chiami az containerapp create. Le app create in questo modo hanno accesso a tutte le funzionalità di App contenitore di Azure. Nel portale Azure, seleziona l'opzione Ottimizza per Funzioni di Azure durante la configurazione. Per maggiori informazioni, vedi Distribuzione e configurazione.

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 ti aiuta a confrontare le funzionalità delle Funzioni sulle Container Apps con il piano Flex Consumption.

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 monolitici on-premises verso microservizi cloud-native su container.
  • Elaborazione guidata dagli eventi: Gestire gli eventi da Event Grid, bus di servizio, Event Hub e altre fonti di eventi utilizzando il modello di programmazione Funzioni di Azure.
  • Carichi di lavoro di IA e GPU: Processa video, immagini, trascrizioni e altri carichi di lavoro intensivi di calcolo che richiedono risorse 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 su App contenitore di Azure, impacchettare la tua function app come un'immagine container personalizzata e distribuirla come qualsiasi altra app container, con una differenza fondamentale. Imposta la kind=functionapp proprietà quando usi interfaccia della riga di comando di Azure, Azure Resource Manager o Bicep. Per passaggi e esempi dettagliati, vedi Crea un'app di funzione.

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 della tua app di funzione. Copiare questo URL e incollarlo in un browser Web.

Nel portale Azure, seleziona l'opzione Optimize for Funzioni di Azure durante la creazione dell'app container per utilizzare la configurazione Funzioni di Azure.

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.

Dettagli di fatturazione:

  • 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 linguistici disponibili in Funzioni di Azure, inclusi C#, JavaScript / TypeScript (Node.js), Python, Java, PowerShell e container personalizzati (porta la tua immagine).

Funzioni di Azure in esecuzione in 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 di KEDA nell'esperienza predefinita. 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.

Se è necessario fornire regole di scalabilità personalizzate, è possibile rifiutare esplicitamente le regole generate dalla piattaforma usando allowScalingRuleOverride. Per altre informazioni, vedi Sovrascrivere le regole di scalabilità KEDA generate automaticamente per Funzioni di Azure in Container Apps.

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

Per impostazione predefinita, Funzioni di Azure in Container Apps vengono ridimensionate automaticamente in base agli eventi usando KEDA. È comunque possibile impostare repliche min/max per controllare il comportamento di ridimensionamento. È anche possibile usare allowScalingRuleOverride per fornire regole di scalabilità personalizzate.

  • 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 su Container Apps utilizza funzionalità di rete e sicurezza di Container Apps:

  • Integrazione rete virtuale: accedere alle risorse private in modo sicuro tramite endpoint interni e database privati.
  • Identità gestita: Autenticarsi con i servizi Azure utilizzando identità assegnate dal sistema o dall'utente. Non devi gestire segreti o stringhe di connessione.
  • 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 Container Apps per una comunicazione sicura e a scopo.

Monitoraggio e registrazione

Funzioni di Azure on Container Apps si integra con gli strumenti di osservabilità di Azure per il monitoraggio delle prestazioni e la diagnosi 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: Cattura eventi del ciclo di vita del container e di scala, come FunctionsScalerInfo le voci. Per maggiori informazioni, consulta 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. Usa questa variabile per log, correlazione e debug in scenari multireplica.

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 l'autoscaling: Per abilitare la scala automatica basata sugli eventi, abilita l'ingresso, sia pubblicamente che all'interno dell'ambiente interno delle Container App.
  • Account di archiviazione obbligatorio: Ogni app di funzione distribuita su Container App deve essere collegata a un account di archiviazione. Questo account di archiviazione gestisce 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 con Application Insights: Per monitorare e diagnosticare la tua app di funzione, collegala a Application Insights. Per ulteriori informazioni, consulta Application Insights integrazione 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: