Cos'è Terraform e perché è eccezionale
Pubblicato: 2024-03-12La gestione della configurazione è la parte essenziale della metodologia DevOps e strumenti come Ansible, Chef, Puppet, Terraform o SaltStack sono al centro degli ecosistemi di sviluppo software.
Terraform è l'esempio della prossima generazione di sistemi di orchestrazione della configurazione che portano sul tavolo un nuovo livello di caratteristiche e funzionalità. Diamo un'occhiata a cos'è Terraform e perché è eccezionale.
Terraform è lo strumento di orchestrazione della configurazione che funziona con qualsiasi cloud, sia esso un sistema privato on-premise o pubblico, e consente progettazione, gestione e miglioramento sicuri e convenienti per l'infrastruttura come codice. Come parte dello stack Hashicorp, che include anche Vagrant, Packer, Consul, Vault e Nomad, Terraform aiuta a fornire qualsiasi applicazione scritta in qualsiasi linguaggio a qualsiasi infrastruttura.
Ecco i vantaggi derivanti dall'utilizzo di Terraform anziché Ansible, Chef, Puppet o SaltStack:
- Orchestrazione, non semplice configurazione
- Infrastruttura immutabile
- Codice dichiarativo, non procedurale
- Architettura solo client
Di seguito spiegheremo più in dettaglio perché questo è così importante.
Terraform, lo strumento di orchestrazione del server
Tutti gli strumenti sopra menzionati sono stati creati per la configurazione del server, il che significa che il loro obiettivo principale è installare e gestire software sui server già esistenti. Terraform si concentra maggiormente sul provisioning dei server, lasciando la distribuzione dei contenitori software a Docker o Packer. Quando l'intera infrastruttura cloud viene trattata come codice e tutti i parametri sono combinati in file di configurazione dichiarativi, tutti i membri del team possono facilmente collaborare su di essi, come farebbero con qualsiasi altro codice.
I servizi di consulenza Terraform possono migliorare notevolmente l'efficienza del provisioning dei server e della gestione dell'infrastruttura, garantendo un'integrazione perfetta con strumenti esistenti come Docker o Packer per la distribuzione di contenitori software. Sfruttando Terraform insieme alla consulenza di esperti, i team possono semplificare la gestione dell'infrastruttura cloud trattandola come codice, consentendo una collaborazione più fluida e un utilizzo ottimizzato delle risorse.
Infrastruttura immutabile
Con Chef, Salt, Puppet o Ansible, qualsiasi aggiornamento software deve essere eseguito sul posto. Detto questo, ogni server crea un record unico di aggiornamenti durante tutto il suo ciclo di vita. Ciò può spesso portare alla cosiddetta deriva della configurazione quando le differenze in queste configurazioni portano a bug, che possono essere utilizzati come exploit e violazioni della sicurezza. Terraform risolve il problema utilizzando un approccio di infrastruttura immutabile , in cui ogni nuovo aggiornamento di qualsiasi parametro crea uno snapshot di configurazione separato, il che significa l'implementazione di un nuovo server e il deprovisioning di quello vecchio in caso di necessità. In questo modo, l'aggiornamento dell'ambiente di sviluppo avviene in modo fluido, semplice ed è completamente a prova di bug, mentre tornare a una delle configurazioni precedenti è semplice come scegliere l'istantanea della configurazione ed effettuare il provisioning di un nuovo ambiente in base ad essa.
Stile del codice dichiarativo
Mentre Chef o Ansible ti costringono a scrivere istruzioni procedurali passo passo per raggiungere lo stato desiderato, Terraform, Salt o Puppet preferiscono descrivere lo stato finale desiderato del sistema e lo strumento stesso si occupa del raggiungimento degli obiettivi prefissati. Perché è meglio? Perché un numero piuttosto limitato di modelli può soddisfare tutte le esigenze di gestione della configurazione e le primitive incluse consentono di creare codice complesso, ma pulito e modulare. Con il codice procedurale è necessario pensare a tutti gli eventi e i processi recenti che hanno avuto luogo per poter scrivere istruzioni chiare. Con Terraform ordini semplicemente allo strumento di fare qualcosa con lo stato attualmente attivo del sistema, ecco perché la base di codice rimane piuttosto piccola e facilmente comprensibile.
Architettura solo client
Terraform sfrutta l'API del fornitore di servizi cloud per il provisioning dell'infrastruttura, eliminando la necessità di ulteriori controlli di sicurezza, eseguendo un server di gestione della configurazione separato e più agenti software. Ansible lo fa collegandosi tramite SSH, ma le capacità sono piuttosto limitate. Grazie al funzionamento tramite API, Terraform presenta una varietà letteralmente infinita di azioni. Questo è molto migliore in termini di sicurezza, manutenibilità e facilità d'uso generale.
Inconvenienti della terraformazione
Poiché Terraform è uno strumento relativamente nuovo, è ancora lungi dall'essere perfetto. Ad esempio, il provider una volta aveva corretto un bug nel provider di accensione Terraform e rimosso i rientri da JSON, cosa che costringeva alla ricreazione di tutte le infrastrutture precedentemente configurate.
Un'altra cosa importante da notare è che deve essere presente un unico maestro di cappella quando si utilizza questo strumento di orchestrazione, poiché eseguire le stesse azioni da terminali diversi con versioni Terraform diverse può portare a un risultato imprevedibile. Sorgono problemi evidenti con la collaborazione e la governance e, per ora, devono ancora essere affrontati. Ciò limita praticamente il numero di ingegneri DevOps che lavorano con una base di codice a uno (o a un singolo terminale che lavora a turni).
Il terzo difetto di Terraform è che è stato sviluppato pensando all'implementazione solo cloud, mentre le sue controparti come Salt, Ansible, Puppet funzionano perfettamente con server bare metal, poiché sono state sviluppate più di 5 anni fa, senza un approccio solo cloud in mente. Ciò rende lo strumento di orchestrazione della configurazione Terraform davvero specifico di nicchia e non una soluzione unica per tutti.
Siamo sicuri, tuttavia, che entro i prossimi anni tutti i bug verranno corretti e tutti i problemi verranno risolti, rafforzando ulteriormente gli indubbi vantaggi di Terraform.
Vantaggi della terraformazione
Oltre ai vantaggi sopra menzionati, ci sono due vantaggi principali di Terraform da tenere a mente:
- Super portabilità : hai uno strumento e un linguaggio per descrivere l'infrastruttura per Google Cloud, AWS, OpenStack e QUALSIASI altro cloud. Cambiare fornitore non è più un mal di testa.
- Facilità di distribuzione full-stack : puoi avere istanze Amazon che eseguono contenitori Kubernetes con i tuoi carichi di lavoro e gestire l'intero sistema da un unico strumento.
Consideriamo Terraform uno dei migliori strumenti di orchestrazione della configurazione oggi disponibili. Potrebbe non essere ancora così popolare come gli altri strumenti, ma crediamo fermamente che susciterà un enorme successo negli anni a venire. Riteniamo che i creatori di Vagrant e Consul abbiano ancora una volta dimostrato la loro competenza e realizzato un ottimo prodotto.
Conclusioni
Essendo open source, Terraform ha riunito una comunità forte e appassionata di sviluppatori che ne guidano l'evoluzione sempre più avanti. Crediamo che questo strumento sia eccezionale e diventerà solo migliore e molto più popolare con il tempo. Non sarà la rovina di Chef, Ansible o Puppet, semplicemente prenderà il posto che gli spetta nel toolkit DevOps.