Infrastructure as Code (IaC): gestione di un'infrastruttura IT tramite codice
Per quanto riguarda le infrastrutture IT è quasi inevitabile ricorrere a hardware virtualizzati che possono essere gestiti tramite software. Le risorse di archiviazione, server e rete, o anche interi data center, possono essere assemblati con precisione e scalati in qualsiasi momento senza la necessità di un accesso manuale ai rispettivi dispositivi. Grazie ai fornitori di Infrastructure as a Service, l'hardware sottostante, definito dal software, può anche essere noleggiato a basso costo, rendendo l'infrastruttura interna completamente superflua.
La gestione delle varie risorse rimane comunque impegnativa, soprattutto a causa del crescente numero di esigenze che le infrastrutture IT devono soddisfare e del fatto che i servizi di diversi fornitori IaaS sono spesso utilizzati contemporaneamente. Il principio "Infrastructure as Code", noto anche come "infrastruttura programmabile", sta diventando sempre più importante.
Che cos'è l'Infrastructure as Code (IaC)?
L'Infrastructure as Code, o IaC, è un paradigma IT che definisce in linguaggio informatico non soltanto il software stesso, ma anche l'infrastruttura necessaria per il suo funzionamento, come lo spazio di archiviazione, la potenza di calcolo o le risorse di rete. In linea di principio, si tratta di programmare anche strutture hardware come codice eseguibile, che può essere facilmente adattato, duplicato, cancellato e “versionato” in qualsiasi momento. Il concetto di Infrastructure as Code si basa su moderne tecnologie cloud come la virtualizzazione e la gestione delle risorse definite tramite software, che consentono la gestione dell'hardware senza accesso manuale ai dispositivi sottostanti.
Infrastructure as Code: l'Infrastructure as Code (IaC) è un paradigma della tecnologia dell'informazione che prevede la descrizione di un hardware in un codice leggibile dal computer. Esso consente di automatizzare notevolmente la struttura e la gestione di infrastrutture IT per poter reagire con precisione a nuove o mutevoli esigenze.
Qual è l'obiettivo dell'Infrastructure as Code?
Il numero di requisiti che i prodotti software devono soddisfare è cresciuto rapidamente negli ultimi anni, comportando, ad esempio, cicli di sviluppo sempre più brevi e una ricerca della massima disponibilità e flessibilità. Oltre allo sviluppo ottimizzato del codice, sono fondamentali per una struttura complessiva di successo, che sia stabile e, soprattutto, competitiva, il miglioramento continuo e la manutenzione intensiva dell'infrastruttura hardware sottostante. È qui che entra in gioco l'Infrastructure as Code, perché l'obiettivo dell’"infrastruttura programmabile" è proprio quello di aumentare la qualità e l'efficienza delle infrastrutture. Alcuni obiettivi e i compiti fondamentali dell'IaC sono i seguenti:
- automatizzare i processi manuali il più possibile;
- abbattere i confini tra le applicazioni e gli ambienti in cui vengono eseguite;
- creare un flusso di lavoro flessibile che semplifichi la collaborazione a livello aziendale per tutte le persone coinvolte nel processo di sviluppo;
- rendere i movimenti di contenuti e le modifiche trasparenti e comprensibili in qualsiasi momento;
- rendere le configurazioni hardware "testabili" come quelle software.
Cosa distingue l'Infrastructure as Code dagli approcci precedenti?
Nell'ambiente classico, non virtualizzato, tutte le risorse sono sempre legate direttamente all'hardware fisico, il che non solo si traduce in un'infrastruttura meno flessibile, ma comporta anche un notevole lavoro manuale per eventuali modifiche alla configurazione.
Con la virtualizzazione dell'hardware dei server, dello storage e delle strutture di rete, questa situazione è cambiata in modo significativo: questa tecnologia consente ai fornitori di offrire ai clienti risorse scalabili a livello centrale senza dover assegnare hardware dedicati. Da un lato, ciò garantisce un'affidabilità notevolmente superiore, in quanto un hardware difettoso può, ad esempio, essere sostituito immediatamente. D'altro canto, è molto più facile per entrambe le parti aggiungere nuove risorse o ridurre le risorse già noleggiate.
Gli ambienti definiti da software (software defined) vanno oltre le normali infrastrutture virtualizzate. Queste sono, infatti, caratterizzate dal fatto che la logica di controllo è completamente astratta dai singoli componenti hardware e implementata in un software di controllo centrale. Fornitori e clienti possono controllare facilmente questa unità di controllo grazie alle interfacce e agli strumenti appositi e assemblare e scalare individualmente le strutture IT. Entrambe le parti beneficiano, inoltre, dell'aumento delle prestazioni dell'hardware, dato che non è responsabile dell'elaborazione dei dati.
Nei servizi definiti da software potete scegliere tra pacchetti singoli come Software Defined Storage (archiviazione), Software Defined Computing (potenza di calcolo) o Software Defined Networking (strutture di rete) e il pacchetto completo Software Defined Data Center (data center).
L'Infrastructure as Code utilizza le suddette tecniche automatizzando la gestione controllata da software delle rispettive risorse virtualizzate per sfruttare al meglio le potenzialità del cloud. L'IaC non va, pertanto, inteso come un'alternativa, ma come un'integrazione o ottimizzazione dell'infrastruttura definita da software.
Quali sono i vantaggi e gli svantaggi dell'Infrastructure as Code?
L'Infrastructure as Code contribuisce in modo decisivo a soddisfare le esigenze di uno sviluppo agile del software. Grazie a script preconfigurati, le necessarie modifiche all'infrastruttura vengono eseguite a una velocità che non si può raggiungere con l'amministrazione manuale. Non importa se gli adattamenti devono essere effettuati nel cuore della notte, nel fine settimana o durante giorni festivi. Anche il potenziale di errori diminuisce, soprattutto nelle fasi amministrative molto ripetitive, perché vengono evitati gli errori di immissione e di battitura. Oltre all'elevata velocità e al basso tasso di errori, l'Infrastructure as Code offre i seguenti vantaggi rispetto all'amministrazione manuale:
- Efficienza elevata: l'IaC offre la possibilità di automatizzare la maggior parte della gestione delle risorse, contribuendo in modo decisivo all'ottimizzazione del Software Development Life Cycle (SDLC), ovvero l'intero processo di sviluppo.
- Riutilizzabilità: una volta che il codice è stato scritto per un'infrastruttura, può essere eseguito infinite volte e in qualsiasi momento. Lo stesso vale, ad esempio, per gli ambienti sandbox durante la fase di sviluppo.
- Gestione delle versioni: dove c'è il codice, è possibile anche la gestione delle versioni, consentendo all'Infrastructure as Code di documentare e tenere traccia delle modifiche apportate. Uno dei vantaggi di questo è che una configurazione precedente può essere ripristinata senza problemi.
- Minimizzazione dei costi/oneri: l'automazione della gestione dell'infrastruttura consente di risparmiare molto tempo e denaro che possono essere investiti in altri settori.
Quest'ultimo vantaggio relativo al risparmio di tempo e costi non è, tuttavia, privo di limiti. In un ambiente Infrastructure as Code ben programmato è certamente vero, ma non bisogna trascurare gli sforzi legati alla progettazione e alla realizzazione: per molti amministratori responsabili, il modello IaC rappresenta un grande cambiamento, perché senza una comprensione completa dei concetti dell'architettura cloud e senza competenze in linguaggi di programmazione come Java, Node.js, Python, ecc. e nell'utilizzo di API, è difficile passare a un'infrastruttura automatizzata o alla sua implementazione. Soprattutto all'inizio, si devono preventivare costi relativamente alti e un elevato impegno per la formazione.
Strumenti IaC: supporti fondamentali per la programmazione di Infrastructure as Code
Già all'inizio è stato sottolineato che le imprese si affidano, nella maggior parte dei casi, ai servizi di diversi fornitori IaaS. Di conseguenza, gli amministratori devono confrontarsi con le caratteristiche e, soprattutto, con le diverse interfacce delle rispettive piattaforme. In alternativa, speciali strumenti o framework IaC offrono i propri linguaggi di configurazione, che consentono la gestione cross-vendor delle risorse e rendono superflua la conoscenza precisa delle API utilizzate. Alcune delle soluzioni più popolari sono:
- Terraform: Terraform è una soluzione open source sviluppata da HashiCrop, la cui versione base può essere scaricata e utilizzata gratuitamente. Le due versioni a pagamento offrono funzionalità per le strutture, l'organizzazione e il lavoro in team.
- AWS CloudFormation: CloudFormation è lo strumento IaC interno di Amazon Web Services (AWS) e come tale è praticamente indispensabile per tutti coloro che lavorano con prodotti AWS come ELB, S3 o EFS. Non ci sono costi aggiuntivi per l'uso, quindi gli utenti pagano solo per le risorse che prenotano.
- Google Cloud Deployment Manager: il Deployment Manager è per la piattaforma cloud di Google quello che CloudFormation è per AWS. Chi ricorre quindi alle risorse IaaS di Google può gestirle comodamente con lo strumento gratuito tramite file di configurazione centrali nel linguaggio di markup YAML.
- Chef Infra: Chef Infra è la soluzione IaC dell'azienda statunitense Chef. Da aprile 2019 sotto la licenza gratuita Apache 2.0, Chef Infra è utilizzato, tra l'altro, da Facebook. Le piattaforme supportate includono Google Cloud, Microsoft Azure, Amazon EC2 e OpenStack.
- Red Hat Ansible Tower: lo strumento Infrastructure as Code Ansible fa parte del portafoglio della società di software Red Hat dal 2015. Esso offre un dashboard visivo, una propria linea di comando e una potente REST API. I due pacchetti disponibili, "Standard" e "Premium", sono, tuttavia, a pagamento.
Esempi di Infrastructure as Code
L'approccio Infrastructure as Code interessa tutte le aziende che sviluppano e gestiscono applicazioni complesse e dipendono quindi da un'infrastruttura altrettanto ampia e potente. Le ragioni determinanti a favore della programmazione di infrastrutture sono:
- l'utilizzo di una grande quantità di risorse IaaS;
- l'infrastruttura è noleggiata da molti fornitori o piattaforme diverse;
- l'infrastruttura necessita di adattamenti regolari;
- le modifiche infrastrutturali devono essere documentate adeguatamente;
- è richiesta una collaborazione ottimale tra amministratori e sviluppatori.
Anche se le aziende possono sostanzialmente programmare i propri file di configurazione IaC, come in parte certamente avviene, tali strumenti e framework vengono utilizzati dagli amministratori che lavorano quotidianamente con IaC. Invece di esempi concreti di Infrastructure as Code, le seguenti clip mostrano come utilizzare questi pratici strumenti IaC (qui AWS CloudFormation e Terraform) per programmare il codice di un’infrastruttura.