Condividi tramite


Panoramica di Funzioni di Azure in App contenitore di Azure

Funzioni di Azure in App contenitore di Azure offre un ambiente host serverless completamente gestito che riunisce le funzionalità basate sugli 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 su Azure Container Apps, è possibile distribuire immagini di Azure Functions direttamente sulle Azure Container Apps usando il Microsoft.App provider di risorse impostando kind=functionapp quando si chiama 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 il portale di Azure, è possibile abilitare l'opzione Ottimizza per l'app Funzioni durante la configurazione. Per altri dettagli, vedere la sezione relativa alla distribuzione e alla configurazione.

Vantaggi principali

Il modello di hosting per app container si basa sulla flessibilità dei carichi di lavoro containerizzati e sulla natura basata sugli eventi di Azure Functions. 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 in 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, pacchetti e API personalizzate 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 sugli 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 altre informazioni, vedere Uso di GPU serverless in App contenitore di Azure.
  • Microservizi: integrare Funzioni di Azure con altri servizi ospitati di App contenitore.
  • 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 Aspira: l'integrazione di .NET Aspira con Funzioni di Azure consente di sviluppare, eseguire il debug e orchestrare un progetto .NET di Funzioni di Azure come parte dell'host dell'app .NET Aspire. Altre informazioni su Funzioni di Azure con .NET Aspire
  • Funzioni generali: eseguire qualsiasi scenario di Funzioni di Azure standard supportato, ad esempio timer, elaborazione di file, trigger di database.

Distribuzione e configurazione

Per distribuire Funzioni di Azure in App contenitore di Azure, creare un pacchetto dell'app per le funzioni come immagine del contenitore personalizzato e distribuirlo come qualsiasi altra app contenitore con una differenza fondamentale. È necessario impostare la proprietà kind=functionapp quando si usano l'interfaccia della riga di comando di Azure o i modelli di 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 Ottimizza 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 preconfigurata 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

Le funzioni di Azure su Azure Container Apps seguono lo stesso modello di determinazione dei prezzi delle Azure Container Apps. 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 di Funzioni di Azure all'interno di App contenitore.
  • Durable Functions e altri modelli avanzati sono supportati e fatturati con lo stesso modello tariffario di Container Apps. Per informazioni dettagliate sulla meccanica di fatturazione ed esempi, vedere la documentazione relativa alla fatturazione in App Contenitore di Azure .

Scalabilità basata su eventi

Funzioni di Azure in App contenitore supportano tutti i principali runtime del linguaggio disponibili in Funzioni di Azure, tra cui: C#, JavaScript/ TypeScript (Node.js), Python, Java, PowerShell, Contenitori personalizzati (bring your own image).

Funzioni di Azure in esecuzione in App contenitore di Azure configurano automaticamente le regole di ridimensionamento in base all'origine evento, eliminando la necessità di definizioni delle regole di scalabilità KEDA manuali. Ecco perché il pulsante "Aggiungi regole di scalabilità" nel portale di Azure è disabilitato per Funzioni in 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.

Sono supportati tutti i trigger e le associazioni standard di Funzioni di Azure in App contenitore con le seguenti eccezioni:

  • Ridimensionamento automatico dei trigger di archiviazione BLOB: funziona solo quando si usa Griglia di eventi come origine. Altre informazioni sull'attivazione di Funzioni di Azure nei contenitori BLOB con un abbonamento eventi
  • Scalabilità automatica di Durable Functions: supporta solo provider di archiviazione MSSQL (Microsoft SQL Server) e DTS (Durable Task Scheduler). Vedere altre indicazioni sulla distribuzione di Durable Functions con MSSQL
  • Ridimensionamento automatico non supportato per:
    • Cache di Azure per Redis
    • Azure SQL

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

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

Ridimensionamento e prestazioni

Le funzioni di Azure su Container Apps vengono ridimensionate 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.

  • Ridimensionamento basato su eventi: scala automaticamente in base a eventi come Event Grid, Service Bus o HTTP.
  • Scalabilità a zero: le app inattive vengono ridimensionate fino a zero per risparmiare sui costi.
  • Controllo avvio a freddo: informazioni sulla riduzione dell'ora di avvio a freddo in 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 Impostare le regole di ridimensionamento in App Azure Container

Rete e sicurezza

Azure Functions in Container Apps trae vantaggio dalle robuste funzionalità di rete e sicurezza delle Container Apps per distribuzioni sicure e scalabili.

  • Integrazione rete virtuale: accedere alle risorse private in modo sicuro tramite endpoint interni e database privati.
  • Identità gestita: eseguire l'autenticazione con i servizi di 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 in App contenitore si integrano perfettamente con gli strumenti di osservabilità di Azure per la verifica delle prestazioni e la diagnosi dei problemi:

  • Application Insights: fornisce dati di telemetria per richieste, dipendenze, eccezioni e tracce personalizzate. Per altre informazioni, vedere Monitorare Funzioni di Azure.
  • Log Analytics: acquisisce gli eventi di ridimensionamento e ciclo di vita dei contenitori, ad esempio voci FunctionsScalerInfo. Per ulteriori informazioni, consultare la registrazione dei log delle applicazioni in Container Apps 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.

Considerazioni

Tenere presenti queste altre considerazioni quando si usa Funzioni di Azure in 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 Azure Queue Storage, Azure Event Hub, Azure Service Bus o trigger di Azure Durable Functions sono esempi di trigger basati su 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, eseguire invece l'integrazione con Gestione API di Azure.
  • Slot di distribuzione: gli slot di gestione temporanea e di produzione non sono disponibili. Usare strategie di distribuzione blu-verde per le versioni senza tempi di inattività.
  • Chiavi di accesso Funzioni: l'uso del portale per generare chiavi di accesso Funzioni non è supportato. Prendere in considerazione l'uso di 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 manuale delle regole di scalabilità: il pulsante "Aggiungi regole di scalabilità" nel portale di Azure è disabilitato per Funzioni di Azure ospitate 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 GitHub di App Azure Container.

Passaggi successivi / Altre risorse

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