Cos'è l'IaC?
L'Infrastructure as Code (IaC) è un approccio automatizzato alla gestione e al provisioning dell'infrastruttura IT.
Con l'IaC, puoi definire le specifiche dell'infrastruttura nei file di configurazione, rendendo più semplice la modifica e la distribuzione scalabile delle configurazioni e garantendo al contempo che venga effettuato il provisioning sempre dello stesso ambiente. Codificando e documentando le specifiche di configurazione, l'IaC facilita la gestione della configurazione ed evita modifiche ad hoc non documentate.
Quali sono i vantaggi dell'IaC?
Con l'aumento della complessità dell'infrastruttura IT, l'automazione ha in gran parte sostituito il provisioning manuale che, su larga scala, è costoso e richiede tempo. Virtualizzazione, containerizzazione e cloud computing si basano su approcci di configurazione automatizzati.
L'IaC getta le basi per una scalabilità e una flessibilità più rapide. Puoi velocizzare il rilascio in produzione delle applicazioni e avviare, ridimensionare e arrestare l'infrastruttura di frequente. Allo stesso tempo, l'IaC migliora la coerenza e riduce gli errori legati alla configurazione manuale.
I vantaggi dell'adozione dell'IaC:
- Costi ridotti
- Deployment più rapidi
- Meno errori
- Coerenza
Quali sono i vantaggi dell'IaC per l'intero ciclo di vita operativo?
L'IaC non serve solo per il provisioning. Partendo dalla base strategica dell'IaC, le organizzazioni possono utilizzare queste procedure per automatizzare i processi IT in ogni fase del ciclo di vita operativo.
I team IT possono adottare l'approccio Configuration as Code (CaC) e le pratiche di integrazione e distribuzione continue (CI/CD) per codificare la gestione e la manutenzione dei sistemi dopo il deployment. Ciò si estende all'approccio Policy as Code (PaC) per automatizzare i processi di governance, rischio e conformità relativi ad applicazioni e soluzioni.
Sfruttando l'esperienza ottenuta dall'automazione dell'IaC, i team IT possono applicare gli stessi metodi e strumenti per ottenere un approccio più efficiente e adattabile alle operazioni di manutenzione.
Quali sono i due approcci all'IaC?
L'IaC offre due approcci distinti, che possono essere utilizzati insieme:
- Con l'approccio dichiarativo si definisce la condizione desiderata del sistema, comprese le risorse necessarie e le proprietà che queste devono avere. Poiché tiene un elenco dello stato effettivo degli oggetti di sistema, questo approccio rende le modifiche all'infrastruttura più semplici da gestire.
- Con l'approccio imperativo invece si definiscono i comandi specifici necessari per ottenere la configurazione desiderata. Ed occorre poi assicurarsi che tali comandi vengano eseguiti nella sequenza corretta.
Molti strumenti IaC adottano un approccio dichiarativo ed eseguono automaticamente il provisioning dell'infrastruttura desiderata. Qualora si apportino delle modifiche alla condizione desiderata, uno strumento IaC dichiarativo applica le modifiche automaticamente, mentre uno strumento imperativo richiede all'utente di definire l'applicazione delle modifiche.
In genere gli strumenti IaC sono in grado di applicare entrambi gli approcci, ma tendono a privilegiare uno dei due.
Cosa sono gli strumenti e le tecnologie IaC?
Gli strumenti di gestione dell'automazione e della configurazione, come Red Hat® Ansible® Automation Platform, possono accelerare e ottimizzare l'adozione dell'IaC.
Utilizzare uno strumento di automazione per implementare l'IaC permette di creare flussi di lavoro più produttivi ed efficienti e favorire l'adozione della metodologia NetOps.
Ansible Automation Platform è l'ideale per gli ambienti aziendali perché si occupa del provisioning dei sistemi operativi e dei dispositivi di rete, del deployment delle applicazioni e della gestione della configurazione.
Quali sono gli scenari di utilizzo dell'IaC più comuni?
L'approccio IaC è ormai uno dei capisaldi di DevOps e delle operazioni IT moderne e trova un'ampia gamma di applicazioni in numerosi settori. Alcuni esempi e scenari di utilizzo chiave sono:
- Deployment automatizzato delle applicazioni web: l'IaC viene spesso impiegato per accelerare la definizione e il provisioning di tutti i componenti necessari al funzionamento delle applicazioni web, tra cui macchine virtuali, database, strumenti di bilanciamento del carico, firewall e configurazioni di rete.
- Deployment cloud: è possibile sfruttare l'IaC per impostare e gestire l'ambiente cloud e multicloud. Codificare l'infrastruttura cloud tramite l'IaC garantisce allocazione delle risorse, impostazioni di sicurezza e conformità ottimali, oltre a scalabilità delle operazioni cloud nel rispetto dei rigorosi standard aziendali.
- Pipeline CI/CD: l'IaC è un aspetto essenziale nell'automazione del ciclo di vita dello sviluppo del software. Adottando questo approccio le modifiche all'infrastruttura vengono trattate come codice applicativo, per controllare le versioni, testarle e distribuirle automaticamente all'interno delle pipeline CI/CD. Gli sviluppatori possono testare il codice in ambienti identici a quelli di produzione, il che assicura deployment rapidi e affidabili.
- Ripristino di emergenza ealta disponibilità: l'IaC supporta le capacità di ripristino di emergenza. Memorizzando le definizioni dell'infrastruttura nel controllo delle versioni, le aziende possono ricreare in modo rapido e coerente interi ambienti in una regione o in un cloud diverso quando si verificano guasti irreversibili. In questo modo si riducono il recovery time objective (RTO) e i tempi di fermo e si assicura la continuità operativa.
- Ambienti cloud ibridi e multicloud: negli ambienti cloud ibridi e multicloud, l'IaC aiuta a gestire le diverse infrastrutture in modo unificato. Gli strumenti IaC favoriscono la definizione e la gestione delle risorse in modo coerente nei diversi ambienti. Così facendo si migliora la flessibilità e si riducono i costi.
- Automazione della sicurezza e della conformità: l'IaC integra le configurazioni di sicurezza e le regole di conformità direttamente nelle definizioni dell'infrastruttura. Questo significa che non è più necessario configurare manualmente i criteri di sicurezza, come le regole dei firewall,i ruoli relativi alla gestione delle identità e degli accessi (IAM) e le impostazioni di crittografia, perché questi vengono applicati automaticamente durante il deployment.
Perché l'IaC è importante per DevOps e CI/CD?
L'IaC è un aspetto essenziale dell'implementazione delle procedure DevOps e CI/CD. Riduce le attività di provisioning a carico degli sviluppatori, ai quali basterà eseguire uno script per rendere operativa l'infrastruttura. In questo modo i deployment applicativi non sono vincolati alla disponibilità dell'infrastruttura e gli amministratori di sistema non devono gestire processi manuali lunghi e ripetitivi.
Il metodo CI/CD prevede l'automazione costante e il monitoraggio continuo durante tutto il ciclo di vita delle applicazioni, dalle fasi di integrazione e test a quelle di distribuzione e deployment. Per poter automatizzare un ambiente però occorre che questo sia coerente, ed è pressoché impossibile automatizzare il deployment delle applicazioni se non c'è accordo fra i team di sviluppo e quelli operativi sulle modalità di distribuzione delle applicazioni e di configurazione degli ambienti.
Adottando un approccio DevOps è possibile allineare i due team e ridurre il numero di errori e le incoerenze. L'IaC si muove proprio in questa direzione, supportando DevOps e promuovendo il lavoro sinergico fra i team, che possono utilizzare la stessa descrizione per il deployment delle applicazioni.
Per massimizzare l'implementazione dell'IaC, è consigliabile utilizzare lo stesso processo di deployment per ogni ambiente, incluso quello di produzione. L'IaC permette di generare sempre lo stesso ambiente ed elimina quindi la necessità di gestire manualmente i singoli ambienti di deployment. Evitando le configurazioni univoche che non possono essere riprodotte automaticamente, si garantisce la coerenza di tutti gli ambienti, incluso quello di produzione.
Con l'IaC si possono applicare le procedure consigliate di DevOps all'infrastruttura. Questa segue la stessa pipeline CI/CD a cui è sottoposta un'applicazione durante lo sviluppo software, vengono cioè applicati al codice dell'infrastruttura gli stessi test e il medesimo controllo delle versioni.
Quali sono le procedure consigliate dell'IaC?
Come per la maggior parte delle adozioni tecniche, anche nel caso dell'IaC è consigliabile puntare su un approccio graduale e definire obiettivi chiari. Partendo da ambienti o componenti minori, i team possono imparare e acquisire sicurezza prima di affrontare sistemi più complessi. Solo definendo obiettivi aziendali chiari, come riduzione dei costi o deployment più rapidi, i team potranno misurare il successo dell'implementazione.
Un principio cardine dell'approccio IaC è considerare l'infrastruttura come se fosse codice applicativo. In quest'ottica, le procedure consigliate sono:
- Utilizzare il controllo delle versioni per qualunque cosa. Così facendo si favorisce lo sviluppo collaborativo, si tiene traccia delle modifiche e si semplifica il rollback a condizioni stabili precedenti. Per quanto riguarda il controllo delle versioni, è consigliabile utilizzare strategie di branching (come il feature branching), revisioni del codice tra pari (tramite richieste pull) e messaggi di commit descrittivi.
- Rendere l'infrastruttura modulare e riutilizzabile. Suddividi l'infrastruttura nei suoi componenti più piccoli e riutilizzabili. In questo modo si riducono le duplicazioni, si snellisce la manutenzione e si semplifica la comprensione e la gestione di più progetti e ambienti diversi.
- Automatizzare i test. Integra l'IaC con i test che normalmente esegui sul codice applicativo in una pipeline CI/CD per verificare che le modifiche all'infrastruttura vengano convalidate prima del deployment.
- Ridurre gli errori di configurazione. Mira a creare un'"infrastruttura immutabile", se possibile. Quando sono necessarie modifiche significative, esegui il provisioning di quelle nuove con qualsiasi configurazione aggiornata e dismetti quella precedente. In questo modo è possibile ridurre notevolmente gli errori di configurazione e semplificare i rollback.
- Definire ruoli, responsabilità e flussi di lavoro di approvazione chiari. Definisci le figure responsabili delle modifiche all'IaC. Implementa l'approccio PaC per l'automazione dei processi relativi a governance, rischio e conformità delle applicazioni e delle soluzioni.
Quali sono le sfide legate all'adozione dell'IaC?
- Complessità. L'automazione delle operazioni manuali è un compito gravoso. Prendere dimestichezza con i principi e gli strumenti IaC non è così immediato soprattutto per i team abituati a operazioni manuali. Spesso si creano resistenze e ostruzionismo da parte dei team, poiché la transizione da un approccio manuale a un basato sul codice richiede un cambio di mentalità importante.
- Mancanza di standardizzazione. Senza linee guida chiare, i team potrebbero implementare l'IaC in modo incoerente generando così pratiche frammentarie, duplicazione del codice e ostacoli alla manutenzione. Questa generale incoerenza può notare nella denominazione degli elementi che non segue una convenzione chiara, nelle strutture dei moduli o nei modelli di deployment.
- Resistenza culturale. Adottare una strategia estesa come l'IaC obbliga le organizzazioni a superare abitudini radicate e a promuovere una mentalità basata sul codice. Richiede un coinvolgimento della leadership, la condivisione continua dei benefici di tale cambiamento e una cultura aziendale orientata alla sperimentazione e all'apprendimento.
- Debug di una pipeline complessa. Se è vero che in generale l'IaC riduce gli errori, è pur vero che se si verificano il processo di debug risulta più complicato rispetto al debug dei processi manuali, soprattutto se i team hanno poca dimestichezza con l'IaC.
- Gestione dell'infrastruttura esistente. L'integrazione dell'IaC con l'infrastruttura esistente è un processo complesso che richiede molto tempo e spesso implica interventi di reverse engineering o un refactoring graduale.
In che modo i clienti utilizzano Ansible Automation Platform per l'IaC
I clienti di Red Hat Ansible Automation Platform hanno utilizzato l'automazione a supporto della strategia IaC, rendendo le operazioni IT più efficienti. In tutto il mondo, le organizzazioni traggono grandi vantaggi dalle partnership Red Hat e dalla community di automazione, avvalendosi di Ansible Automation Platform per incrementare la resilienza, ridurre le attività manuali e adottare una cultura dell'automazione.
TD
Per garantire servizi bancari sempre disponibili ai suoi oltre 28 milioni di clienti nel Nord America, TD aveva bisogno di un'infrastruttura di rete moderna e scalabile che potesse supportare cambiamenti rapidi e al tempo stesso mantenere affidabili i servizi. TD ha portato a termine la standardizzazione su Ansible Automation Platform per automatizzare la gestione della rete. Con un approccio unificato e automatizzato, la banca ha accorciato i tempi di upgrade e provisioning delle tecnologie da diversi mesi a pochi giorni senza compromettere stabilità e sicurezza. Ha anche sollevato gli ingegneri e i team di rete dagli incarichi ripetitivi, consentendo loro di dedicarsi alla risoluzione dei problemi e all'innovazione.
Glen Raven
Glen Raven, leader di mercato nei tessuti ad alte prestazioni, ha implementato Red Hat Ansible Automation Platform per ottimizzare i processi che in precedenza venivano gestiti manualmente, come la gestione dell'infrastruttura, l'applicazione di patch e l'automazione dei certificati. Glen Raven ha esteso il deployment a Event-Driven Ansible per creare connessioni tra le applicazioni di gestione dei servizi basate sul cloud e i controller di automazione interni. In questo modo ha potuto reagire agli eventi utilizzando soluzioni di messaggistica consolidate senza esporre il proprio piano di controllo dell'automazione. Il nuovo ambiente offre all'azienda una piattaforma per operare con innumerevoli scenari di utilizzo, riducendo l'esposizione, le risorse necessarie e i tempi di fermo.
Perché scegliere Red Hat per l'automazione
Con la piattaforma di automazione giusta puoi implementare l'IaC in tutta l'organizzazione. Red Hat Ansible Automation Platform è una soluzione di livello enterprise che supporta l'automazione multimodale di playbook predefiniti che descrivono la condizione desiderata dei sistemi. Ansible Automation Platform si occupa di portare i sistemi nella condizione desiderata, indipendentemente dalla loro condizione attuale.
Con Ansible Automation Platform puoi mantenere sicurezza e governance, accelerare il deployment di nuovi servizi e applicazioni, gestire l'infrastruttura IT in modo più efficiente e incrementare la produttività. Avrai a disposizione le soluzioni certificate di un ampio ecosistema di partner, i servizi di gestione in hosting e il supporto tecnico per l'intero ciclo di vita in modo che i team possano sviluppare, gestire ed estendere l'automazione in tutta l'azienda e con il minor sforzo possibile.
Le funzionalità integrate di Red Hat Ansible Automation Platform ci hanno fornito un acceleratore per l'innovazione. È lo standard comune che molti dei nostri fornitori e partner utilizzano anche per scrivere gli script con cui installano, configurano e gestiscono la propria tecnologia.
Come creare una strategia di automazione dell'IT
Un approccio all'automazione frammentario offre vantaggi limitati. Per arrivare ad automatizzare ogni aspetto delle operazioni IT occorre una strategia di automazione che unifichi i team, i processi e i flussi di lavoro disconnessi.