Cos'è l'IaC (Infrastructure as Code)?

Donna seduta davanti a uno schermo con dei codici, che lavora su un PC desktop

Autori

Jim Holdsworth

Staff Writer

IBM Think

Annie Badman

Staff Writer

IBM Think

Cos'è l'IaC (Infrastructure as Code)?

L'IaC (Infrastructure as Code) è una pratica DevOps che automatizza il provisioning e la gestione dell'infrastruttura IT utilizzando file di configurazione anziché processi manuali.

L'IaC tratta l'infrastruttura come un software. I team utilizzano l'IaC per gestire versioni, test e distribuzioni dell'infrastruttura utilizzando le stesse pratiche utilizzate per il codice delle applicazioni. 

Questo approccio consente ai team di aggirare la tradizionale configurazione manuale, che può essere complessa e soggetta a errori. La configurazione manuale spesso comporta la configurazione individuale del server, la gestione basata su console e modifiche non documentate.

I team definiscono invece i requisiti infrastrutturali nei file di configurazione che specificano le risorse necessarie (server, reti, database, policy di sicurezza) e come configurarle. Questi file risiedono quindi nei sistemi di controllo delle versioni, che forniscono funzionalità di tracciamento, revisione e rollback.

L'IaC è un elemento importante della più ampia pratica dell'automazione dell'infrastruttura, che utilizza codice e automazione per gestire l'infrastruttura IT durante tutto il suo ciclo di vita. Con l'IaC, gli sviluppatori non devono più eseguire il provisioning manuale dei componenti dell'infrastruttura ogni volta che sviluppano, testano o distribuiscono applicazioni. Questa automazione aiuta le organizzazioni a controllare i costi, ridurre i rischi e rispondere rapidamente alle nuove opportunità di business.

Man mano che le organizzazioni adottano architetture cloud-native, l'IaC è sempre più essenziale. Gli ambienti IT ora si estendono su più cloud, migliaia di container e microservizi distribuiti. I processi manuali che una volta gestivano alcuni server non sono in grado di gestire queste architetture, dove i team distribuiscono spesso centinaia di applicazioni al giorno e provvedono costantemente a fornire, scalare e dismettere l'infrastruttura.

L'IaC aiuta a gestire questi ambienti complessi in tre modi critici:

  • Operare su larga scala: configurazione e manutenzione di migliaia di server, contenitori e risorse cloud in più ambienti.

  • Accelerare i cicli di implementazione: scalabilità istantanea dell'infrastruttura per soddisfare la domanda senza lunghe operazioni di configurazione manuale.

  • Garantire la coerenza: eliminazione dell'errore umano e della deriva di configurazione che possono contribuire a portare a vulnerabilità di sicurezza, violazioni della conformità e interruzioni del servizio.

Ad esempio, un'azienda retail che si prepara per il Black Friday potrebbe dover scalare 100-1.000 server entro poche ore. Con l'IaC, questa scalabilità avviene automaticamente nell'infrastruttura on-premise e cloud, in base a modelli predefiniti. Questa capacità di scalare consente di garantire che ogni nuovo server mantenga le stesse configurazioni di sicurezza e conformità.

Secondo l'IBM Institute for Business Value, il 65% dei dirigenti riferisce che le tecnologie di automazione come l'IaC stanno migliorando la produttività dei propri team IT.

Le ultime notizie nel campo della tecnologia, supportate dalle analisi degli esperti

Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e altro con la newsletter Think. Leggi l'Informativa sulla privacy IBM.

Grazie per aver effettuato l'iscrizione!

L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.

Come funziona l'IaC

L'IaC combina un workflow ripetibile con tooling automatizzato. Il workflow (scrittura, versione, provisioning e distribuzione) definisce il modo in cui i team passano dai requisiti infrastrutturali alle risorse distribuite. Gli strumenti (file di configurazione, sistemi di controllo delle versioni e motori di automazione) forniscono i meccanismi per definire, tracciare e creare l'infrastruttura.

Insieme, questi elementi trasformano la gestione dell'infrastruttura da un processo manuale e soggetto a errori in una funzione automatizzata e ripetibile. I team scrivono l'infrastruttura come codice, con versioni univoche come per il software, e implementano ambienti identici su richiesta.

Workflow dell'IaC

Il workflow IaC segue quattro fasi:

1. Scrittura

Gli sviluppatori creano script IaC utilizzando linguaggi quali HCL, YAML o JSON, in modo simile a come scrivono il codice dell'applicazione in Java™ o Python. I team scrivono definizioni dell'infrastruttura che specificano le risorse necessarie e le modalità di configurazione. Spesso scrivono questi file in ambienti di sviluppo integrati (IDE), che forniscono caratteristiche di controllo degli errori e completamento automatico.

2. Controllo della versione 

Il codice sorgente viene memorizzato nei sistemi di controllo delle versioni, noti anche come controllo del codice sorgente o repository di codice sorgente, come Git o GitHub. Il controllo delle versioni tiene traccia delle modifiche, mantiene le versioni alternative e consente ai team di ripristinare le versioni precedenti in caso di problemi.

3. Provisioning

Un motore di automazione legge i file di configurazione e fornisce le risorse infrastrutturali specificate. Questa fase trasforma il codice in una vera e propria infrastruttura, creando macchine virtuali (VM), configurando reti, configurando database e stabilendo gruppi di sicurezza. Il processo di provisioning è idempotente, il che significa che può essere eseguito più volte senza creare risorse duplicate.

4. Distribuzione

I team eseguono script per distribuire l'infrastruttura in vari ambienti, con l'IaC che aiuta a garantire configurazioni coerenti tra gli ambienti. La coerenza degli script aiuta soprattutto quando si utilizza la distribuzione continua, in cui le modifiche al software a un'applicazione vengono rilasciate automaticamente nell'ambiente di produzione. 

Strumenti automatizzati

Gli strumenti automatizzati forniscono meccanismi per definire, tracciare e creare infrastrutture tramite codice.

File di configurazione

I file di configurazione definiscono l'infrastruttura. Possono essere scritti in HCL, JSON, YAML o linguaggi specifici del dominio. Questi file sono blueprint che descrivono esattamente l'infrastruttura di cui si ha bisogno, quanti server, quali dimensioni, quali impostazioni di rete, in un formato che gli strumenti di automazione possono leggere ed eseguire.

Questi file diventano la singola fonte affidabile per i team, contribuendo a garantire la coerenza in più ambienti. Possono essere aggiornati, riutilizzati o variati per nuove installazioni man mano che i team aggiungono altri asset. 

Sistemi di controllo delle versioni

I sistemi di controllo di versione memorizzano la cronologia di ogni file. Tracciano il codice originale e le eventuali modifiche, incluso cosa è stato modificato, da chi e quando. Questo monitoraggio consente ai team di comprendere le modifiche, recuperare le eliminazioni ed eseguire il rollback quando si verificano problemi.

Il controllo delle versioni consente alle organizzazioni di suddividere l'infrastruttura in moduli che si combinano tramite l'automazione. Questo approccio modulare consente di creare, aggiornare e creare versioni di ambienti complessi, riducendo al contempo la duplicazione e semplificando il test e il riutilizzo degli script.

Motori di automazione

I motori di automazione automatizzano il provisioning e la configurazione utilizzando codice predefinito. Eseguono le definizioni dell'infrastruttura nei file di configurazione, trasformando il codice in risorse IT effettive come server, reti e database.

Alcuni motori sono specifici del cloud, come AWS CloudFormation, Azure Resource Manager o Google Cloud Deployment Manager. Altri funzionano su tutti i cloud, come Terraform, OpenTOFU (un fork open source di Terraform) o Pulumi (che utilizza linguaggi di programmazione generici come Python).

Questi motori di automazione sono spesso abbinati a strumenti di orchestrazione, come Kubernetes, per coordinare risorse e workload su larga scala.

Integrazione di API e piattaforme

Gli strumenti IaC si integrano spesso con piattaforme cloud tramite application programming interface (API). Queste connessioni API consentono agli strumenti IaC di comunicare direttamente con i cloud service, creando e gestendo risorse in modo programmatico anziché tramite interazioni manuali con la console.

L'IaC incorpora anche pratiche standard di sviluppo software per garantire l'affidabilità. I test automatici possono aiutare a verificare le configurazioni dell'infrastruttura prima della distribuzione, identificando errori che potrebbero altrimenti causare interruzioni o vulnerabilità di sicurezza. Alcuni sistemi di controllo della versione possono attivare automaticamente questi test quando si verificano modifiche al codice, contribuendo a garantire che ogni modifica venga convalidata prima di raggiungere la produzione.

Mixture of Experts | 28 agosto, episodio 70

Decoding AI: Weekly News Roundup

Unisciti al nostro gruppo di livello mondiale di ingegneri, ricercatori, leader di prodotto e molti altri mentre si fanno strada nell'enorme quantità di informazioni sull'AI per darti le ultime notizie e gli ultimi insight sull'argomento.

Approcci IaC di base

Quando implementano l'IaC, le organizzazioni fanno due scelte principali: come definire un'infrastruttura (dichiarativa o imperativa) e se un'infrastruttura può essere modificata dopo la distribuzione (mutabile o immutabile).

Approccio dichiarativo e approccio imperativo

Gli approcci dichiarativi e imperativi differiscono nel modo in cui si scrive il codice dell'infrastruttura.

L'approccio dichiarativo, noto anche come approccio funzionale o IaC dichiarativo, è il metodo più comune. L'utente descrive lo stato desiderato (ad esempio, "Ho bisogno di 3 server con queste specifiche") e l'IaC gestisce l'implementazione. Crea le risorse, installa il software necessario, risolve le interdipendenze e gestisce automaticamente il controllo delle versioni.

L'approccio imperativo, noto anche come approccio procedurale, richiede che l'utente scriva istruzioni dettagliate per il provisioning dell'infrastruttura. I comandi esatti sono specificati in ordine preciso: "Prima crea un server, quindi installa questo software, quindi configura queste impostazioni." Questo approccio richiede più esperienza e può rendere più difficile mantenere la coerenza.

Infrastruttura mutabile e immutabile

L'infrastruttura mutabile può essere modificata dopo il provisioning, mentre l'infrastruttura immutabile non può essere modificata dopo il provisioning.

L'infrastruttura mutabile offre flessibilità per modifiche ad hoc, come la risoluzione di requisiti specifici di applicazione o patch di sicurezza di emergenza. Tuttavia, questa flessibilità può compromettere la coerenza e rendere difficile il rilevamento delle versioni.

La maggior parte delle organizzazioni sceglie un'infrastruttura immutabile. Per modificare un server o una configurazione, i team devono sostituire l'intera infrastruttura con nuove risorse.

Anche se questo sembra proibitivo, in realtà può essere utile per diversi motivi. In primo luogo, l'infrastruttura immutabile elimina la deriva della configurazione. La deriva è un problema comune con l'infrastruttura mutabile, in cui le modifiche manuali si accumulano nel tempo, rendendo più difficile mantenere la coerenza tra gli ambienti.

In secondo luogo, l'infrastruttura immutabile fornisce funzionalità affidabili di tracciamento e rollback delle versioni perché ogni modifica crea una nuova istanza con versione. Ciò significa che i team possono tornare istantaneamente a qualsiasi configurazione precedente.

Infine, con l'IaC basato sul cloud, è possibile effettuare il provisioning di una nuova infrastruttura rapidamente, spesso in pochi minuti, in modo che il reprovisioning di tutte le risorse dell'infrastruttura sia molto più pratico di quanto sembri inizialmente.

Benefici dell'IaC 

Automatizzando la gestione dell'infrastruttura che utilizza il codice, l'IaC offre diversi benefici:

Tempi più rapidi per la produzione

Il provisioning manuale dell'infrastruttura può richiedere settimane di configurazione dell'hardware, installazione del sistema operativo e configurazione della rete da parte di personale specializzato.

L'IaC riduce i tempi di provisioning da settimane a minuti in tutti gli ambienti. Ad esempio, l'IaC può automatizzare il provisioning di infrastrutture legacy che altrimenti richiederebbero processi manuali come l'estrazione di un ticket. Invece di attendere giorni per la configurazione del database e del server, gli sviluppatori possono eseguire uno script per implementarli in pochi minuti.

Maggiore coerenza

Con l'IaC, ogni volta che viene eseguito il provisioning dell'infrastruttura, segue la configurazione identica definita nel codice.

Questa coerenza consente di eliminare gli errori di configurazione manuale, ad esempio errori tipografici, passaggi mancati o impostazioni errate, evitando al contempo deviazioni della configurazione o dipendenze mancanti.

Le incongruenze di configurazione possono anche creare vulnerabilità di sicurezza e violare i requisiti normativi, come il Sarbanes-Oxley Act (SOX) o il Regolamento generale sulla protezione dei dati (GDPR). Ad esempio, le porte aperte non necessarie o l'HTTPS disabilitato potrebbero causare violazioni della conformità o errori di controllo. L'IaC aiuta a garantire configurazioni di ambiente identiche ogni volta, fino a quando non sono necessarie modifiche.

Sviluppo accelerato

L'IaC può aiutare ad accelerare ogni fase del ciclo di vita della distribuzione del software. Gli sviluppatori possono rapidamente predisporre sandbox e ambienti su richiesta. I team QA possono avviare immediatamente gli ambienti di test. I team operativi possono automatizzare l'infrastruttura per i test di sicurezza e accettazione degli utenti.

Quando il nuovo codice supera i test, sia l'applicazione che la relativa infrastruttura vengono quindi implementate insieme, con conseguente distribuzione più rapida delle caratteristiche e implementazioni più frequenti. 

Protezione contro la perdita di conoscenze

Le organizzazioni senza IaC in genere si affidano a pochi specialisti per il provisioning. Quando uno di questi specialisti se ne va, spesso le sue conoscenze lo accompagnano.

L'IaC aiuta a preservare la conoscenza dell'infrastruttura nel codice, contribuendo a garantire che le competenze critiche rimangano all'organizzazione.

Riduzione dei costi

L'IaC può ridurre significativamente il tempo, l'impegno e le competenze specialistiche necessarie per il provisioning e la scalabilità dell'infrastruttura. Inoltre ottimizza i prezzi basati sul consumo del cloud computing: le organizzazioni possono fornire risorse solo quando necessario e annullarle automaticamente quando sono inattive.

Questo approccio pay-as-you-go può ridurre significativamente la spesa per le infrastrutture, in particolare per gli ambienti di sviluppo e test che non richiedono una disponibilità continua.

Come si integra l'IaC nelle pipeline DevOps e CI/CD

L'IaC è essenziale per le pratiche DevOps perché consente all'infrastruttura di spostare alla velocità dello sviluppo del software.

Senza IaC, il provisioning dell'infrastruttura può diventare un collo di bottiglia. Mentre il codice viene implementato in pochi minuti, la configurazione dell'infrastruttura potrebbe richiedere ore o giorni. Ad esempio, l'aggiunta di un nuovo database potrebbe richiedere un ticket per il team dell'infrastruttura e giorni di attesa.

L'IaC elimina questa lacuna applicando l'integrazione continua e la distribuzione continua (CI/CD) alle distribuzioni dell'infrastruttura. L'infrastruttura e il codice dell'applicazione possono essere testati, convalidati e distribuiti insieme in parallelo, anziché come processi eterogenei.

In pratica, il codice dell'infrastruttura spesso si affianca al codice dell'applicazione nel controllo della versione. Quando gli sviluppatori apportano modifiche, la pipeline CI/CD può fornire l'infrastruttura di test utilizzando modelli IaC, eseguire test automatici e utilizzare gli stessi modelli per distribuire in produzione. Questo aiuta a garantire che ogni ambiente (di sviluppo, di test, di staging, di produzione) abbia configurazioni identiche dell'infrastruttura.

Il vantaggio fondamentale è la coerenza. Senza IaC, possono verificarsi deviazioni ambientali quando gli ambienti di test non corrispondono alla produzione, causando errori di implementazione. L'IaC aiuta a garantire che ciò che funziona nei test funzioni anche in produzione perché entrambi utilizzano le stesse definizioni di infrastruttura. I team possono esaminare le modifiche all'infrastruttura tramite pull request, tenere traccia delle modifiche e ripristinare quando necessario, trattando l'infrastruttura con lo stesso rigore del codice dell'applicazione.

Strumenti di Infrastructure as Code

Gli strumenti IaC si dividono in due categorie: strumenti di provisioning che creano e distribuiscono l'infrastruttura e strumenti di gestione della configurazione che mantengono l'infrastruttura dopo la distribuzione.

Alcuni strumenti vengono eseguiti su tutti i cloud (funzionando su più fornitori), mentre altri sono specifici della piattaforma.

Le organizzazioni in genere combinano strumenti di entrambe le categorie per creare pipeline IaC complete.

Strumenti di provisioning 

Gli strumenti di provisioning creano e distribuiscono le risorse dell'infrastruttura: server, reti e sistemi storage. Si concentrano sull'impostazione iniziale e sulla configurazione dei componenti dell'infrastruttura, trasformando i requisiti dell'infrastruttura in risorse. 

Terraform

Terraform di HashiCorp, una società IBM, è uno strumento IaC che può essere eseguito su tutti i cloud e che utilizza la configurazione dichiarativa per gestire l'infrastruttura su più piattaforme.

I team scrivono le definizioni dell'infrastruttura in HCL (HashiCorp Configuration Language) e possono implementare lo stesso codice su AWS, Azure, Google Cloud o nei data center on-premise. Questa portabilità consente alle organizzazioni di evitare il blocco da fornitore e combinare provider di cloud in base ai loro punti di forza, ad esempio utilizzando AWS per il calcolo e Google cloud per machine learning.

Terraform velocizza anche le distribuzioni fornendo risorse su più provider contemporaneamente. Analizza le dipendenze tra le risorse e ne crea di indipendenti in parallelo. Ad esempio, se si implementano 10 server AWS e 5 database di Azure senza dipendenze, Terraform crea tutte e 15 le risorse contemporaneamente anziché in sequenza, riducendo i tempi di distribuzione.

AWS CloudFormation

AWS CloudFormation è la soluzione IaC nativa di Amazon per l'infrastruttura AWS. I team definiscono interi stack di applicazioni, dalle istanze EC2 ai database di Rational Directory Server, utilizzando modelli JSON o YAML. CloudFormation gestisce automaticamente le dipendenze delle risorse, creandole nell'ordine corretto e ripristinandole in caso di errori.

Sebbene limitato ad AWS, CloudFormation offre una profonda integrazione con i servizi AWS e un supporto immediato per quelli nuovi. Le organizzazioni impegnate in AWS potrebbero preferire le sue prestazioni native e l'accesso alle caratteristiche proprietarie.

Azure Resource Manager 

Azure Resource Manager (ARM) è lo strumento IaC nativo di Microsoft per l'infrastruttura di Azure. Sebbene sia limitato ad Azure, offre una profonda integrazione con la piattaforma.

Le organizzazioni utilizzano i modelli ARM (formato JSON) per definire, implementare e gestire le risorse di Azure. ARM fornisce caratteristiche integrate tra cui il controllo degli accessi basato sui ruoli per la sicurezza, l'etichettatura delle risorse per l'organizzazione, i blocchi per prevenire l'eliminazione accidentale e la mappatura delle dipendenze per garantire che le risorse vengano implementate nell'ordine corretto. 

Google Cloud Deployment Manager

Google Cloud Deployment Manager è lo strumento IaC nativo di Google che utilizza modelli YAML o Python per orchestrare le distribuzioni di Google Cloud. Sebbene sia specifico per la piattaforma, crea e configura risorse su più servizi (Cloud Storage per i dati, Compute Engine per le macchine virtuali, Cloud SQL per i database) aiutando a garantire che funzionino insieme come uno stack completo.

Strumenti di gestione della configurazione

Gli strumenti di gestione della configurazione mantengono l'infrastruttura dopo il provisioning, contribuendo a garantire che i sistemi rimangano correttamente configurati, aggiornati e coerenti. 

Ansible

Ansible® è uno strumento di automazione di Red Hat® che gestisce la configurazione senza richiedere agenti sui sistemi di destinazione. In altre parole, Ansible non ha bisogno di software speciali installati sui server che gestisce. Si connette direttamente utilizzando SSH per eseguire i comandi.

Questo approccio senza agenti significa che Ansible funziona in ambienti cloud, on-premise e ibridi. I team scrivono playbook YAML che definiscono gli stati desiderati e Ansible aiuta a garantire che i sistemi corrispondano a quegli stati. È popolare per la gestione dei container Docker e delle implementazioni Kubernetes .

Puppet

Puppet utilizza la configurazione dichiarativa per gestire grandi infrastrutture in ambienti cloud, on-premise e data center.

Controlla continuamente migliaia di server per assicurarsi che corrispondano alle configurazioni definite, correggendo automaticamente eventuali deviazioni. Puppet genera report dettagliati che mostrano cosa è cambiato e quando, rendendolo efficace per implementazioni più ampie.

Chef 

Chef utilizza "ricettari" e "ricette" per definire le configurazioni dell'infrastruttura in qualsiasi ambiente: cloud, on-premise o ibrido.

Le organizzazioni si rivolgono spesso a Chef per il suo framework di test. I team possono verificare le configurazioni negli ambienti di test prima di eseguire il push in produzione. Questo approccio basato sull'individuazione precoce dei problemi può renderlo popolare nelle organizzazioni che richiedono aggiornamenti frequenti dell'infrastruttura e apprezzano framework di test solidi. 

Soluzioni correlate
IBM Turbonomic

Scala automaticamente l'infrastruttura IT esistente per prestazioni più elevate a costi inferiori.

Esplora IBM Turbonomic
Soluzioni AIOps

Scopri come l'AI per le operazioni IT fornisce gli insight necessari per favorire eccezionali prestazioni di business.

Esplora le soluzioni AIOps
Servizi di consulenza per l'automazione

Vai oltre la semplice automazione delle attività per gestire processi di alto profilo, rivolti ai clienti e in grado di generare entrate con adozione e scalabilità integrate.

Scopri i servizi di consulenza per l'automazione
Fai il passo successivo

Scopri come l'AI per le operazioni IT fornisce gli insight necessari per ottenere prestazioni aziendali eccezionali.

Scopri Turbonomic Esplora le soluzioni AIOps