Cosa si intende con Infrastructure as Code (IaC)?

Copia URL

Con Infrastructure as Code (IaC) intendiamo un approccio alla gestione e al provisioning dell'infrastruttura che avviene tramite codice anziché con processi manuali.

L'IaC prevede la creazione di file di configurazione che contengono le specifiche dell'infrastruttura al fine di semplificare la modifica e la distribuzione delle configurazioni, oltre ad assicurare il provisioning del medesimo ambiente ogni volta. Codificando e documentando le specifiche di configurazione, l'IaC facilita la gestione della configurazione ed evita modifiche ad hoc non documentate.

Scopri come automatizzare i flussi di lavoro dell'infrastruttura

Controllo delle versioni e automazione

Il controllo delle versioni è un aspetto cruciale per l'IaC: come qualsiasi altro file di codice sorgente del software anche i file di configurazione devono essere sottoposti al controllo della sorgente. L'IaC permette inoltre di suddividere l'infrastruttura in componenti modulari che, attraverso l'automazione, si possono poi combinare in molti modi diversi.

Automatizzare il provisioning dell'infrastruttura tramite l'IaC alleggerisce il carico sugli sviluppatori, che non devono più svolgere manualmente il provisioning e la gestione di server, sistemi operativi, storage e altri componenti dell'infrastruttura ogni volta che sviluppano o distribuiscono un'applicazione. Codificare l'infrastruttura permette di creare un modello di provisioning ripetibile, grazie al quale i team sono liberi di scegliere se continuare a eseguire il provisioning manualmente oppure velocizzarlo affidandosi a uno strumento di automazione come Red Hat® Ansible® Automation Platform.

Esistono due approcci all'IaC: uno dichiarativo e uno imperativo.

Con l'approccio dichiarativo si definisce la condizione target del sistema, comprese le risorse necessarie e le proprietà che queste devono avere, ed è poi lo strumento IaC ad occuparsi della configurazione. 

Poiché tiene un elenco dello stato effettivo degli oggetti di sistema, questo approccio rende anche l'arresto dell'infrastruttura più semplice 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 allo stato desiderato, uno strumento IaC dichiarativo applica le modifiche automaticamente, mentre uno strumento imperativo richiede all'utente di strutturare l'applicazione delle modifiche.

In genere gli strumenti IaC sono in grado di applicare entrambi gli approcci, ma tendono a privilegiare uno dei due.

Leggi la guida all'Infrastructure as Code

Risorse da Red Hat

Il provisioning dell'infrastruttura è da sempre un processo manuale, lungo e costoso. Oggi la gestione dell'infrastruttura non avviene più a livello dell'hardware fisico nei datacenter, ma a livello di tecnologie quali virtualizzazione, container e cloud computing. E per quanto questa evoluzione offra indubbi vantaggi, pone anche nuove sfide.

Con l'avvento del cloud computing il numero dei componenti dell'infrastruttura è aumentato esponenzialmente, così come il numero di applicazioni rilasciate in produzione ogni giorno. Occorre quindi un'infrastruttura che stia al passo, che si possa cioè attivare, ridimensionare e arrestare a seconda delle esigenze del momento. Senza una strategia IaC adeguata, gestire la scalabilità dell'infrastruttura moderna diventa pressoché impossibile.

L'IaC aiuta le organizzazioni a soddisfare le esigenze dell'infrastruttura IT, offre coerenza, riduce gli errori e limita le configurazioni manuali.

I vantaggi dell'Infrastructure as Code:

  • Riduzione dei costi
  • Accelerazione dei deployment
  • Riduzione degli errori
  • Infrastruttura più coerente
  • Riduzione degli errori di configurazione

Estendere la strategia IaC alle attività di manutenzione

In combinazione con la strategia IaC, le organizzazioni adottano anche altre pratiche al fine di ottenere processi IT completamente automatizzati in tutte le fasi del ciclo di vita operativo. 

L'IaC permette di standardizzare la creazione, il provisioning e il deployment dell'infrastruttura. I suoi vantaggi si possono estendere adottando simultaneamente un approccio Ops as Code (OaC) per codificare la gestione e la manutenzione dei sistemi dopo il deployment e un approccio Policy as Code (PaC) per l'automazione dei processi relativi a governance, rischio e conformità delle applicazioni e delle 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.

Estendi i vantaggi di IaC con OaC e PaC

Gli strumenti di automazione dei server e di gestione della configurazione aiutano ad accelerare e ottimizzare l'adozione dell'IaC. Esistono però anche soluzioni specifiche. 

Tra i principali strumenti per l'ottimizzazione dell'IaC ricordiamo:

Utilizzare uno strumento di automazione per implementare l'IaC permette di creare flussi di lavoro più produttivi ed efficienti e semplificare l'adozione della metodologia NetOps. Piattaforme complete, come Ansible Automation Platform, sono l'ideale per gli ambienti aziendali perché si occupano del provisioning dei sistemi operativi e dei dispositivi di rete, del deployment delle applicazioni e della gestione della configurazione.

Apprendi le nozioni di base su Ansible

L'approccio Infrastructure as Code è 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'intero ambiente cloud e multicloud. Codificare l'infrastruttura cloud tramite l'IaC garantisce allocazione delle risorse, impostazioni di sicurezza e conformità ottimali, oltre a scalabilità rapida delle operazioni cloud nel rispetto dei rigorosi standard aziendali.
  • Pipeline di integrazione e distribuzione continue (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, al fine di controllare le versioni, testarle e distribuirle automaticamente all'interno delle pipeline CI/CD. Gli sviluppatori possono testare il codice in ambenti identici a quelli di produzione; il che assicura deployment rapidi e affidabili.
  • Ripristino di emergenza e alta disponibilità: l'IaC migliora notevolmente le funzionalità di ripristino di emergenza. Definendo l'infrastruttura come codice e memorizzandola 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'approccio IaC aiuta a gestire le diverse infrastrutture e risorse in modo unificato e coerente. 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. 

L'IaC gioca un ruolo fondamentale nell'adozione della metodologia DevOps e delle pipeline di integrazione e distribuzione continue (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, le incoerenze e i deployment manuali. 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 i singoli ambienti di deployment. Evitando le configurazioni univoche che non possono essere riprodotte automaticamente, si migliora la coerenza dell'ambiente 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.

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. 

Procedure consigliate per l'approccio IaC

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. Punta a creare un'infrastruttura immutabile, anziché apportare modifiche ai server esistenti, eseguire il provisioning di quelli nuovi con una configurazione aggiornata e dismettere 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. Implementa l'approccio PaC per l'automazione dei processi relativi a governance, rischio e conformità delle applicazioni e delle soluzioni.

Sfide all'adozione dell'IaC

L'adozione dell'IaC presenta anche sfide specifiche:

  • 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. La transizione da un approccio manuale a un basato sul codice richiede un cambio di mentalità importante e spesso si creano resistenze e ostruzionismo da parte dei team.
  • Vulnerabilità di sicurezza. Informazioni riservate codificate, ruoli IAM eccessivamente permissivi o vulnerabilità nelle immagini di base possono facilmente propagarsi nell'infrastruttura e introdurre rischi per la sicurezza.
  • 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 forte 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 richiedere molto tempo, e spesso implica interventi di reverse engineering o un refactoring graduale.

La creazione di un approccio all'automazione esteso all'intero ambiente enterprise permette di automatizzare non solo i processi IT, ma anche le tecnologie, i team e l'organizzazione nel suo complesso. 

Red Hat Ansible Automation Platform include tutti gli strumenti necessari per estendere l'automazione all'intera azienda, inclusi i playbook, una dashboard visiva, una soluzione basata sugli eventi e gli strumenti di analisi. Si serve inoltre di webhook per automatizzare i flussi di lavoro IaC e per consentire le pratiche GitOps.

Gli Ansible Playbook, scritti in linguaggio YAML, descrivono la condizione desiderata dei sistemi e sono archiviati in genere in un sistema di controllo della sorgente. Ansible Automation Platform si occupa di portare i sistemi nella condizione desiderata, indipendentemente dalla loro condizione attuale. 

Ansible Automation Platform migliora l'affidabilità e la ripetibilità di installazioni, upgrade e attività di gestione quotidiane.

Ansible Automation Platform aiuta ad accelerare il deployment di nuove applicazioni e servizi, a ottimizzare la gestione dell'infrastruttura IT e a ottenere processi di sviluppo applicativo più efficienti. La sottoscrizione offre l'accesso alle soluzioni certificate di un ampio ecosistema di partner, a servizi di gestione in hosting e al 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.

Scopri di più su Red Hat Ansible Automation Platform

 

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.

Jesse Amerson

IT director, Ulta Beauty

Leggi la storia completa

Hub

Il blog ufficiale di Red Hat

Leggi gli articoli del blog di Red Hat per scoprire novità e consigli utili sulle nostre tecnologie, e avere aggiornamenti sul nostro ecosistema di clienti, partner e community.

Tutte le versioni di prova dei prodotti Red Hat

Grazie alle versioni di prova gratuite dei prodotti Red Hat potrai acquisire esperienza pratica, prepararti per le certificazioni o capire se il prodotto che hai scelto è giusto per le esigenze della tua organizzazione.

Continua a leggere

Automazione aziendale: Cos'è Ansible?

Ansible consente di automatizzare i processi IT, come il provisioning e la gestione della configurazione.

Cos'è un datacenter software defined (SDDC)?

Un datacenter software defined (SDDC) è una strategia di gestione dell'IT che consiste nell'astrarre i componenti tradizionali dell'infrastruttura, come l'elaborazione, lo storage e la rete, per trasformarli in servizi software.

Perché scegliere Red Hat Ansible Automation Platform come base per la tecnologia IA?

Red Hat® Ansible® Automation Platform offre una base robusta per le implementazioni di IA perché semplifica il deployment, la gestione, la configurazione e il ciclo di vita dei componenti delle infrastrutture e dei modelli di IA.

Automazione e gestione: risorse consigliate

Prodotto in evidenza

Articoli correlati