Home topics Infrastructure as Code Cos'è IaC (Infrastructure as Code)?
IaC (Infrastructure as Code) automatizza il provisioning dell'infrastruttura, consentendo alla tua organizzazione di sviluppare, implementare e scalare le applicazioni cloud con maggiore velocità, minori rischi e costi ridotti.
DevOps
Scie luminose da movimento ad alta velocità in un tunnel
Cos'è IaC (Infrastructure as Code)?

IaC (Infrastructure as Code) utilizza un linguaggio di codifica descrittivo di alto livello per automatizzare il provisioning dell'infrastruttura IT. Questo automazione elimina la necessità per gli sviluppatori di fornire e gestire manualmente server, sistemi operativi, connessioni al database, storage ed altri elementi dell'infrastruttura ogni volta che desiderano sviluppare, eseguire test o implementare un'applicazione software.

In un'epoca in cui non è raro che un'azienda implementi centinaia di applicazioni in produzione ogni giorno - e in cui l'infrastruttura viene costantemente modificata e ridimensionata in risposta alle richieste di sviluppatori e utenti - è essenziale per un'organizzazione automatizzare l'infrastruttura per controllare i costi, ridurre i rischi e rispondere rapidamente a nuove opportunità di business e minacce della concorrenza. IaC rende possibile questa automazione.

IaC è anche una prassi DevOps essenziale, indispensabile per un ciclo di vita di implementazione del software al passo con in tempi. Consente ai team DevOps di creare e controllare rapidamente le versioni dell'infrastruttura allo stesso modo in cui controllano le versioni del codice sorgente e di tenere traccia di tali versioni in modo da evitare incongruenze tra gli ambienti IT, che potrebbero causare seri problemi durante l'implementazione.

Sai Vennam fornisce informazioni più approfondite su IaC nel seguente video, "What is Infrastructure as Code?":

Vantaggi di Infrastructure as Code

Il provisioning dell'IT tradizionale è un processo lungo e costoso, che richiede l'impostazione fisica dell'hardware, l'installazione e la configurazione del software del sistema operativo e la connessione a  middleware,  reti,  storage e così via da parte di personale esperto.

La virtualizzazione e lo sviluppo nativo del cloud eliminano il problema della gestione dell'hardware fisico, consentendo agli sviluppatori di fornire i propri server virtuali o container  on demand. Tuttavia, il provisioning di un'infrastruttura virtualizzata distrae l'attenzione degli sviluppatori dalla codifica, richiede comunque la ripetizione del lavoro di provisioning per ogni nuova implementazione e non offre un modo semplice per tenere traccia delle modifiche all'ambiente ed impedire incongruenze che si ripercuotono sulle implementazioni.

IaC (Infrastructure as Code) arriva a consentire agli sviluppatori di "ordinare" in modo efficace un'infrastruttura completamente documentata e con il controllo delle versioni eseguendo uno script. I vantaggi sono esattamente quelli che potresti immaginare:

  • Tempi più rapidi di produzione e immissione sul mercato: l'automazione IaC velocizza notevolmente il processo di provisioning dell'infrastruttura per lo sviluppo, l'esecuzione di test e la produzione (e il ridimensionamento dell'infrastruttura di produzione come necessario). Poiché codifica e documenta tutto, IaC può automatizzare anche il provisioning di un'infrastruttura legacy, che potrebbe essere altrimenti gestita tramite processi molto lunghi (come l'estrazione di un ticket).

  • Coerenza migliorata - minore "scostamento della configurazione": lo scostamento della configurazione si verifica quando aggiornamenti e modifiche alla configurazione ad-hoc determinano la mancata corrispondenza tra ambienti di sviluppo, test e implementazione. Questo può causare problemi all'implementazione, vulnerabilità della sicurezza e rischi durante lo sviluppo di applicazioni e servizi che devono rispettare rigorosi standard di conformità normativa. IaC impedisce lo scostamento fornendo ogni volta lo stesso ambiente.

  • Sviluppo più rapido ed efficiente:  semplificando il provisioning e garantendo la coerenza dell'infrastruttura, IaC può accelerare con sicurezza ogni fase del ciclo di sviluppo della distribuzione del software. Gli sviluppatori possono fornire rapidamente sandbox e ambienti di integrazione continua/distribuzione continua (continuous integration/continuous deployment, CI/CD). Il settore di controllo qualità può fornire rapidamente ambienti di test completamente affidabili. Il settore delle operazioni può rapidamente fornire l'infrastruttura per i test di sicurezza e accettazione degli utenti. E quando il codice supera la fase di test, l'applicazione e l'infrastruttura di produzione su cui viene eseguita possono essere implementate in un unico passo.

  • Protezione contro l'abbandono: per massimizzare l'efficienza nelle organizzazioni senza IaC, il provisioning è generalmente delegato a pochi ingegneri o personale IT esperti. Se uno di questi specialisti lascia l'organizzazione, agli altri tocca a volte ricostruire il processo. IaC garantisce che l'intelligence del provisioning resti sempre all'interno dell'organizzazione.

  • Riduzione dei costi e aumento del ROI: oltre a ridurre notevolmente il tempo, l'impegno e le competenze specializzate necessari per il provisioning e la scalabilità dell'infrastruttura, IaC consente alle organizzazioni di sfruttare al massimo la struttura di costi basata sul consumo del cloud computing.  Inoltre, consente agli sviluppatori di dedicare meno tempo ai collegamenti e più tempo a sviluppare soluzioni software mission-critical innovative.
Confronto tra infrastruttura immutabile e infrastruttura mutabile

Un'importante decisione da prendere quando si automatizza l'infrastruttura con IaC e quando si sceglie una soluzione IaC è se stabilire un'infrastruttura mutabile o immutabile. 

Una Infrastruttura mutabile è un'infrastruttura che può essere modificata o aggiornata dopo il suo provisioning iniziale. Un'infrastruttura mutabile offre ai team di sviluppo la flessibilità di effettuare personalizzazioni del server ad hoc, ad esempio, per adattarsi meglio ai requisiti di sviluppo o dell'applicazione o per rispondere ad un problema emergente relativo alla sicurezza. Tuttavia, influisce negativamente su un importante vantaggio fornito da IaC - la capacità di mantenere la coerenza tra le implementazioni o all'interno delle versioni - e può rendere molto più difficile il tracciamento delle versioni dell'infrastruttura.

Per questi motivi, la maggior parte delle IaC è implementata come infrastruttura immutabile - infrastruttura che non può essere modificata dopo il suo provisioning iniziale. Se è necessario modificare un'infrastruttura immutabile, è necessario sostituirla con una nuova infrastruttura. Poiché la nuova infrastruttura può essere creata rapidamente sul cloud - in particolare con IaC - l'infrastruttura immutabile è molto più pratica e fattibile di quanto sembri.

L'infrastruttura immutabile porta IaC ad una fase logica successiva, essenzialmente rafforzando l'IaC per garantire ulteriormente i vantaggi offerti. Elimina quasi completamente lo scostamento della configurazione e rende ancora più semplice mantenere la coerenza tra ambienti di test e implementazione. Inoltre, semplifica la conservazione e il tracciamento delle versioni dell'infrastruttura e il ritorno a qualsiasi versione precedente, quando necessario.

Confronto tra approccio dichiarativo e imperativo

Quando si sceglie una soluzione IaC, è importante anche comprendere la differenza tra un approccio dichiarativo o uno imperativo all'automazione dell'infrastruttura.

Nella maggior parte delle organizzazioni, l'approccio dichiarativo - noto anche come approccio funzionale - è la soluzione più adatta. Nell'approccio dichiarativo, viene specificato lo stato finale dell'infrastruttura che si desidera fornire e il software IaC gestisce tutto il resto - attivando la macchina virtuale (VM) o il container, installando e configurando il software necessario, risolvendo le interdipendenze tra sistemi e software e gestendo il controllo delle versioni. Il principale svantaggio dell'approccio dichiarativo è che generalmente richiede un amministratore esperto per l'impostazione e la gestione, e tali amministratori sono spesso specializzati nella propria soluzione preferita.

Nell'approccio imperativo - noto anche come approccio procedurale - la soluzione aiuta a preparare script di automazione che eseguono il provisioning dell'infrastruttura un passo specifico alla volta. Sebbene questo possa comportare maggior lavoro da gestire durante la scalabilità, può essere più semplice per il personale amministrativo comprendere e avvalersi degli script di configurazione già esistenti.

La scelta di un approccio dichiarativo o imperativo è simile alla scelta tra utilizzare un sistema GPS o seguire istruzioni passo-passo. Con un GPS, immetti un indirizzo ed il GPS si occupa di individuare il percorso più rapido e di evitare il traffico - ma probabilmente ti servirebbe un esperto che ti spiegasse perché ha fatto le scelte che ha fatto. Le istruzioni passo-passo si basano sull'esperienza personale; il provider conosce il percorso ed i motivi per cui lo ha scelto, ma se incontri degli ostacoli o desideri ottimizzare il percorso, devi chiedere aiuto oppure svolgere il lavoro tu stesso.

Strumenti Infrastructure as Code

Anche se sono disponibili molti strumenti IaC open source, gli strumenti adottati più comunemente sono Ansible e Terraform:

Cos'è Ansible?

Ansible (link esterno a ibm.com) è un progetto di community open source sponsorizzato da Red Hat progettato per aiutare le organizzazioni ad automatizzare il provisioning, la gestione della configurazione e l'implementazione delle applicazioni. Ansible, uno strumento di automazione dichiarativo, consente di creare dei "playbook"' (scritti nel linguaggio di configurazione YAML) per specificare lo stato desiderato per la tua infrastruttura, e quindi esegue il provisioning per tuo conto. Ansible è una scelta diffusa per automatizzare il provisioning di container Docker e implementazioni Kubernetes. 

Cos'è Terraform?

Terraform è un altro strumento di provisioning dichiarativo e di orchestrazione dell'infrastruttura che consente agli ingegneri di automatizzare il provisioning di tutti gli aspetti dell'infrastruttura on-premise e basata su cloud della propria azienda.

Terraform funziona con tutti i principali provider cloud e consente di automatizzare la creazione di risorse tra più provider in parallelo, indipendentemente dall'ubicazione in cui risiedono server fisici, server DNS o database. Può inoltre fornire applicazioni scritte in qualsiasi linguaggio.

A differenza di Ansible, Terraform non offre funzionalità di gestione della configurazione, ma funziona di pari passo con gli strumenti di gestione della configurazione (ad esempio, Cloud Formation) per fornire automaticamente l'infrastruttura nello stato descritto dai file di configurazione e modificare automaticamente il provisioning degli aggiornamenti quando necessario in risposta alle modifiche della configurazione.

Per informazioni dettagliate sulla scelta di uno strumento IaC, consulta "Infrastructure as Code: Chef, Ansible, Puppet o Terraform?"

Soluzioni correlate
IBM® Cloud Schematics

Usa Infrastructure as Code per configurare e automatizzare le risorse in modo da poterti concentrare sulle tue applicazioni più importanti.

Esplora IBM® Cloud Schematics
Soluzioni IBM DevOps

Un potente software DevOps per creare, implementare e gestire applicazioni sicure e native del cloud su più dispositivi, ambienti e cloud.

Esplora le soluzioni IBM DevOps
Risorse Cos'è DevOps?

DevOps velocizza la fornitura di software di qualità superiore combinando e automatizzando il lavoro dei team di sviluppo software ITOps (IT Operations).

Cos'è il cloud computing?

Il cloud computing ti consente di collegarti all'infrastruttura IT tramite internet e di utilizzare le risorse di calcolo senza installarle e gestirle on-premise.

Infrastructure as Code: Chef, Ansible, Puppet o Terraform?

Scopri come scegliere uno strumento Infrastructure as Code.

Passa alla fase successiva

Basato su Terraform, IBM® Cloud Schematics è una soluzione semplificata per l'automazione della gestione dell'infrastruttura e può aiutare le organizzazioni ad aumentare le prestazioni delle applicazioni con provisioning e orchestrazione coerenti.

Scopri di più su IBM® Cloud Schematics