Indeciso tra AWS CloudFormation e Terraform? Questo articolo ti guiderà nella scelta più adatta alle tue necessità.
Il Cloud Computing ha impresso una svolta decisiva nel mondo DevOps, diventando una componente essenziale per lo sviluppo e la gestione delle applicazioni. Nonostante i numerosi vantaggi nell’adozione del cloud per aziende di ogni dimensione, permane una sfida: la necessità di configurare manualmente l’infrastruttura.
Ciò comporta l’accesso alle console dei provider di servizi cloud e la specifica dettagliata delle risorse desiderate. Questa procedura, efficace per progetti di piccola scala, può diventare problematica quando più persone intervengono sulla configurazione, generando un’infrastruttura complessa e difficile da gestire, senza un metodo collaborativo e tracciabile delle modifiche. Fortunatamente, esiste una soluzione: l’Infrastruttura come Codice (IaC).
L’Infrastruttura come Codice, un concetto sempre più rilevante nel cloud computing, permette di gestire l’infrastruttura IT attraverso codice. Invece di agire manualmente tramite console, l’IaC consente di definire file di configurazione per il provisioning dell’infrastruttura cloud. Questo approccio garantisce coerenza, semplifica la manutenzione e minimizza il rischio di errori umani.
Implementazione dell’IaC con Amazon Web Services
AWS, leader nel settore dei servizi cloud, offre oltre 200 servizi per una vasta gamma di esigenze. Quando si integra l’IaC con AWS, la scelta spesso si riduce a AWS CloudFormation e allo strumento open source Terraform. Per orientarsi tra le molteplici funzionalità di questi strumenti, analizzeremo le loro differenze, facilitando la decisione su quale sia più adatto al proprio contesto.
Terraform e AWS CloudFormation: Confronto
Modularità
La modularità è un aspetto critico quando si utilizza l’IaC in grandi organizzazioni, influenzando la scelta dello strumento.
CloudFormation
CloudFormation non supporta nativamente i moduli, ma permette di utilizzare gli stack annidati a tale scopo.
Ad esempio, per standardizzare la creazione di bucket S3, si può creare un modello CloudFormation che definisce la configurazione desiderata. Successivamente, gli utenti possono utilizzare questo modello come stack annidato per creare bucket S3 conformi.
Inoltre, il Catalogo Servizi AWS, un servizio meno noto, supporta la modularità di AWS CloudFormation. Il Catalogo Servizi è pensato per limitare l’ambito dei servizi AWS, garantendo conformità, sicurezza, controllo dei costi e prestazioni. Questo servizio utilizza i modelli CloudFormation.
Per semplificare, consideriamo l’esempio dei bucket S3. Una configurazione errata può compromettere i dati sensibili. La prima soluzione è utilizzare un modello di stack annidato all’interno di altri stack CloudFormation, ma in alternativa è possibile usare il Catalogo Servizi AWS. Quest’ultimo permette agli utenti di utilizzare il modello standard tramite interfaccia utente, personalizzando alcuni parametri, garantendo il controllo sul provisioning e prevenendo scenari indesiderati.
Terraform
Terraform offre un supporto nativo per i moduli, consentendo la creazione di configurazioni standardizzate riutilizzabili in altre configurazioni.
Essendo uno strumento open source, Terraform mette a disposizione un registro di moduli predefiniti, oltre alla possibilità di creare moduli personalizzati e ospitarli su un registro privato.
Personalmente, preferisco Terraform a CloudFormation quando la modularità è una priorità.
L’uso di stack annidati in CloudFormation è meno agevole rispetto ai moduli di Terraform, principalmente a causa della complessità nel passaggio di dati tra modelli. Inoltre, non esiste un repository standard per la condivisione dei modelli CloudFormation. Il Catalogo Servizi AWS è un metodo per applicare regole tramite console, ma l’obiettivo è lavorare con il codice. Il Catalogo Servizi, sebbene incapsuli attività complesse, richiede comunque un’azione manuale tramite interfaccia per specificare i parametri.
Terraform, al contrario, offre un metodo consolidato per creare, gestire e condividere moduli, consultabili nel registro dei moduli Terraform, facilmente integrabili nei file di configurazione.
Controllo e Governance sull’Infrastruttura
Sia AWS CloudFormation che Terraform offrono strumenti per limitare le risorse che i dipendenti possono creare negli account AWS.
CloudFormation non fornisce direttamente il controllo sull’uso dei modelli. Tuttavia, le policy IAM consentono di limitare l’utilizzo ai soli modelli CloudFormation standard. Ad esempio, si possono negare tutte le autorizzazioni di creazione S3, consentendo la creazione di bucket S3 esclusivamente tramite Catalogo Servizi AWS o stack annidati.
Terraform, invece, consente di controllare le risorse tramite policy Sentinel. Sentinel permette di applicare policy dettagliate basate sulla logica, autorizzando o negando le azioni tramite Terraform. Per esempio, è possibile negare la creazione diretta di bucket S3, consentendola solo tramite un modulo standard.
Gestione dello Stato
Sia AWS CloudFormation che Terraform devono tenere traccia delle risorse gestite.
Terraform memorizza lo stato dell’infrastruttura in un file, localmente o su backend remoti come S3, permettendo a più utenti di collaborare sullo stesso set di infrastruttura.
CloudFormation non espone un file di stato, essendo un servizio gestito che si occupa internamente di questa attività.
Entrambi gli strumenti permettono di visualizzare le modifiche all’infrastruttura. In Terraform, il comando “terraform plan” mostra le modifiche previste, mentre in CloudFormation questa informazione è disponibile tramite i change set.
Linguaggio
Terraform utilizza HashiCorp Configuration Language (HCL), un linguaggio simile a JSON ma con funzionalità aggiuntive.
I modelli CloudFormation sono scritti in formato YAML o JSON.
Log e Rollback
Sia AWS CloudFormation che Terraform offrono capacità di logging efficaci, rendendo la risoluzione di errori e problemi relativamente semplice.
CloudFormation: effettua automaticamente il rollback delle modifiche in caso di fallimento. Questa funzionalità può essere disabilitata per attività di debugging.
Terraform: non esegue automaticamente il rollback in caso di errore. Tuttavia, è possibile utilizzare il comando “terraform destroy” per eliminare la configurazione parziale e riavviare l’esecuzione.
Ambito
Terraform non è limitato al cloud AWS, supportando altri provider e servizi cloud, a differenza di CloudFormation che si limita ad AWS.
Se l’obiettivo è utilizzare l’IaC su più piattaforme, Terraform è la scelta preferibile, permettendo la configurazione dell’infrastruttura e la distribuzione delle applicazioni su più cloud, aumentando la disponibilità e la robustezza dell’applicazione.
Supporto Funzionalità
Generalmente, i nuovi servizi e funzionalità di AWS vengono implementati prima in CloudFormation che in Terraform. Tuttavia, entrambi gli strumenti coprono la maggior parte dei servizi AWS. Se si utilizza Terraform, è possibile creare uno stack CloudFormation nel codice Terraform per sopperire alla mancanza di supporto di una funzionalità.
Supporto Tecnico
Il piano di supporto a pagamento AWS copre anche il supporto di CloudFormation.
HashiCorp offre piani di supporto a pagamento per Terraform.
Conclusione
AWS CloudFormation e Terraform sono strumenti potenti e completi. Le differenze descritte aiutano a scegliere lo strumento più adatto alle proprie esigenze. Personalmente, se si prevede di utilizzare più piattaforme cloud o se si utilizzano già più cloud, Terraform è la soluzione ideale. Se l’obiettivo è l’IaC solo per AWS, sia AWS CloudFormation che Terraform sono validi candidati.
Se si è interessati ad apprendere Terraform, si consiglia di consultare i corsi online disponibili.