Azure Image Builder: Creazione e gestione di immagini personalizzate delle macchine virtuali Azure

Con Azure Image Builder è possibile personalizzare le immagini delle macchine virtuali Windows e Linux in Azure e semplificare il processo di creazione delle immagini delle VM con uno strumento facile da usare.

In questo modo applicare le patch alle applicazioni, installare gli aggiornamenti del sistema operativo e controllare le immagini personalizzate diventa davvero molto più semplice.

Anche se è possibile creare immagini di VM personalizzate manualmente o con altri strumenti, il processo può essere complicato e inaffidabile. Azure Image Builder, basato su HashiCorp Packer, offre i vantaggi di un servizio gestito.

Azure Image Builder consente la creazione di immagini di base (che possono includere le configurazioni aziendali) e consente a reparti diversi di personalizzarla ulteriormente. Queste immagini possono essere mantenute sicure e conformi usando Image Builder per ricompilare rapidamente un’immagine finale usando la versione con patch più recente di un’immagine di origine.

Azure Image Builder supporta attualmente i seguenti sistemi operativi di base presenti nell’Azure Marketplace:

  • Ubuntu 18.04
  • Ubuntu 16.04
  • RHEL 7.6, 7.7
  • CentOS 7.6, 7.7
  • SLES 12 SP4
  • SLES 15, SLES 15 SP1
  • Windows 10 RS5 Enterprise/Enterprise multi-session/Professional
  • Windows 2016
  • Windows 2019

Il diagramma seguente mostra un flusso di lavoro di alto livello:

Figura 1: Flusso di lavoro di Azure Image Builder

Creare una immagine di Azure Virtual Desktop utilizzando Azure VM Image Builder e PowerShell

In questa breve guida mi occuperò di mostrarvi come funziona Azure Image Builder e come utilizzarlo per creare e aggiornare le immagini di Azure Virtual Desktop.

In particolare, verranno eseguite le seguenti operazioni:

Verrà illustrato come automatizzare questa operazione usando Azure Image Builder e distribuire l’immagine in una raccolta Azure Compute Gallery (in precedenza nota come Azure Shared Gallery), in cui è possibile eseguire la replica in altre aree, controllare la scalabilità e condividere l’immagine all’interno e all’esterno delle organizzazioni.

Prerequisiti

Come prima operazione assicuratevi di aver registrato gli Azure Provider necessari al corretto funzionamento di tutte le risorse necessarie. Assicuratevi che lo stato sia in modalità Registered. Qui di seguito i comandi PowerShell necessari alla registrazione e alla verifica.

 

Figura 2: Verifica della registrazione degli Azure Provider necessari al funzionamento delle risorse richiesta da Azure Image Builder

Creazione delle variabili da utilizzare negli script Powershell

Creiamo a questo punto delle variabili che ci serviranno per la creazione delle risorse e che saranno utilizzate negli script PowerShell che utilizzeremo nella guida.

Figura 3: Creazione delle variabili d’ambiente richieste

Creazione di una identità gestita

Per permettere la corretta creazione delle risorse è necessario creare un’identità gestita e successivamente concederle i permessi per creare le risorse in Azure. Le identità gestite forniscono un’identità che le applicazioni possono usare per la connessione alle risorse che supportano l’autenticazione di Azure Active Directory. Le applicazioni possono usare l’identità gestita per ottenere Azure AD token, senza che sia necessario fornire delle credenziali di accesso.

Ricordatevi di lanciare lo script da un prompt di PowerShell eseguito con privilegi amministrativi, perché verranno anche installati dei moduli PowerShell.

Figura 4: Creazione del ruolo personalizzato e della Identità gestita

Nello script seguente viene creato un ruolo personalizzato che permetterà alla identità gestita di avere i permessi necessari solo nel gruppo di risorse dove verranno create le risorse. Per maggiori informazioni sulla creazione dei ruoli personalizzati vi invito a leggere la mia guida Creare ruoli personalizzati in Azure Active Directory – ICT Power

Il comando scarica un template JSON di ruoli necessari al corretto funzionamento di Azure Image Builder e lo personalizza inserendo i valori della sottoscrizione e del gruppo di risorse in cui potrà essere utilizzato.

Figura 5: Creazione e assegnazione del ruolo personalizzato alla identità gestita

Come si può vedere dalla figura sotto, alla identità gestita è stato concesso di avere il ruolo personalizzato che abbiamo chiamato Azure Image Builder Image Def, limitato al solo gruppo di risorse che abbiamo creato precedentemente.

Figura 6: Il ruolo è stato assegnato alla identità gestita

Figura 7: Particolare dei permessi che sono stati concessi all’identità gestita, contenuti nel ruolo personalizzato creato

Creazione della Azure Compute Gallery

Grazie alle Azure Compute Gallery è possibile:

  • Replicare a livello globale le immagini personalizzate
  • Raggruppare le immagini e crearne diverse versioni, per una gestione semplificata
  • Utilizzare storage account di tipo Zone Redundant Storage (ZRS) per rendere le immagini altamente disponibili
  • Condividere le immagini tra sottoscrizioni diverse o tra tenant di Azure AD diversi grazie al Role Based Access Control (RBAC)

Usando una raccolta di immagini condivise è possibile condividere le immagini con utenti diversi, entità servizio o gruppi di Active Directory all’interno dell’organizzazione e anche all’esterno. Le immagini condivise possono essere replicate in più aree, per un ridimensionamento più rapido delle distribuzioni.

Se non si ha già una Azure Compute Gallery è necessario crearne una. Qui di seguito i comandi PowerShell per poterla creare. Lo script crea anche una VM image definition. Le definizioni di immagini vengono create all’interno di una raccolta e forniscono informazioni sull’immagine e sui requisiti per il relativo uso interno. La definizione specifica se l’immagine è per Windows o Linux, le note sulla versione e i requisiti minimi e massimi di memoria.

Figura 8: Creazione della Azure Compute Gallery

Figura 9: Azure Computer Gallery e VM Image definition create

Figura 10: Particolare della VM image definition

Download del template e configurazione

Per questo esempio utilizzeremo un template JSON che scarica e aggiorna il modello con i parametri specificati in precedenza, installa FsLogix, ottimizza il sistema operativo per l’utilizzo con Azure Virtual Desktop, installa Microsoft Teams ed esegue Windows Update alla fine. Il modello può essere ovviamente modificato a vostro piacimento. In questo esempio viene usata un’immagine win 10 multi sessione.

Il modello è disponibile al link https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/14_Building_Images_WVD/armTemplateWVD.json

Come si può vedere dall’immagine sotto, grazie allo script PowerShell il modello è stato personalizzato in base alle informazioni relative alla nostra sottoscrizione, al gruppo di risorse che abbiamo creato, alla regione di Azure e così via. Ho anche evidenziato i punti in cui vene richiesto di fare l’installazione del software.

Figura 11: il modello è stato personalizzato in base alle nostre necessità

Io ho modificato il modello inserendo una piccola modifica alla modalità in cui viene eseguito il sysprep e che ne velocizza l’out-of-the-box-experience (OOBE). Ho infatti aggiunto la modalità /mode:VM. Con questa modalità viene saltata tutta la parte iniziale di riconoscimento dell’hardware e viene mantenuto lo stesso hardware profile. Quando si specifica questa modalità l’immagine potrà essere utilizzata solo sullo stesso tipo di hypervisor.

Qui di seguito il codice che ho inserito, nella sezione “customize” del file JSON:

Figura 12: Modifica del template per velocizzare l’avvio della VM

Invio del template configurato

Il modello deve essere inviato al servizio di Azure Image Builder, in modo da scaricare tutti gli elementi dipendenti (ad esempio gli script), convalidare, controllare le autorizzazioni e archiviarle nel gruppo di risorse di staging. Verrà infatti automaticamente creato un nuovo gruppo di risorse con il nome IT_\<DestinationResourceGroup>_\<TemplateName>_\(GUID). Il gruppo di risorse di staging contiene file e script a cui viene fatto riferimento nella proprietà ScriptURI della porzione “customize” del file JSON e che permette la personalizzazione delle immagini referenziando percorsi di File, Shell o script PowerShell.

 

Figura 13: Invio del template da utilizzare al servizio di Azure Image Builder

Verifica dell’avvenuta creazione del Builder Template

Per verificare l’avvenuta creazione dell’Azure Image Builder template è possibile lanciare il comando PowerShell

In alternativa dal portale di Azure è possibile visualizzare tutte le risorse create, come mostrato nelle figure sotto:

Figura 14: Creazione dell’image template avvenuta

Figura 15: Overview dell’ image template creato

Nel gruppo di risorse di staging è stato creato un account di archiviazione che all’interno contiene file e script a cui viene fatto riferimento nella proprietà ScriptURI della porzione “customize” del file JSON e che permette la personalizzazione delle immagini referenziando percorsi di File, Shell o script PowerShell nell’Azure Image Builder Template.

Figura 16: Account di archiviazione con i file e gli script referenziati dalla personalizzazione richiesta alla VM

Figura 17: Cartelle presenti nello storage account creato nel gruppo di risorse di staging

Compilazione e creazione dell’immagine utilizzando Azure Image Builder template

Per poter procedere alla compilazione, aggiornamento e creazione dell’immagine utilizzando Azure Image Builder template è sufficiente lanciare il comando PowerShell

Il comando non attenderà il completamento della compilazione dell’immagine da parte del servizio Azure Image Builder.

Dal portale di Azure sarà possibile verificare lo stato di avanzamento delle diverse fasi, come mostrato nelle figure sotto:

Figura 18: La compilazione dell’immagine è in esecuzione

Nel gruppo di risorse di staging viene creata una nuova VM, partendo dall’immagine dell’Azure MarketPlace che abbiamo scelto e che verrà personalizzata con le indicazioni che abbiamo dato nel modello di Azure Image Builder.

Figura 19: Creazione di una nuova VM e di tutte le risorse necessarie per la sua personalizzazione

Figura 20: Creazione della VM in corso

Figura 21: Le operazioni di creazione e aggiornamento della VM vengono invocate dall’identità gestita che abbiamo creato precedentemente

Al termine della personalizzazione della VM, che nel mio caso è durata circa 50 minuti, la macchina sarà stata generalizzata e spenta. Con il VHD della VM verrà creata la nuova immagine personalizzata.

Figura 22: Creazione di una nuova immagine partendo dal VHD della VM personalizzata

Nello storage account viene creato il VHD che verrà utilizzato dall’immagine creata.

Figura 23: Creazione del VHD di appoggio della nuova immagine della VM

Figura 24: Creazione di una immagine intermedia nel gruppo di risorse di staging

Al termine della creazione della nuova immagine, lo stato della compilazione passerà da Building a Distributing. L’immagine verrà distribuita nella Azure Compute Gallery.

Figura 25: Distribuzione dell’immagine nella Azure Compute Gallery

Nella Azure Compute Gallery verrà quindi creata una nuova versione dell’immagine, che potrà essere utilizzata per distribuire le nuove VM.

Figura 26: Creazione di una nuova versione della immagine della VM, utilizzabile per la creazione delle nuove macchine virtuali

Figura 27: Creazione della versione dell’immagine nella Azure Compute Gallery

Figura 28: Completamento della compilazione e aggiornamento dell’immagine tramite Azure Image Builder

Figura 29: Creazione della versione dell’immagine completata

Dopo aver completato la compilazione dell’immagine è buona norma testarla per vedere se tutto funziona correttamente. Per farlo potete lanciare i comandi PowerShell

Figura 30: Creazione di una nuova VM partendo dall’immagine personalizzata

Figura 31: Macchina virtuale di test creata

Collegatevi alla VM di test e procedete alle verifiche di installazione e aggiornamento. Se non avete chiesto di eseguire il comando sysprep con l’opzione /mode:vm, come ho scritto prima, la fase di primo logon sarà molto lenta e vedrete la schermata blu della figura sotto per alcuni minuti. Il trucco per velocizzare il logon l’ho già spiegato prima 😛

Figura 32: Il primo logon alla VM è lento a causa dell’OOBE

Figura 33: Verifica dell’avvenuta installazione dei software richiesti dal template

Conclusioni

Le immagini delle macchine virtuali (VM) standard presenti nell’Azure Marketplace necessitano di essere personalizzate con l’installazione del software aziendale e continuamente aggiornate. La configurazione della pipeline di creazione dell’immagine o della sua successiva personalizzazione richiede tempo e risorse. Con Azure Image Builder è sufficiente creare una configurazione che descriva l’immagine e inviarla al servizio; l’immagine viene compilata e quindi distribuita. In questo modo sarà sempre possibile distribuire le nuove macchine virtuali con tutti gli ultimi aggiornamenti software.

Maggiori informazioni sono disponibili alla pagina Image Builder – Create a Azure Virtual Desktop image – Azure Virtual Machines | Microsoft Docs