Comprendere gli strumenti DevOps: Ansible e Terraform

Ansible e Terraform: hai sentito parlare di questi strumenti DevOps? Questo articolo parla di loro e delle loro differenze.

Infrastructure as Code (IaC) è una parte fondamentale del dominio DevOps ed è una competenza fondamentale che gli ingegneri DevOps devono possedere. IaC viene utilizzato per fornire e gestire l’infrastruttura IT utilizzando il codice di configurazione che è file di definizione leggibile dalla macchina. Utilizzando questo approccio di ingegneria del software alle operazioni, è possibile automatizzare l’infrastruttura IT utilizzando script di programmazione.

Quando un ingegnere DevOps pensa all’automazione utilizzando il codice in DevOps, vengono sempre evidenziati due strumenti DevOps, Terraform e Ansible. Entrambi sono strumenti di prim’ordine e ampiamente utilizzati nel dominio DevOps. Ma molte persone sono nuove a questi strumenti e non conoscono le differenze principali tra di loro. In questo articolo parlerò di Terraform, Ansible e delle loro differenze chiave.

Cos’è Terraform?

Terraforma è un’infrastruttura open source come strumento software di codice creato da HashiCorp. Puoi orchestrare un’infrastruttura IT completa utilizzando un linguaggio dichiarativo molto facile da usare in Terraform. In Terraform è necessario dichiarare e configurare le risorse necessarie per l’infrastruttura. Quindi, si prenderà cura di tutte le dipendenze richieste e costruirà l’infrastruttura per te.

Terraform è stato lanciato solo pochi anni fa, nel 2014, ma il tasso di adozione di questo strumento è stato fantastico. Offre funzionalità eccellenti che facilitano l’orchestrazione completa dell’infrastruttura IT poiché la configurazione dell’intera infrastruttura in una grande organizzazione è complessa. Puoi anche integrare questo strumento con tutti i provider cloud più diffusi come AWS, GCP, ecc.

La maggior parte delle organizzazioni IT dispone di ambienti di lavoro diversi per team diversi, quindi i team di sviluppo, gestione temporanea o QA e produzione avranno ambienti separati. Dopo un po’, non è facile gestire l’ambiente di produzione. Per facilitare la gestione, le organizzazioni utilizzano Terraform per codificare tutto nell’ambiente di produzione. Usando terraform, puoi far girare molto rapidamente gli ambienti di sviluppo e di staging, che saranno molto simili all’ambiente di produzione. Questo aiuta a sviluppare e testare l’applicazione in una piattaforma simile alla produzione.

Molte grandi organizzazioni come Starbucks, Slack, Uber, ecc., sfruttano le funzionalità di terraform alla grande.

Ecco alcuni vantaggi di Terraform:

  • Gestisce i servizi utilizzando una semplice GUI.
  • Descrive l’infrastruttura per GCP, AWS, Azure e altri utilizzando un linguaggio semplice (dichiarativo).
  • Supporta il controllo degli accessi basato sui ruoli (RBAC) per la sicurezza.
  • Può essere facilmente fornito con OpenStack, Azure, AWS, GCP utilizzando le loro API
  • Segue un’architettura masterless, quindi non esiste un nodo master per tenere traccia di tutti gli aggiornamenti di configurazione.
  • I team all’interno di un’organizzazione possono collaborare facilmente sull’infrastruttura utilizzando il registro terraform.
  • L’integrazione con piattaforme di integrazione continua come GitLab, Jenkins, Travis per la distribuzione di pipeline DevOps è semplice.

Cos’è Ansible?

Abile è uno strumento di gestione della configurazione nel dominio DevOps utilizzato per automatizzare tutte le attività IT. Ansible è anche uno strumento open source che utilizza linguaggi sia dichiarativi che procedurali per la gestione della configurazione. Questo strumento ha un supporto eccezionale da tutti i più diffusi provider di cloud e automatizza le applicazioni, le reti, l’infrastruttura, la sicurezza, i container, ecc. Riduce significativamente le complessità nei processi DevOps, quindi molti ingegneri DevOps preferiscono utilizzare questo strumento.

Ansible automatizza facilmente l’infrastruttura più complessa utilizzando semplici file di configurazione YAML (leggibili dall’uomo). Utilizza un file di codice scritto in YAML per eseguire la gestione della configurazione; questo file di codice si chiama Ansible Playbook. Ansible è agentless e dispone di un master che esegue il push di tutte le configurazioni necessarie per gestire e aggiornare le applicazioni sui server remoti.

In Ansible, è necessario utilizzare SSH per la connessione ai nodi nell’infrastruttura IT. Una volta che la connessione con il nodo ha esito positivo, Ansible esegue il push delle configurazioni più recenti utilizzando i moduli Ansible per installare, aggiornare o rimuovere l’applicazione. Hai anche opzioni per eseguire comandi ad hoc in Ansible per eseguire piccole attività con velocità.

Ecco alcuni vantaggi e caratteristiche di Ansible:

  • Poiché Ansible è senza agente, non è necessario installare ed eseguire agenti sui nodi per eseguire le attività.
  • Poiché Ansible è stato creato su Python, ha una pletora di librerie da offrire in Python, ed è per questo che è molto intuitivo per gli sviluppatori.
  • Fornisce l’autenticazione sicura tramite SSH.
  • Ansible Tower offre funzionalità di visualizzazione a livello aziendale.
  • Il master invia le ultime configurazioni sui server remoti per eseguire modifiche all’infrastruttura, quindi supporta un modello basato su push.
  • Utilizza file YAML leggibili dall’uomo per la gestione della configurazione, quindi non sono richieste competenze di codifica aggiuntive.

Terraform vs. Ansible: differenze

Orchestrazione vs. Configuration Management

Ansible è uno strumento di gestione della configurazione e Terraform è uno strumento di orchestrazione. Questa è la differenza più fondamentale tra Terraform e Ansible. Sebbene alcune delle caratteristiche siano comuni tra questi strumenti, sono comunque diverse l’una dall’altra.

Ansible viene utilizzato per aggiungere, aggiornare, eliminare e gestire la configurazione dell’infrastruttura IT, mentre Terraform viene utilizzato per dichiarare i componenti dell’infrastruttura e orchestrarli tra più provider cloud.

Procedurale vs dichiarativo

Terraform utilizza un linguaggio di configurazione dichiarativo per dichiarare le risorse dell’infrastruttura IT. Ansible utilizza linguaggi procedurali e dichiarativi per la gestione della configurazione. La modalità procedurale viene utilizzata in Ansible per eseguire comandi ad hoc e raggiungere la configurazione dell’infrastruttura desiderata. I moduli ansible utilizzano un approccio dichiarativo.

Infrastrutture mutevoli e immutabili

È possibile creare un’infrastruttura mutabile utilizzando un’infrastruttura Ansible e immutabile utilizzando Terraform. Ansible gestisce e configura il software dell’infrastruttura sullo stesso server. Quando si inviano più aggiornamenti di configurazione, l’ambiente di produzione diventa complesso e porta a molti bug difficili da identificare e correggere.

Terraform utilizza principalmente una nuova immagine Docker per qualsiasi distribuzione sul server. Terraform crea una nuova immagine Docker per aggiornare qualsiasi software nell’infrastruttura, distribuisce quell’immagine su tutti i server e rimuove la vecchia immagine Docker di configurazione. Quindi, anche dopo più aggiornamenti di configurazione, l’ambiente rimane stabile.

Maestro contro Masterless

Ansible ha un’architettura di macchina master responsabile della memorizzazione dello stato completo dell’infrastruttura e del push dei nuovi aggiornamenti di configurazione sui server remoti. Ecco perché in ansible viene chiamato modello di distribuzione basato su push.

In Terraform non esiste un sistema master separato. Tuttavia, quando funziona con provider cloud come GCP, AWS tramite le API, il server API è la macchina master in quel caso.

Comunità

In confronto, la comunità di Ansible è più forte di Terraform. Ad esempio, Ansible ha 45 branch, 49,7K stelle, 51.836 commit e 21K fork su GitHub, mentre Terraform ha 183 branch, 28,7K stelle, 28.778 commit e 6,9K fork. Attualmente, la comunità di entrambi gli strumenti sta crescendo rapidamente.

Quale scegliere, Ansible o Terraform?

Direi che questo non è un confronto da mela a mela. La risposta a questa domanda dipende dai requisiti aziendali. Puoi utilizzare Ansible per la gestione della configurazione e aggiungere Terraform per orchestrare l’infrastruttura IT. Se la tua organizzazione lavora con fornitori di servizi cloud, lavorare con Terraform sarebbe un’opzione migliore. Entrambi gli strumenti hanno i loro limiti e vantaggi ed entrambi sono strumenti popolari nel dominio DevOps. Quindi, a seconda dell’affermazione del problema che stai cercando di risolvere, puoi scegliere uno degli strumenti.

Ecco una tabella di confronto che riassume le differenze tra Ansible e Terraform.

Criteri
Abile
Terraforma
Fondato su
2012
2014
Sviluppato da
Ansible Inc. / Red Hat Inc.
HashiCorp
Scritto in
Pitone
andare
Tipo
Strumento di gestione della configurazione
Strumento di orchestrazione
Lingua
Utilizza linguaggi procedurali e dichiarativi
Utilizza un linguaggio dichiarativo
Infrastruttura
Supporta l’infrastruttura mutevole
Supporta un’infrastruttura immutabile
Gestione del ciclo di vita
No

Imballaggio e modellazione
Completamente supportato
Parziale
Provisioning e rete di macchine virtuali
Parziale
Completamente supportato

Comunità e supporto

49K+ stelle
28K+ stelle

Conclusione 👩‍💻

Era tutto su Ansible, Terraform e le loro differenze. Entrambi gli strumenti DevOps sono molto utilizzati negli ambienti di produzione e sono spesso presenti nella maggior parte delle organizzazioni più grandi. Allora, cosa stai aspettando? Vai avanti e scegli lo strumento più adatto alle esigenze aziendali della tua organizzazione. Puoi iniziare imparando uno degli strumenti, ma conoscerli entrambi ti dà un vantaggio in un settore diversificato.

Ti potrebbe piacere:

Miglior repository di hosting di pacchetti per i tuoi progetti DevOps.