Home

topics

Infrastructure as Code

Cos'è Infrastructure as Code?
sfondo nero e blu
Infrastructure as Code

Infrastructure as Code (IaC) automatizza il provisioning dell'infrastruttura, consentendo alla tua organizzazione di sviluppare, distribuire e scalare le applicazioni cloud con maggiore velocità, minori rischi e costi ridotti.

Cos'è Infrastructure as Code (IaC)?

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?":

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, 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:

  • Tempi più rapidi per la produzione/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 in base alle necessità). 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).
  • Consistenza migliorata — minore 'scostamento della configurazione': lo scostamento della configurazione si verifica quando aggiornamenti e modifiche alla configurazione ad-hoc causano ambienti di sviluppo, test e distribuzione non corrispondenti. 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 consistenza 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 QA può fornire rapidamente ambienti di test completamente affidabili. Le operazioni possono 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 distribuite in un'unica fase.
  • Protezione contro l'abbandono: per massimizzare l'efficienza nelle organizzazioni senza IaC, il provisioning è generalmente delegato ad tipicamente delegato a pochi ingegneri o personale IT esperti. Se uno di questi specialisti lascia l'organizzazione, vengono lasciati altri a 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 necessarie per il provisioning e la scalabilità dell'infrastruttura, IaC consente alle organizzazione 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.
Infrastruttura immutabile e infrastruttura mutabile

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.

Approccio dichiarativo e imperativo

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.

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 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.

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 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?"

Infrastructure as Code e IBM Cloud

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:

  • 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 come IaC integra le funzionalità di IBM DevOps.

Inizia oggi stesso con un account IBM Cloud.

Soluzioni correlate
Crea, modernizza e gestisci le applicazioni

Crea, modernizza e gestisci le applicazioni in modo sicuro su qualsiasi cloud con fiducia

Esplora la creazione, la modernizzazione e la gestione delle applicazioni
DevOps Services su IBM Cloud

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

Esplora DevOps Services su IBM Cloud