Panoramica
Red Hat® Ansible® Automation Platform e HashiCorp Terraform sono entrambi prodotti di automazione radicati nell'open source che adottano un approccio Infrastructure as Code (IaC) per l'automazione degli ambienti IT.
La valutazione di queste soluzioni per la tua organizzazione non è un semplice confronto, poiché non esiste un solo modo "giusto" per automatizzare o un solo strumento di automazione da utilizzare, così come non esiste un solo modo per risolvere un problema. Le esigenze della tua azienda sono completamente diverse da quelle di un'altra organizzazione che opera nel tuo stesso settore.
Termini di automazione da conoscere
Durante la ricerca di soluzioni di automazione, hai senza dubbio visto molti termini utilizzati per descrivere le differenze principali e la funzionalità dei prodotti. Definiamo alcuni di quelli più comuni ed esploriamo il modo in cui sono correlati tra loro, così come tra Ansible e Terraform.
L'orchestrazione è l'esecuzione coordinata di più flussi di lavoro. Ogni flusso di lavoro esegue una o più attività. Insieme, questi flussi di lavoro automatizzano la configurazione e la gestione di sistemi, applicazioni e servizi complessi. Questo coordinamento in genere si basa su regole prestabilite definite in una policy. Inoltre, l'orchestrazione è in grado di coordinare più soluzioni di automazione. Queste, a loro volta, eseguono i flussi di lavoro dell'automazione.
Sia Ansible che Terraform possono fungere da agenti di orchestrazione, poiché possono invocare più flussi di lavoro di automazione in sequenza, secondo criteri specifici. In Ansible sono disponibili moduli integrati per la connessione e la gestione di altri strumenti di automazione (incluso Terraform). Di conseguenza, puoi standardizzare il tuo approccio all'automazione in tutto il tuo ambiente IT, usando Ansible come linguaggio principale e comune a tutti i team.
Il provisioning è il processo di creazione e deployment dell'infrastruttura IT per applicazioni e servizi.
Sia Ansible che Terraform possono eseguire il provisioning (e il deprovisioning) dell'infrastruttura IT. Ansible è anche in grado di eseguire il provisioning di app e servizi.
Con gestione della configurazione si intende il processo di definizione e gestione della configurazione di infrastrutture, applicazioni e servizi.
Come molte altre soluzioni di automazione, anche Ansible e Terraform consentono di definire le configurazioni e di applicarle a vari target dell'infrastruttura. Tuttavia, il loro approccio alla gestione della configurazione è diverso. Terraform utilizza un approccio noto come programmazione dichiarativa, che tenta di preservare la configurazione di un'infrastruttura IT definendo uno stato desiderato. Ansible utilizza un approccio di programmazione procedurale (o imperativo), che tenta di preservare la configurazione di un'infrastruttura IT definendo i passaggi per raggiungere lo stato desiderato. Ogni processo è descritto in dettaglio di seguito.
Un approccio Infrastructure as Code (IaC) definisce e predispone il provisioning dell'infrastruttura mediante un codice che verrà eseguito automaticamente anziché tramite processi manuali. Considerando un'infrastruttura IT come codice, le organizzazioni possono automatizzare le attività di gestione, sfruttando le best practice di sviluppo software e riducendo gli errori umani.
Sia Ansible che Terraform sono strumenti IaC, anche se, come accennato, la programmazione utilizzata da ciascuna soluzione è diversa.
La programmazione dichiarativa è un metodo con cui scrivere codice per descrivere il risultato desiderato di un programma, senza specificare come raggiungerlo. È incentrata sullo stato finale, anziché sui comandi e sui passaggi specifici necessari per raggiungerlo.
Terraform utilizza l'Hashicorp Configuration Language (HCL) come linguaggio di automazione e approccio alla programmazione dichiarativo. Di conseguenza, la sequenza di comandi che Terraform deve eseguire per apportare le modifiche richieste alla configurazione non è visibile o nota all'utente finale.
La programmazione procedurale, o imperativa, è un metodo per scrivere codice al fine di fornire al computer un elenco di istruzioni dettagliate per completare un'attività. È incentrata sul processo e non sullo stato finale. Per il linguaggio di automazione, Ansible utilizza YAML, un linguaggio leggibile per la serializzazione dei dati. La sintassi YAML viene interpretata ed eseguita in modo procedurale, ciò significa che il flusso di lavoro di automazione viene eseguito nella sequenza in cui è stato scritto.
Ansible può essere sia dichiarativo che procedurale: molti moduli funzionano in modo dichiarativo, mentre altri moduli preferiscono un approccio di programmazione procedurale. Inoltre, alcuni costrutti nel linguaggio Ansible, come condizionali e loop, consentono agli utenti di definire una logica procedurale. Questo mix ti consente di concentrarti su ciò che devi fare, piuttosto che aderire rigorosamente a un paradigma.
Con immutabilità della configurazione si intende che la configurazione (di un'infrastruttura o di un'applicazione) non può essere modificata. Per eseguire il provisioning della versione più recente di un'app, ad esempio, è necessario eliminare e sostituire la versione precedente, anziché modificarla e aggiornarla. Le risorse vengono distrutte e ricreate automaticamente.
Terraform adotta un approccio immutabile all'infrastruttura, che consente agli utenti di muovere rapidamente i primi passi grazie alla possibilità di utilizzare con facilità le risorse, effettuare test e smantellare. Tuttavia, a seconda delle dimensioni dell'infrastruttura, gestirla può diventare complesso e difficile. Sebbene Ansible sia stato progettato presupponendo la mutabilità della configurazione, alcuni flussi di lavoro dell'automazione possono essere progettati in modo da adottare un approccio immutabile.
Con mutabilità della configurazione si intende che la configurazione (di un'infrastruttura o di un'applicazione) può essere modificata. Ad esempio, è possibile eseguire il provisioning delle versioni più recenti delle applicazioni aggiornando o modificando la risorsa esistente, senza eliminarla o sostituirla.
Ansible è stato progettato presupponendo la mutabilità della configurazione. Il vantaggio di questo approccio è che i flussi di lavoro dell'automazione sono semplici da capire e da risolvere. In alcuni scenari, tuttavia, può essere complesso eseguire il deprovisioning delle risorse senza conoscere la sequenza corretta delle operazioni.
L'errore di configurazione si verifica quando un'infrastruttura cambia a causa di modifiche manuali, non approvate o non monitorate nel tempo, e tali modifiche non vengono registrate o tracciate sistematicamente. Spesso i cambiamenti sono dovuti a situazioni di emergenza o a un'eccessiva complessità, fattori che possono dissuadere i dipendenti dal seguire il processo stabilito. Di conseguenza, gli errori di configurazione sono frequenti nelle organizzazioni di grandi dimensioni.
Un approccio IaC aiuta a eliminare gli errori, ma è fondamentale un'ulteriore gestione degli errori. Ansible ti aiuta a contrastare gli errori con i playbook (flussi di lavoro di automazione) di Ansible che possono essere impostati per rilevare gli errori. Quando viene rilevata un errore, invia una notifica alla persona appropriata che può apportare le modifiche necessarie e riportare il sistema allo stato di riferimento.
L'approccio di programmazione procedurale adottato da Ansible consente agli sviluppatori di comprendere più facilmente quando e dove sta cambiando la loro configurazione di automazione, accelerando l'isolamento di una parte specifica della configurazione e la correzione degli errori. A seconda della complessità dell'infrastruttura IT, modificare la configurazione delle soluzioni di automazione che utilizzano un approccio di programmazione dichiarativo (come Terraform) può risultare molto più complesso. Di conseguenza, a volte le organizzazioni IT preferiscono utilizzare Ansible per eseguire semplici modifiche alla configurazione piuttosto che riconfigurare un intero sistema IT in modo olistico con una soluzione come Terraform.
Qual è la migliore soluzione di automazione?
La domanda più appropriata potrebbe essere: "Di cosa ha bisogno la tua azienda per il tuo specifico scenario di utilizzo?" È necessario valutare le sfide e i requisiti specifici della propria azienda e scegliere la soluzione o le soluzioni più adatte. Alcuni problemi sono più adatti a un approccio, mentre altri possono essere risolti meglio con un altro. A volte, una combinazione di soluzioni è la chiave del successo.
Sebbene sia Terraform che Ansible Automation Platform siano le soluzioni di automazione più diffuse e gli strumenti DevOps più amati, le soluzioni presentano capacità molto diverse. Terraform è specializzata nel provisioning di infrastrutture cloud pubbliche, uno dei tanti scenari di utilizzo nel mondo dell'automazione IT, mentre Ansible Automation Platform si occupa di una vasta gamma di scenari di utilizzo dell'automazione. Anziché un approccio unico all'automazione, Ansible Automation Platform offre una serie di approcci per affrontare una serie di problemi. E se i nostri clienti riscontrano un problema particolare, che può essere risolto al meglio con la combinazione di due soluzioni di automazione, Ansible Automation Platform è in grado di integrarsi con altri prodotti dei principali provider cloud, come Amazon Web Services (AWS) CloudFormation, Microsoft Azure Resource Manager e Google Cloud Platform (GCP) Cloud Deployment Manager, oltre a Helm e Terraform.
Molti dei nostri clienti utilizzano più soluzioni di automazione contemporaneamente. Durante il deployment delle applicazioni nel cloud, ad esempio, spesso eseguono il provisioning dell'infrastruttura cloud con CloudFormation o Terraform, quindi eseguono la configurazione delle applicazioni e dei processi con Ansible Automation Platform.
Altri clienti investono esclusivamente in Ansible Automation Platform perché non desiderano automatizzare solo gli scenari di utilizzo del deployment cloud. Ad esempio, potrebbero voler automatizzare i processi di sicurezza, come l'indagine sulle minacce o la risposta agli incidenti, e i processi di rete, come la riconfigurazione di router e switch.
Questi clienti desiderano standardizzare il proprio approccio all'automazione in tutti gli scenari di utilizzo, al fine di massimizzare il ritorno sull'investimento.
Terraform e Ansible: è davvero una competizione?
Con la gamma di prodotti disponibili per l'automazione di livello enterprise, è fondamentale comprendere le caratteristiche, le capacità e, soprattutto, capire qual è la soluzione più adatta alle esigenze specifiche della tua organizzazione.
Red Hat Ansible Automation Platform, basata sull'open source, è un prodotto in sottoscrizione potenziato e testato che offre alle organizzazioni un supporto completo per il ciclo di vita. È sviluppato sulle fondamenta della community Ansible, che si avvale dell'esperienza e dell'intelligenza di migliaia di collaboratori in tutto il mondo. Ansible Automation Platform è stata progettata per aiutare le organizzazioni a creare, gestire e rendere scalabili i carichi di lavoro dell'automazione. Offre una base flessibile, stabile e orientata alla sicurezza per il deployment di soluzioni di automazione end-to-end, compresa l'automazione per cloud ibrido, edge location, reti, sicurezza, infrastruttura e molti altri scenari di utilizzo.
Terraform è uno strumento eccellente per il provisioning e il deprovisioning di un'infrastruttura cloud con un approccio IaC. È uno strumento specifico con uno scopo preciso. Ansible offre una soluzione di automazione universale e multidominio. Entrambe le soluzioni hanno community open source attive e prodotti commerciali downstream ben supportati. Entrambe le soluzioni hanno i loro propri punti di forza e, se combinate, si integrano al meglio e migliorano l'efficienza di molte aziende. In parole povere, la scelta di una soluzione di automazione non è sempre basata sull'esclusione di un prodotto, ma spesso sulla coesistenza di più prodotti.