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?":
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:
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.
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.
Anche se sono disponibili molti strumenti IaC open source, gli strumenti adottati più comunemente sono Ansible e Terraform:
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.
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?"
Usa Infrastructure as Code per configurare e automatizzare le risorse in modo da poterti concentrare sulle tue applicazioni più importanti.
Un potente software DevOps per creare, implementare e gestire applicazioni sicure e native del cloud su più dispositivi, ambienti e cloud.
DevOps velocizza la fornitura di software di qualità superiore combinando e automatizzando il lavoro dei team di sviluppo software ITOps (IT Operations).
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.
Scopri come scegliere uno strumento Infrastructure as Code.