Usare cloud-init per personalizzare una macchina virtuale Linux in Azure al primo avvio

Quando create una macchina virtuale Linux in Azure, spesso è necessario eseguire attività ripetitive come installare pacchetti, creare utenti oppure configurare servizi. Fare tutto manualmente richiede tempo e aumenta il rischio di errori.

Per automatizzare queste operazioni Microsoft supporta cloud-init, uno standard open source utilizzato per configurare automaticamente le VM Linux durante il primo avvio.

Con cloud-init potete definire in un file YAML tutte le attività che la macchina dovrà eseguire automaticamente, ad esempio:

  • installazione di software;
  • configurazione degli utenti;
  • aggiunta delle chiavi SSH;
  • esecuzione di script Bash.

Questo approccio consente di ottenere deployment più rapidi, coerenti e ripetibili, soprattutto negli ambienti enterprise o DevOps.

Cloud-init funziona inoltre con diverse distribuzioni Linux. Ad esempio, non dovrete utilizzare direttamente comandi come apt-get install oppure yum install: sarà sufficiente definire i pacchetti all’interno del file di configurazione e cloud-init utilizzerà automaticamente il package manager corretto in base alla distribuzione scelta.

Microsoft sta collaborando con i vari vendor Linux per integrare e supportare cloud-init nelle immagini disponibili in Azure. Per maggiori dettagli sulle distribuzioni compatibili potete consultare la documentazione ufficiale Microsoft dedicata al supporto di cloud-init nelle VM Azure.

In questa guida vedremo come utilizzare Azure CLI e cloud-init per distribuire e configurare automaticamente una macchina virtuale Linux in Microsoft Azure.

Creazione del file di configurazione cloud-init

Per vedere cloud-init in azione creeremo una macchina virtuale Linux che installerà automaticamente NGINX ed eseguirà una semplice applicazione Node.js.

Dal portale Azure aprite Azure Cloud Shell e avviate l’editor integrato cliccando sul pulsante Editor. Selezionate File > New file. Incollate quindi il contenuto della configurazione cloud-init che volete applicare e salvate il file con il nome cloud-init.txt.

Questa configurazione verrà utilizzata durante il deployment della VM per installare automaticamente i componenti necessari e configurare l’ambiente applicativo senza interventi manuali.

Il file di configurazione cloud-init mostrato di seguito è stato pensato per una macchina virtuale basata su Debian. La configurazione utilizza infatti il package manager della distribuzione per installare automaticamente NGINX, Node.js e i componenti necessari all’avvio dell’applicazione durante il provisioning della VM.

Figura 1: Creazione del file cloud-init.txt nell’editor integrato di Azure Cloud Shell contenente la configurazione cloud-init utilizzata per automatizzare il deployment della macchina virtuale Linux

Creazione della macchina virtuale Linux con cloud-init

Dopo aver creato il file cloud-init.txt, potete utilizzare Azure Cloud Shell per creare il Resource Group e distribuire la macchina virtuale Linux utilizzando la configurazione automatizzata definita nel file.

Per prima cosa create il Resource Group con il comando:

Create quindi la macchina virtuale specificando il file cloud-init tramite il parametro –custom-data:

Durante il provisioning Azure passerà automaticamente il contenuto del file cloud-init.txt alla VM, che eseguirà tutte le configurazioni previste al primo avvio.

Figura 2: Creazione del Resource Group e deployment della macchina virtuale Debian tramite Azure CLI utilizzando il file cloud-init.txt come configurazione cloud-init automatizzata

Al termine del deployment nel Resource Group saranno visibili tutte le risorse create automaticamente da Azure insieme alla macchina virtuale Linux. Oltre alla VM vengono infatti generate anche le risorse di rete associate, come la scheda di rete, il disco gestito, il Virtual Network, il Network Security Group e l’indirizzo IP pubblico.

Figura 3: Risorse create automaticamente nel Resource Group durante il deployment della macchina virtuale Linux tramite Azure CLI

Per consentire l’accesso via browser all’applicazione web installata tramite cloud-init, è necessario aprire la porta 80/TCP nel Network Security Group associato alla macchina virtuale.

Da Azure Cloud Shell eseguite il comando:

Il comando crea automaticamente una regola di sicurezza in ingresso che permette il traffico HTTP verso la VM.

Figura 4: Apertura della porta 80/TCP tramite Azure CLI per consentire l’accesso web alla macchina virtuale Linux

A questo punto potete collegarvi tramite browser all’indirizzo IP pubblico della macchina virtuale per verificare che la configurazione cloud-init sia stata eseguita correttamente.

Se il deployment è andato a buon fine verrà mostrata la pagina web generata automaticamente dall’applicazione Node.js configurata durante il provisioning della VM.

Figura 5: Accesso tramite browser all’indirizzo IP pubblico della macchina virtuale Linux con visualizzazione della pagina web distribuita automaticamente tramite cloud-init

Conclusioni

Cloud-init rappresenta oggi uno degli strumenti più efficaci per automatizzare la configurazione delle macchine virtuali Linux nel cloud. Grazie alla possibilità di eseguire automaticamente installazioni, configurazioni e script durante il primo avvio, potete creare ambienti coerenti, ripetibili e pronti all’uso in pochi minuti.

L’integrazione nativa con Microsoft Azure rende cloud-init particolarmente utile negli scenari moderni di automazione infrastrutturale e deployment DevOps.