Implementare Azure Container Apps

Le Azure Container Apps sono una soluzione offerta da Microsoft Azure, progettata per semplificare la distribuzione e la gestione di applicazioni basate su container. Questo servizio si integra nell’ecosistema dei servizi cloud di Azure, offrendo un ambiente ottimizzato per l’esecuzione di applicazioni containerizzate con una scalabilità flessibile e una gestione semplificata.

Il cuore delle Azure Container Apps è la capacità di eseguire applicazioni in container, che sono pacchetti software standardizzati contenenti tutto ciò che l’applicazione necessita per funzionare, inclusi il codice, le librerie, le dipendenze e le impostazioni di sistema. Questo approccio assicura che l’applicazione possa essere eseguita in modo affidabile in diversi ambienti di computing.

Uno degli aspetti chiave delle Azure Container Apps è la scalabilità, che permette alle applicazioni di adattarsi automaticamente alle variazioni del carico di lavoro. Ciò significa che le risorse possono essere aumentate o ridotte in base alla domanda, ottimizzando così i costi e migliorando le prestazioni.

Inoltre, le Azure Container Apps supportano Kubernetes, un sistema di orchestrazione open-source per la gestione di applicazioni containerizzate, che aiuta nell’automazione del deployment, della scalabilità e delle operazioni di gestione delle applicazioni containerizzate. Tuttavia, è importante notare che Azure Container Apps astrae molti dei dettagli complessi di Kubernetes, rendendo il servizio più accessibile e meno oneroso da gestire rispetto a un’istanza Kubernetes completa. Ho già scritto qualcosa a proposito di Kubernetes. Vi rimando alla lettura della guida Archiviazione, distribuzione e orchestrazione di container utilizzando Azure Container Registry e Azure Kubernetes Service – ICT Power

La sicurezza è un altro aspetto fondamentale. Azure Container Apps sono costruite con standard di sicurezza elevati, offrendo funzionalità come la rete virtuale integrata e le policy di sicurezza, per garantire che le applicazioni siano protette in modo adeguato.

In termini di integrazione, Azure Container Apps si collegano agevolmente con altri servizi Azure, come Azure Database, Entra ID e Azure Logic Apps, permettendo di costruire soluzioni cloud complete e interconnesse. In più, l’aspetto della gestione e del monitoraggio è reso semplice attraverso strumenti come Azure Monitor e Azure Insights, che forniscono visibilità dettagliata sulle prestazioni dell’applicazione e aiutano a diagnosticare e risolvere rapidamente eventuali problemi.

Perchè usare Azure Container Apps e non Azure Kubernetes Services? Sono anni che uso AKS. Ci sono differenze?

Più volte ho ricevuto questa domanda a lezione durante i miei corsi. La scelta tra Azure Container Apps e Azure Kubernetes Service (AKS) si basa su una serie di considerazioni legate alle esigenze specifiche del progetto, alla complessità, alla scalabilità, all’esperienza tecnica disponibile e ai costi.

Azure Container Apps è una soluzione ideale per chi cerca una piattaforma semplice e gestita per eseguire applicazioni containerizzate, eliminando la necessità di gestire l’infrastruttura sottostante e riducendo la necessità di avere una conoscenza approfondita di Kubernetes. Questa piattaforma è caratterizzata dalla sua semplicità e facilità di uso, offrendo un’astrazione dall’infrastruttura Kubernetes. Inoltre, fornisce scalabilità automatica, consentendo alle applicazioni di rispondere agilmente alle variazioni della domanda. La sua integrazione con altri servizi Azure rende più agevole la creazione di un ambiente coeso per lo sviluppo e la gestione delle applicazioni.

D’altra parte, Azure Kubernetes Service (AKS) si rivolge a progetti che necessitano di un controllo più granulare e una personalizzazione avanzata. Fornisce un controllo completo su Kubernetes, permettendo una personalizzazione dettagliata e un controllo granulare sull’orchestrazione dei container. La sua scalabilità e flessibilità avanzate sono ideali per chi desidera sfruttare appieno le capacità di Kubernetes, inclusi aspetti come la scalabilità orizzontale e il bilanciamento del carico. Inoltre, l’adesione all’ecosistema Kubernetes offre l’accesso a un ampio range di strumenti e soluzioni. Per progetti con esigenze specifiche di personalizzazione e compliance, AKS offre la flessibilità necessaria.

Figura 1: Scenari di utilizzo di Azure Container Apps

Azure Container Apps gestisce la configurazione di Kubernetes per vostro conto e possono utilizzare il runtime, il linguaggio di programmazione e lo stack di sviluppo che preferite.

Figura 2: Ambiente di Azure Container Apps

Creazione di una Azure Container App

Per creare una nuova Azure Container App collegatevi al portale di Microsoft Azure e cercate Container Apps. Fate clic sul pulsate Create container app per lanciare il wizard di creazione.

Figura 3: Lancio del wizard di creazione di una nuova Azure Container App

Nella scheda Basics del wizard inserite le informazioni richieste e decidete il Container Apps environment dove distribuire la vostra app. Se non ne avete uno già creato, verrà creato un nuovo Environment.

Il Container Apps environment è un ambiente essenziale e dedicato che agisce come un dominio logico per l’esecuzione di applicazioni containerizzate. Questo ambiente fornisce l’infrastruttura cruciale per il deployment e la gestione di queste applicazioni, garantendo che operino in modo sicuro e isolato.

Nel creare un’applicazione tramite Azure Container Apps è necessario configurare un Container Apps environment, che definisce le risorse e le configurazioni comuni per tutte le applicazioni in esso ospitate. Le sue caratteristiche includono l’isolamento e la sicurezza, che assicurano la protezione delle risorse e dei dati di un’applicazione da accessi esterni non autorizzati. Questo ambiente è anche fondamentale per la scalabilità e le prestazioni, fornendo le funzionalità necessarie per gestire efficacemente le fluttuazioni del carico di lavoro e garantire prestazioni ottimali. Inoltre, offre una gestione centralizzata delle risorse e delle configurazioni, semplificando la manutenzione e l’aggiornamento delle applicazioni.

La capacità di questo ambiente di integrarsi con altri servizi Azure è un altro aspetto significativo, permettendo la creazione di soluzioni cloud complete e integrate che includono reti virtuali, bilanciamento del carico e servizi di monitoraggio.

Figura 4: Inserimento delle informazioni di base necessarie alla creazione della Azure Container App

Nella scheda Container del wizard di creazione di Azure Container Apps si configurano le specifiche dell’immagine del container e le impostazioni correlate all’esecuzione dell’applicazione containerizzata. Durante questo processo, si definisce l’immagine del container, specificando l’immagine Docker che rappresenta l’applicazione da eseguire. Si può utilizzare un’immagine quickstart, per testare il funzionamento di Azure Container Apps oppure si possono dichiarare quali container distribuire, prendendoli dal proprio Registry, dal Docker Hub o da un Azure Container Registry.

Inoltre, è possibile configurare le variabili d’ambiente per l’applicazione. Queste variabili sono essenziali per impostare o modificare i parametri di configurazione che l’applicazione può richiedere per funzionare correttamente in diversi ambienti, come ambienti di sviluppo, test e produzione.

Si ha anche la possibilità di impostare i comandi di avvio e gli argomenti che definiscono il comando eseguito all’avvio del container. Questi comandi possono essere utilizzati per personalizzare il comportamento dell’applicazione al momento del suo avvio.

Infine, è possibile configurare le opzioni avanzate, come le dimensioni della CPU e della memoria allocate al container. Queste impostazioni influenzano le risorse hardware che saranno disponibili per l’applicazione, e sono cruciali per garantire che l’applicazione abbia le risorse necessarie per operare efficacemente.

Io ho deciso di distribuire un container con nginx preso dal repository ufficiale del Docker Hub nginx – Official Image (docker.com)

Figura 5: Scheda Container del wizard di creazione di Azure Container Apps

Nella scheda Bindings del wizard di creazione di Azure Container Apps si effettuano configurazioni cruciali per definire e gestire le connessioni tra l’applicazione containerizzata e le varie fonti di eventi o servizi esterni. Questa sezione è dedicata alla configurazione di come l’applicazione interagisce con risorse esterne, integrando e rispondendo a vari tipi di input.

Uno degli aspetti chiave che si configura qui è l’integrazione con i trigger degli eventi. Questo include la definizione di come l’applicazione dovrebbe rispondere a determinati eventi, come messaggi da code o bus di servizio, o richieste HTTP in entrata. Configurando i trigger degli eventi, si stabilisce una linea di comunicazione tra l’applicazione e le fonti esterne di dati o richieste.

Si imposta anche l’integrazione con servizi esterni, come database, sistemi di messaggistica, o altre API. Questo consente all’applicazione di interagire efficacemente con altri servizi cloud, scambiando dati o rispondendo a eventi in modo coordinato.

In più ci sono le opzioni per definire dettagliatamente le proprietà dei binding, come gli endpoint specifici, le chiavi di autenticazione e altre configurazioni necessarie per stabilire e mantenere queste connessioni. Queste impostazioni sono fondamentali per garantire che l’interazione tra l’applicazione e le risorse esterne sia sicura e conforme alle specifiche.

Io come primo esempio non ho inserito nessun tipo di binding.

Figura 6: Scheda Bindings del wizard di creazione di Azure Container Apps

Nella scheda Ingress del wizard di creazione di Azure Container Apps si procede alla configurazione delle impostazioni relative all’accesso in entrata all’applicazione. Questa sezione è focalizzata su come l’applicazione è raggiungibile dall’esterno, definendo i parametri per il routing del traffico e la sicurezza.

Un elemento fondamentale che si configura è l’abilitazione dell’ingresso, che determina se l’applicazione sarà accessibile dall’esterno. Questo include la decisione di esporre l’applicazione a Internet o di mantenerla accessibile solo all’interno di una rete specifica o di un ambiente cloud. Si definiscono le regole di routing, che specificano come il traffico in entrata deve essere indirizzato alle diverse parti dell’applicazione. Queste regole sono cruciali per assicurare che le richieste degli utenti vengano correttamente instradate ai servizi o ai container appropriati all’interno dell’applicazione.

Un altro aspetto importante è la configurazione dei domini e dei certificati SSL/TLS, che sono essenziali per garantire la sicurezza del traffico in entrata. Questi certificati criptano i dati scambiati tra l’utente e l’applicazione, fornendo un livello critico di protezione contro intercettazioni e attacchi.

Io ho deciso di accettare il traffico da qualsiasi indirizzo, in modo tale da pubblicare l’applicazione direttamente in Internet. L’applicazione risponde in maniera predefinita sulla porta 443, mentre il traffico viene ruotato verso i container sulla porta 80, come mostrato nella figura sotto:

Figura 7: Scheda Ingress del wizard di creazione di Azure Container Apps

Nella scheda Tags del wizard di creazione di Azure Container Apps si procede alla configurazione dei tag, che sono essenzialmente etichette o parole chiave assegnate alle risorse di Azure. I tag sono strumenti organizzativi utili per categorizzare e gestire le risorse all’interno del proprio ambiente Azure.

Attraverso l’assegnazione dei tag si può categorizzare le risorse in base a vari criteri, come il dipartimento, il progetto, il centro di costo, o qualsiasi altro parametro che sia rilevante per l’organizzazione o il flusso di lavoro. Questo aiuta a organizzare le risorse in modo più efficiente e rende più facile tenere traccia di loro, soprattutto in un ambiente con molte risorse o applicazioni diverse.

I tag sono particolarmente utili per la gestione dei costi e la fatturazione, in quanto consentono di raggruppare le spese per risorsa o per progetto, facilitando l’analisi dei costi e la pianificazione del budget. Ad esempio, si possono assegnare tag specifici alle risorse utilizzate da un particolare team o progetto, rendendo più semplice identificare e allocare i costi associati.


Figura 8: Scheda Tags del wizard di creazione di Azure Container Apps

Controllate le informazioni inserite e fate clic su Create per iniziare il deployment delle risorse Azure.

Figura 9: Schermata finale del wizard di creazione di Azure Container Apps

Terminata la creazione delle risorse di Azure Container Apps, che può durare fino a 10 minuti, avrete la possibilità di accedere alla vostra applicazione. Nella scheda Overview sarà possibile recuperare l’Application URL che vi permetterà di accedere all’app che avete distribuito (nginx).

Figura 10: Scheda Overview della Azure Container App

Cliccando sull’Application URL vi verrà mostrata l’applicazione che gira all’interno del container. Come si può vedere dalla figura sotto, nginx e avviato ed è raggiungibile da Internet.

Figura 11: L’app è raggiungibile da Internet ed è operativa

Per maggiori informazioni vi rimando alla lettura delle guida Configure a container app in Azure Container Apps dove potrete approfondire le caratteristiche e le capacità di Azure Container Apps e vi verrà mostrato nel dettaglio come creare, configurare, scalare e gestire le container apps.

Conclusioni

Azure Container Apps emerge come una soluzione potente e flessibile nell’ambito del cloud computing, offrendo agli sviluppatori e alle aziende un modo efficiente per gestire e distribuire applicazioni containerizzate. Una delle sue principali attrattive è la semplicità di utilizzo, che rende l’orchestrazione di container accessibile anche a chi non ha una profonda esperienza con strumenti come Kubernetes. Inoltre, la sua integrazione nativa con l’ecosistema Azure consente agli utenti di sfruttare altri servizi cloud di Azure, come la gestione delle identità e l’analisi dei dati, per costruire soluzioni complete e ben integrate.

La scalabilità automatica e basata sugli eventi di Azure Container Apps è un altro punto di forza significativo, permettendo alle applicazioni di adattarsi rapidamente ai cambiamenti del carico di lavoro, ottimizzando così le risorse e migliorando le prestazioni. Questo aspetto è cruciale in un ambiente cloud dinamico, dove la domanda può variare notevolmente.

La sicurezza è una priorità, con funzionalità integrate per la protezione delle applicazioni e dei dati. Questo include la possibilità di creare reti private virtuali e implementare policy di sicurezza avanzate, garantendo che le applicazioni rimangano protette e conformi ai requisiti di compliance.

L’agilità e la flessibilità di Azure Container Apps lo rendono adatto per una vasta gamma di scenari di applicazioni, dai microservizi ai workload legati ai dati, supportando le aziende nella loro trasformazione digitale e nell’adozione di pratiche di sviluppo agile.

Certamente Azure Container Apps si distingue per la sua capacità di semplificare la gestione dell’infrastruttura, consentendo agli sviluppatori di concentrarsi sullo sviluppo e l’innovazione dell’applicazione piuttosto che sulle complessità dell’orchestrazione dei container.

Risorse