Gestire e orchestare risorse Azure utilizzando Azure Automation

Azure Automation è una funzionalità cloud presente sin dalle origini di Microsoft Azure che permette di distribuire, gestire, automatizzare, orchestrare ed integrare i servizi di Azure.

Sono disponibili diversi servizi di Azure in grado di effettuare operazioni simili, come ad esempio Azure Bicep e Resource Manager, che forniscono un linguaggio per sviluppare modelli di distribuzione ripetibili e coerenti per le risorse di Azure. Ma l’automazione dei processi in Azure Automation consente di automatizzare tutte le attività di gestione frequenti, dispendiose in termini di tempo e soggette a errori. Questo servizio consente di concentrarsi sulle attività che apportano valore aggiunto. Grazie alla riduzione degli errori e all’incremento dell’efficienza, Azure Automation favorisce anche la riduzione dei costi operativi.

Il servizio Azure Automation supporta l’integrazione dei servizi di Azure e di altri sistemi di terze parti necessari per la distribuzione, la configurazione e la gestione dei processi end-to-end e consente di creare runbook grafici, PowerShell e Python.

La fatturazione per i processi è basata sul numero di minuti di esecuzione del processo usati nel mese e i primi 500 minuti di runtime del processo sono gratuiti per ogni sottoscrizione. Vengono addebitati solo minuti che superano le unità incluse gratuite di 500 minuti.

Figura 1: Process automation, configuration management, update management, shared capabilities e heterogeneous feature di Azure Automation

Scenari d’uso più comuni

Azure Automation supporta la gestione del ciclo di vita dell’infrastruttura e delle applicazioni. Gli scenari più comuni sono:

  • Pianificare le attività : arrestare macchine virtuali o servizi di notte e attivare durante il giorno, i flussi di lavoro di manutenzione periodici settimanali o mensili.
  • Compilare e distribuire risorse: distribuire macchine virtuali in un ambiente ibrido usando i runbook e i modelli di Azure Resource Manager. Eseguire l’integrazione negli strumenti di sviluppo come Jenkins e Azure DevOps.
  • Manutenzione periodica : per eseguire attività che devono essere eseguite a intervalli di tempo impostati, ad esempio l’eliminazione di dati non aggiornati o obsoleti o la reindicizzazione di un database SQL.
  • Rispondere agli avvisi (alerts) : orchestrare una risposta quando vengono generati avvisi basati sui costi, basati sul sistema, basati sul servizio e/o sull’utilizzo delle risorse.
  • Automazione ibrida: gestire o automatizzare server e servizi locali, ad esempio SQL Server, Active Directory, SharePoint Server e così via.
  • Gestione del ciclo di vita delle risorse di Azure : per i servizi IaaS e PaaS.
    • Provisioning e deprovisioning delle risorse.
    • Aggiungere tag, blocchi, gruppi di sicurezza di rete, route definite dall’utente per ogni regola business.
    • Creazione del gruppo di risorse, aggiornamento dell’eliminazione & .
    • Avviare il gruppo di contenitori.
    • Registrare il record DNS.
    • Crittografare le macchine virtuali.
    • Configurare il disco (snapshot del disco, eliminare gli snapshot precedenti).
    • Gestione delle sottoscrizioni.
    • Avviare e arrestare le risorse per risparmiare sul costo.
  • Monitoraggio e integrazione con sistemi esterni di terze parti (tramite Azure Monitor) o di terze parti.
    • Verificare che le operazioni di creazione/eliminazione delle risorse vengano acquisite in SQL.
    • Inviare i dati di utilizzo delle risorse all’API Web.
    • Inviare dati di monitoraggio a ServiceNow, Hub eventi, New Relic e così via.
    • Raccogliere e archiviare informazioni sulle risorse di Azure.
    • Eseguire controlli di monitoraggio SQL per la creazione di report & .
    • Controllare la disponibilità del sito Web.
  • Scenari di automazione di sviluppo/test : avviare e avviare risorse, ridimensionare le risorse e così via.
  • Automazione correlata alla governance : applicare o aggiornare automaticamente tag, blocchi (locks) e così via.
  • Azure Site Recovery: orchestrare gli script pre/post definiti in un flusso di lavoro di ripristino di emergenza Site Recovery.
  • Azure Virtual Desktop : orchestrare il ridimensionamento delle macchine virtuali o avviare/arrestare le macchine virtuali in base all’utilizzo.
  • Configurare le macchine virtuali: valutare e configurare macchine Windows e Linux con configurazioni per l’infrastruttura e l’applicazione.
  • Recuperare l’inventario: ottenere un inventario completo delle risorse distribuite per targeting, creazione di report e conformità.
  • Trovare le modifiche : identificare e isolare le modifiche del computer che possono causare errori di configurazione e migliorare la conformità operativa. Correggere o inoltrarli ai sistemi di gestione.

Creazione di un Azure Automation Account

Per creare un nuovo Azure Automation Account è sufficiente collegarsi al portale di Azure e cercare Automation nella barra di ricerca. Fate clic su + Create per iniziare il wizard di creazione.

Figura 2: Creazione di un nuovo Azure Automation Account

Inserite le informazioni richieste nella scheda Basic: Sottoscrizione, gruppo di risorse, nome dell’automation account e regione di Azure.

Figura 3: Inserimento delle informazioni di base per a creazione dell’automation account

Nella scheda Advanced è possibile configurare l’opzione identità gestita (managed identity) per il nuovo account di Automation. L’opzione identità gestita assegnata dall’utente può essere configurata anche dopo la creazione dell’account di Automation.

Le Managed identity per le risorse Azure sono una funzionalità di Azure Active Directory che permette di effettuare l’autenticazione a qualsiasi servizio che supporta l’autenticazione di Azure AD senza dover gestire le credenziali e le password all’interno del codice dell’applicazione. Questo elimina l’attività manuale di gestione delle credenziali all’interno del codice delle applicazioni o dei carichi di lavoro, riducendo la possibilità di eventuali perdite di password e aumentando di fatto la sicurezza delle nostre applicazioni.

Sono disponibili due tipi di identità gestite:

  • Assegnata dal sistema. Alcuni servizi di Azure consentono di abilitare un’identità gestita direttamente in un’istanza del servizio (service principal). Quando si abilita un’identità gestita assegnata dal sistema viene creata un’identità in Azure AD. L’identità viene associata al ciclo di vita di quell’istanza del servizio. Quando la risorsa viene eliminata, Azure elimina automaticamente anche l’identità. Per impostazione predefinita, solo questa specifica risorsa di Azure può usare questa identità per richiedere token ad Azure AD.
  • Assegnata dall’utente. È anche possibile creare un’identità gestita come risorsa di Azure autonoma. È possibile creare un’identità gestita assegnata dall’utente e assegnarla a una o più istanze di un servizio di Azure. Le identità gestite assegnate dall’utente vengono gestite separatamente rispetto alle risorse che le usano.

Per approfondimenti sulle managed identity di Azure AD vi invito alla lettura della mia guida Come utilizzare le managed identity per gestire l’accesso alle risorse Azure – ICT Power

Figura 4: Creazione della managed identity da associare all’account di automazione

Nella scheda Networking è possibile configurare la connettività all’account di Automation, pubblicamente tramite indirizzi IP pubblici o privatamente usando un Private Link, che connette uno o più endpoint privati (e quindi le reti virtuali in cui sono contenuti) alla risorsa dell’account di Automation.

Figura 5: Network connectivity dell’automation account

Inserite gli eventuali tag nella scheda Tags e completate il wizard di creazione facendo clic su Review + Create.

Figura 6: Schermata finale del wizard di creazione dell’automation account

Figura 7: Schermata di Overview dell’automation account appena creato

Potete verificare che sia stata creata la managed identity posizionandovi nel nodo Identity dell’automation account.

Figura 8: Managed identity associata all’automation account

Creazione di un PowerShell Workflow runbook in Azure Automation

Azure Automation permette di creare runbook di testo basati sul flusso di lavoro Windows PowerShell. È possibile creare e modificare direttamente il codice del runbook usando l’editor di testo nel portale di Azure.

In questa guida mi occuperò della creazione di un runbook che servirà ad avviare due macchine virtuali presenti in un resource group. Per poter creare questo PowerShell Workflow runbook è necessario che nell’Azure Automation Account siano stati importati i moduli Az.Accounts (che mi servirà per l’autenticazione) e Az.Compute (che mi servirà per avviare le macchine virtuali). I due moduli sono disponibili di deafult, ma se non fossero presenti potreste importarli facendo cli su + Add a module. Potete anche aggiornare i moduli Azure presenti cliccando sul pulsante Update Az Modules.

Figura 9: Verifica dell’importazione dei moduli Az.Accounts e Az.Compute

Per poter avviare le macchine virtuali sarà prima necessario assegnare i privilegi corretti alla managed identity associata all’Azure Automation Account. Dal nodo Identity dell’Azure Automation cliccate su Azure Role Assignment e assegnate all’identità gestita i permessi richiesti. Io ho concesso il ruolo di Virtual machine Operator (sufficiente per l’avvio delle macchine) all’identità gestita, solo per le risorse contenute nel resource group chiamato Produzione, come mostrato nelle figure sotto:

Figura 10: Assegnazione dei permessi alla managed identity associata all’Azure automation account

Figura 11: Assegnazione dei privilegi necessari all’esecuzione del PowerShell workflow runbook

Figura 12: Assegnazione dei privilegi completata con successo

Potete anche utilizzare Azure RBAC (Role Based Access Control) per assegnare i permessi di accesso ad una Managed Identity. Vi basterà navigare fino alla risorsa desiderata di cui volete modificare il controllo degli accessi e dal nodo Access control (IAM) potete effettuare il role assignment desiderato, scegliendo di concedere l’accesso non ad un utente o un gruppo ma ad una identità gestita, come mostrato nella figura sotto:

Figura 13: Verifica dei privilegi assegnati al resource group che contiene le VM da avviare

Creazione di un nuovo PowerShell Workflow runbook

Il portale di Azure permette di utilizzare un editor grafico per la creazione dei PowerShell Workflow runbook. Dal nodo Runbooks dell’Azure Automation Account fate clic sulla voce + Create a runbook per iniziare il wizard di creazione.

Figura 14: Creazione di un nuovo runbook in Azure Automation

Assegnate un nome al runbook e scegliete il tipo di runbook PowerShell Workflow. Nella figura sotto sono mostrati tutti i tipi di runbook attualmente supportati in Azure Automation.

Figura 15: Tipi di runbook attualmente supportati in Azure Automation

Uno dei vantaggi offerti dai flussi di lavoro di Windows PowerShell consiste nella possibilità di eseguire un set di comandi in parallelo anziché in sequenza, come accade invece con uno script tipico.

Figura 16: Creazione di un nuovo runbook di tipo PowerShell Workflow

Aggiunta del codice al runbook

È possibile digitare il codice direttamente nel runbook oppure è possibile selezionare le cmdlet, i runbook e le risorse (asset) dalla Library e aggiungerli al runbook con tutti i parametri correlati.

Io ho creato un semplice workflow che fa partire due macchine virtuali in parallelo. Per autenticarmi ho utilizzando il comando Connect-AzAccount -identity per collegarmi alla sottoscrizione. Non mi è stato chiesto nessun tipo di autenticazione; non è apparso nessun popup che mi chiedeva le credenziali di accesso e ovviamente dovendo eseguire lo script in automatico non è certamente la modalità migliore per autenticarsi. Sicuramente non ho dovuto inserire credenziali nel codice dello script, perché per l’autenticazione è stata utilizzata la managed identity associata all’Azure Automation Account.

Figura 17: Codice del PowerShell Workflow

Prima di pubblicare il runbook per renderlo disponibile nell’ambiente di produzione, occorre testarlo per verificare che funzioni correttamente. Quando si testa un runbook, è necessario eseguire la versione Bozza e visualizzarne l’output in modo interattivo. Selezionate Test Pane per aprire la pagina Test e fate clic su Start per avviare il test. Viene creato un processo del runbook e lo stato viene visualizzato nel riquadro.

Figura 18: Inizio del test del runbook

Al termine del processo del runbook, nella pagina Test viene visualizzato l’output. L’output dovrebbe essere simile all’immagine seguente:

Figura 19: Esecuzione del runbook completata

Pubblicazione del runbook

Il runbook creato è ancora in modalità bozza. È necessario pubblicarlo prima di poterlo eseguire in produzione. Quando si pubblica un runbook, è possibile sovrascrivere la versione pubblicata esistente con la versione bozza. In questo caso, non esiste ancora una versione pubblicata perché il runbook è appena stato creato.

Fate clic sul pulsante Publish per pubblicare il runbook e confermate con Yes.

Figura 20: Pubblicazione del runbook

Adesso che il runbook è stato pubblicato, nella parte superiore della scheda Overview potete notare le opzioni che consentono di avviare il runbook ora, pianificare un’ora di inizio futura o creare un webhook in modo che il runbook possa essere avviato tramite una chiamata HTTP.

Figura 21: Creazione del runbook completata

Se si vuole che il runbook venga eseguito in maniera pianificata, ad esempio ogni giorno ad una certa ora, sarà possibile collegare una pianificazione cliccando sul nodo Schedules e scegliendo + Add a schedule.

Figura 22: I runbook possono essere eseguiti tramite pianificazione

Conclusioni

Tramite Azure Automation è possibile automatizzare tantissimi processi quotidiani e ridurre il rischio nell’esecuzione di azioni in Azure. La risposta ad eventi critici, l’orchestrazione complessa, l’integrazione con prodotti di terze parti, la creazione e la configurazione di risorse tramite codice permettono a questo strumento di essere un valido aiuto per la gestione quotidiana, di standardizzare le operazioni, automatizzare i processi aziendali e operativi e risolvere i problemi di integrazione tra più servizi, sistemi e processi.