Azure Container Apps (ACA) è una piattaforma container completamente gestita e senza server su Microsoft Azure che astratti le complessità dell'orchestrazione Kubernetes offrendo ancora potenti funzionalità di scaling, event-driven e modelli di applicazione integrati.

Quali sono le applicazioni Azure Container?

Azure Container Apps opera come ambiente gestito per l'esecuzione di carichi di lavoro containerizzati, seduto tra Azure App Service (per applicazioni web) e Azure Kubernetes Service (AKS) (per il controllo completo del cluster), offrendo un'esperienza Kubernetes semplificata senza richiedere l'interazione diretta con il server API cluster.

Ogni app contenitore funziona in un ambiente basato sulla revisione, dove è possibile distribuire più revisioni e gestire la divisione del traffico. La piattaforma supporta architetture orientate agli eventi attraverso l'integrazione integrata con KEDA[[FLT: 1:]] (Kubernetes Event‐Driven Autoscaling) e Dapr] (Distributed Application Runtime) per applicazioni di backup dei lotti

Caratteristiche e capacità

Architettura senza server e scala automatica

Il modello serverless di ACA elimina la necessità di fornire e gestire VM o nodi di cluster. La piattaforma si basa automaticamente sul traffico HTTP, trigger eventi (ad esempio, profondità della coda, programmi di cron), o metriche personalizzate tramite scaler KEDA. La scala può essere configurata per revisione, e si possono definire conteggi di replica min e max. Quando idle, un Container App può scalare a zero repliche, risparmiando costi e risorse.

Supporto Dapr integrato

Dapr fornisce una serie di blocchi di costruzione (gestione dello stato, pub/sub, invocazione di servizio, segreti, binding) che semplificano le applicazioni distribuite in edifici.ACA integra Dapr a livello della piattaforma, in modo da poterlo abilitare per Container App senza gestire un sidecar o un'infrastruttura separata.

Gestione delle revisioni e Spalato del traffico

Le applicazioni di Container utilizzano un modello di revisione simile a Azure App Service: ogni modifica di codice o configurazione crea una nuova revisione, mentre le vecchie revisioni rimangono disponibili. È possibile impostare le percentuali di traffico tra le revisioni per eseguire distribuzioni blu-verde, test A/B o rollout in fase. Le revisioni possono essere attive, disattivate o utilizzate per rollback, dando il controllo fine-grained sulla sicurezza di distribuzione.

Domini d'ingresso e personalizzati

Ogni app Container riceve un endpoint HTTPS unico (ad esempio, []]). È possibile assegnare domini personalizzati con certificati SSL/TLS, configurare l'ingresso per consentire il traffico interno (VNet) o esterno, e impostare le regole di traffico per il routing basato sul percorso attraverso più app.

Ambiente e reti

Le app per container risiedono in un Container Apps Environment[, che funge da confine sicuro intorno alle tue applicazioni. L'ambiente supporta l'integrazione VNet (ambiente esterno o interno), consentendo la comunicazione privata tra applicazioni, database e altri servizi Azure. È inoltre possibile utilizzare endpoint privati e gruppi di sicurezza di rete per controllare il traffico.

Identità e segreti gestiti

ACA supporta le identità gestite da Azure, consentendo ai tuoi contenitori di autenticarsi con i servizi Azure (Key Vault, Storage, SQL Database) senza credenziali di codifica. I segreti possono essere richiamati direttamente da Azure Key Vault, e le variabili ambientali o i volumi possono essere iniettati in tempo di esecuzione.

Distribuzione di applicazioni del contenitore di Azure

La distribuzione di un'App Container comporta diversi passaggi, dalla containerizzazione dell'applicazione alla configurazione dell'ambiente e delle regole di scala.

Passo 1: Preparare e Spingere l'immagine del contenitore

Inizia creando un Dockerfile per la tua applicazione (ad esempio, .NET, Node.js, Python, Go). Assicurare che l'immagine sia ottimizzata (multi-stage, immagini di base minime). Spingere l'immagine a un registro dei container—di solito Azure Container Registry (ACR)]] per la prossimità e l'integrazione.

Passo 2: Creare un ambiente di app contenitore

Prima di distribuire un'app, è necessario creare un Container Apps Environment. Questo può essere fatto tramite il portale Azure, Azure CLI, Bicep, ARM o Terraform. L'ambiente definisce la regione, la rete virtuale (opzionale), e se è interna o pubblica. Per la produzione, consentire l'integrazione VNet per garantire il traffico in uscita e utilizzare endpoint privati. Esempio CLI comando:

az containerapp env create --name MyEnvironment --resource-group MyRG --location eastus

Passo 3: Definire e distribuire l'app del contenitore

Usa il comando per definire l'app, fare riferimento all'immagine, alle variabili di ambiente, ai segreti, alle impostazioni di ingresso e alla configurazione di scaling.

az containerapp create --name myapp --resource-group MyRG \
 --environment MyEnvironment --image myregistry.azurecr.io/myapp:v1 \
 --target-port 8080 --ingress external --query properties.configuration.ingress.fqdn

Questo crea una revisione e espone l'applicazione tramite un FQDN generato automaticamente. È possibile aggiornare l'applicazione con nuove immagini, variabili di ambiente, o regole di scaling utilizzando .

Passo 4: Configurare i segreti e l'identità gestita

Memorizza valori sensibili ( stringhe di connessione, chiavi API) in Azure Key Vault e li fai riferimento come segreti nella tua app Container. Abilita un'identità gestita assegnata dal sistema o assegnata dall'utente in modo che la tua app possa autenticarsi a Key Vault e ad altre risorse Azure senza credenziali in codice.

Passo 5: Impostare le regole di scala

Configurare l'autoscaling basato su richieste HTTP, CPU, memoria o sorgenti di eventi personalizzate (ad esempio, code Azure Service Bus, Kafka, RabbitMQ). Utilizzare scalatori KEDA per attivare la scalabilità da sistemi esterni.

az containerapp update --name myapp --resource-group MyRG \
 --min-replicas 0 --max-replicas 10 \
 --scale-rule-name queue-scaler --scale-rule-type azure-queue \
 --scale-rule-auth connection=queue-connection-string \
 --scale-rule-metadata "queueName=myqueue" "queueLength=5"

Gestione delle app Azure Container

Una volta implementata, la gestione continua comporta il monitoraggio, l'aggiornamento e la scalabilità e la sicurezza.

Gestione della revisione e strategie di distribuzione

Quando si preme una nuova configurazione immagine o modifica, ACA crea una nuova revisione. Per impostazione predefinita, tutto il traffico va alla revisione più recente. Per implementare una distribuzione blu-verde:

  1. Aggiorna l'applicazione con una nuova revisione (tenendo il vecchio attivo).
  2. Invia una piccola percentuale di traffico alla nuova revisione.
  3. Aumenta gradualmente il traffico durante il monitoraggio degli errori e latenza.
  4. Se stabile, percorso traffico 100% per la nuova revisione e disattivare il vecchio.

Questo approccio riduce al minimo il rischio e consente un rapido rollback, riducendo il traffico di nuovo a una precedente revisione.

Monitoraggio con Azure Monitor e Log Analytics

Per i log dettagliati, configurare la tua app del contenitore per inviare log stdout/stderr e log di sistema a uno spazio di lavoro di Log Analytics. Utilizzare query Kusto per rilevare anomalie, debug errori, o analizzare i modelli di traffico. È inoltre possibile abilitare le istruzioni di applicazione per il monitoraggio delle prestazioni e del tracciamento distribuito.

Autoscaling in produzione

Mentre l'autoscaling predefinito funziona bene per molti scenari, le applicazioni di produzione spesso richiedono scaler KEDA personalizzati. Esempi comuni: scalatura basata sul numero di messaggi Azure Service Bus, Azure Event Hubs backlog, o una metrica Prometheus personalizzata. Assicurarsi di impostare repliche min e max appropriate per gestire il traffico di base e la capacità di scoppio.

Contenitori di aggiornamento e schienale di rotolamento

Quando si utilizza una nuova immagine, la nuova revisione viene avviata in parallelo con quella vecchia. Una volta che la nuova revisione è sana, il traffico viene reindirizzato. Se i controlli sanitari non riescono, ACA può automaticamente tornare indietro. Per il rollback manuale, semplicemente impostare il peso del traffico al 100% sulla revisione precedente.

Migliori Pratiche di Sicurezza

Identità gestite per le risorse azure

Consente all'app di accedere a Key Vault, Storage e database senza memorizzare le credenziali nelle variabili di immagine o ambiente del contenitore.

Gestione segreta con chiave Vault

Conservare tutti i dati sensibili in Azure Key Vault e riferirli nella configurazione di app Container come riferimenti segreti. ACA inietta automaticamente queste variabili di ambiente o montature di volume in esecuzione.

Sicurezza della rete

Per i servizi interni, dispiegare il tuo Container Apps Environment con traffico esterno disabilitato. Utilizzare l'integrazione VNet per limitare il traffico in uscita / in entrata tramite gruppi di sicurezza di rete.Per il traffico in entrata da punti di accesso pubblici, abilitare la restrizione IP sull'ingresso o utilizzare Azure Front Door o API Management di fronte.

Sicurezza dell'immagine del contenitore

Utilizzare immagini di base affidabili da Microsoft Artifact Registry o altre fonti sicure. Scansiona le immagini per le vulnerabilità utilizzando Microsoft Defender for Containers o la scansione integrata di ACR.

Compliance e Certificazioni

Azure Container Apps eredita le certificazioni di conformità Azure (SOC, PCI DSS, HIPAA, ISO). Assicurare che l'ambiente sia distribuito in una regione che soddisfa i requisiti di residenza dei dati.

Ottimizzazione dei costi

Consumi vs. Piano dedicato

ACA offre due livelli di prezzo: Consunzione (paga per vCPU-secondo e memoria-secondo) e [Dedicato (riservato vCPU e memoria). Il consumo è migliore per i carichi di lavoro variabili o a basso traffico, mentre Dedicated fornisce costi e prestazioni prevedibili per lo scenario di produzione stabile-stato.

Autoscaling e Scala a Zero

Configurare le repliche minime a 0 per i lavori di sfondo o API con traffico imprevedibile. Ciò garantisce nessun costo di calcolo quando idle. Per i percorsi critici che hanno bisogno di risposta immediata, impostare un minimo di 1 per evitare gli inizi freddi.

Piani di risparmio e di istanze riservate

Per i piani dedicati, impegnate in istanze riservate di un anno o di tre anni per risparmiare fino al 40% rispetto al pay-as-you-go. Azure Savings Plans si applica anche alla computazione delle app del contenitore.

Immagini del contenitore efficiente

Le immagini più piccole riducono i costi di tempo e archiviazione. Utilizzare immagini di base alpino o distroless, pulire artefatti di costruzione e cache di strato con saggezza. Conservare solo il runtime a immagine—Mantenere strumenti di costruzione in una fase di costruttore separata.

Integrazione con altri servizi Azure

Registro di contenitore di Azure

Utilizzare ACR come registro privato per Container Apps. Supporta georiplicazione, scansione delle immagini e firma artefatti. Abilita account `admin` di ACR o utilizzare l'identità gestita per autenticare tira in modo sicuro.

CI/CD Pipeline con Azure DevOps e GitHub Azioni

Automatizza le implementazioni utilizzando le attività Azure CLI in Azure DevOps o GitHub Actions. Puoi creare un'immagine, spingere ACR e aggiornare la revisione di Container App in un unico pipeline. Esempio GitHub Actions workflow:

- name: Deploy to Azure Container Apps
 run: az containerapp update --name myapp --resource-group MyRG --image myacr.azurecr.io/myapp:latest

Utilizzare slot di distribuzione (revisione del traffico di divisione) per eseguire e convalidare le modifiche prima di rollout completo.

Integrazione Event-Driven

Blocco di costruzione pub/sub di Leverage Dapr con Azure Service Bus o Event Hub per decouple microservices. Configurare gli scalatori KEDA per attivare la scalatura in base alla profondità della coda. Questo modello è eccellente per l'elaborazione dell'ordine, la notifica o i flussi di lavoro in batch.

Migliori Pratiche per lo sviluppo di applicazioni moderne

  • Adotto di un'architettura di microservizi[[]] che si allinea con il modello di revisione e di ingresso di ACA. Ogni servizio dovrebbe avere una propria app contenitore con scaling indipendente e ciclo di vita.
  • Implementa le tubazioni CI/CD[ che costruiscono, testano, espongono automaticamente. Utilizzare il codice infrastrutturale (Bicep/Terraform) per definire gli ambienti, garantendo la ripetibilità.
  • Prioritizzare la sicurezza[[]] dall'inizio: utilizzare identità gestite, riferimenti a Key Vault, integrazione VNet e scansione delle immagini.
  • Ottimizzare per il costo[[]] scegliendo il piano giusto, impostando repliche min/max ragionevoli e utilizzando capacità riservate per carichi di lavoro costanti.
  • Abilita l'osservabilità[[] presto: invia i log a Log Analytics, abilita le istruzioni per l'applicazione e imposta avvisi sui tassi di errore, richiedi latenza e conteggio replica.
  • Utilizzare Dapr e KEDA[[[]] per gestire le preoccupazioni di taglio incrociato: gestione dello stato, ritries, pub/sub e scaling a guida eventi.
  • Progetto per scaling a zero[[] se il carico di lavoro lo permette. Le partenze fredde sono tipicamente sotto due secondi per contenitori semplici; è possibile mitigare con sonde di salute e repliche min appropriate.

Seguendo queste pratiche e sfruttando il tempo di funzionamento dei container senza server di Azure Container Apps, i team possono costruire e gestire applicazioni moderne scalabili, sicure e convenienti. La piattaforma riduce la sovraccarica operativa, offrendo agli sviluppatori la libertà di usare qualsiasi lingua, quadro o tooling che funzioni in un contenitore.

Per ulteriori informazioni sui modelli di applicazione distribuiti con Dapr, visitare la documentazione Dapr. Per ulteriori informazioni sugli esempi di autoscaling, controllare la documentazione Dapr. Per gli esempi di autoscaling basati su eventi, controllare la documentazione KEDA].