Home
topics
Infrastructure as Code
Infrastructure as Code (IaC) 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 competitive. IaC rende possibile questa automazione.
IaC è anche una pratica DevOps essenziale, indispensabile per un ciclo di vita di implementazione del software al passo con in tempi. Consente ai team DevOps di creare e di controllare rapidamente le versioni dell'infrastruttura allo stesso modo in cui viene controllato il 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, "Cos'è 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, ecc. 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 contenitori 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 hanno impatto sulle implementazioni.
Infrastructure as Code (IaC) è il passaggio finale per consentire agli sviluppatori di 'ordinare' in modo efficace un'infrastruttura completamente documentata e con controllo versione 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 è la scelta di stabilire un'infrastruttura mutabile o immutabile.
Una infrastruttura mutabile è un'infrastruttura che può essere modificata o aggiornata dopo essere stata originariamente fornita. 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 consistenza tra distribuzioni o all'interno delle versioni - e può rendere molto più difficile il tracciamento della versione dell'infrastruttura.
Per questi motivi, la maggior parte delle IaC è implementata come infrastruttura immutabile — infrastruttura che non può essere modificata dopo essere stata originariamente fornita. 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 la conservazione della consistenza tra ambienti di test e distribuzione. 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 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 contenitore, 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 ti aiuta a preparare script di automazione che forniscono l'infrastruttura un passo specifico alla volta. Sebbene questo possa comportare maggior lavoro da gestire durante il ridimensionamento, può essere più semplice per il personale amministrativo comprendere e sfruttare gli 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, si inserisce un indirizzo ed il GPS si occupa di individuare il percorso più rapido e di evitare il traffico - ma probabilmente è necessario un esperto che spieghi perché sono state effettuate determinate scelte. Le istruzioni passo-passo si basano sull'esperienza personale; il provider conosce il percorso ed i motivi per cui lo ha scelto, ma se si incontrano ostacoli o si desidera ottimizzare il percorso, è necessario chiedere aiuto oppure svolgere il lavoro in autonomia.
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 comunità open source sponsorizzato da Red Hat progettato per aiutare le organizzazioni ad automatizzare il provisioning, la gestione della configurazione e la distribuzione delle applicazioni. Ansible, uno strumento di automazione dichiarativo, consente di creare 'playbook' (scritti nel linguaggio di configurazione YAML) per specificare lo stato desiderato per la tua infrastruttura e quindi esegue il provisioning per conto dell'utente. Ansible è una scelta popolare per automatizzare il provisioning di contenitori Docker e distribuzioni 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 dal punto 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 di configurazione.
Per informazioni dettagliate sulla scelta di uno strumento IaC, consultare "Infrastructure as Code: Chef, Ansible, Puppet o Terraform?"
Le funzionalità IaC di IBM, che dispongono di modelli personalizzabili e condivisibili, possono gettare le basi per la modernizzazione delle applicazioni, indipendentemente dal punto del viaggio verso il cloud in cui ti trovi.
Fai un passo avanti:
Inizia oggi stesso con un account IBM Cloud.
Crea, modernizza e gestisci le applicazioni in modo sicuro su qualsiasi cloud con fiducia
Crea, distribuisci e gestisci applicazioni native del cloud dotate di misure di sicurezza complete su più dispositivi, ambienti e cloud con le best practice DevOps