Comprensione degli strumenti IaC: Cloudformation vs Terraform

AWS CloudFormation e Terraform: non sai quale scegliere? Questo articolo ti aiuterà a prendere una decisione intelligente.

Il Cloud Computing ha rivoluzionato il mondo di DevOps. Non è più solo una parola d’ordine; è qui ed è qui per cambiare il modo in cui sviluppiamo e manteniamo le nostre applicazioni. Sebbene ci siano innumerevoli motivi per cui dovresti utilizzare il cloud computing per tutte le scale di attività, c’è una leggera limitazione, devi eseguire il provisioning dell’infrastruttura manualmente.

Devi andare alle console dei tuoi fornitori di servizi cloud e dire loro esattamente cosa vuoi. Funziona bene per piccoli casi d’uso, ma cosa succede se ci sono persone diverse che apportano modifiche alla configurazione nella console. Potresti ritrovarti con un’infrastruttura super complicata che diventerà sempre più difficile da mantenere. Non esiste un modo efficiente per collaborare o tenere traccia delle modifiche all’infrastruttura nel cloud. Beh, in realtà c’è. Infrastrutture come codice.

Infrastruttura come codice è un termine molto popolare nel cloud computing. È il processo di gestione dell’infrastruttura IT tramite codice. Si è giusto. Invece di andare alla console e fare tutto manualmente; L’infrastruttura come codice, noto anche come IAAC o IAC, ti consente di scrivere file di configurazione, che quindi effettuano il provisioning della tua infrastruttura cloud. IAC ci offre vantaggi come coerenza, manutenzione facile e veloce e nessuna possibilità di errori umani.

Utilizzo di IAC con Amazon Web Services

AWS è il servizio di cloud computing leader nel mondo, con una quota di mercato doppia rispetto al successivo provider di servizi cloud. Esistono oltre 200 servizi su AWS in grado di soddisfare centinaia e migliaia di casi d’uso.

Quando inizi a utilizzare IAC con AWS, spesso restringi le tue scelte al AWS CloudFormation e lo strumento open source, Terraforma. Quando si cerca di fare una scelta tra i due, comprendere la moltitudine di funzionalità offerte da entrambi gli strumenti può essere piuttosto opprimente. In questo articolo, esamineremo le differenze tra AWS CloudFormation e Terraform per aiutarti a decidere quale strumento è più adatto alle tue esigenze.

Terraform e AWS CloudFormation: differenze

Modularità

Quando si utilizza IAC nelle grandi organizzazioni, la modularità può essere un fattore importante per la scelta dello strumento giusto.

CloudFormation

CloudFormation non ha il supporto nativo per i moduli. Ti permette di usare qualcosa chiamato stack nidificati come moduli.

Ad esempio, puoi avere una configurazione standard di come desideri eseguire il provisioning di un bucket S3 nella tua organizzazione. Quindi, crei un modello CloudFormation standard che crea bucket S3. Ora, quando un utente finale desidera creare il bucket S3, può utilizzare questo modello CloudFormation come stack nidificato e creare un bucket S3 standard.

Esiste anche un servizio meno noto di AWS, il Catalogo dei servizi AWS che può aiutarti con la modularità di AWS CloudFormation. Service Catalog è un servizio AWS progettato specificamente per le organizzazioni che desiderano limitare l’ambito dei servizi AWS per soddisfare i requisiti di conformità, sicurezza, costi o prestazioni. E indovina cosa? AWS Service Catalog utilizza i modelli CloudFormation nel back-end.

Cerchiamo di capirlo rapidamente con un esempio. I bucket S3, se non utilizzati correttamente, possono presto essere catastrofici per i tuoi dati riservati. Prendiamo lo stesso esempio, vuoi avere un modo standard di come vuoi usare S3 nella tua organizzazione. La prima opzione consiste nel creare il modello di stack nidificato, che può essere utilizzato all’interno di altri stack CloudFormation ed è ugualmente valido.

Se non desideri che gli utenti debbano utilizzare questo modello standard come stack nidificato, puoi utilizzare AWS Service Catalog. Service Catalog consentirà agli utenti di utilizzare questo modello standard dall’interfaccia utente della console e di specificare alcuni parametri, per lievi personalizzazioni. Ciò ti consentirà di controllare la modalità di provisioning dell’infrastruttura nei tuoi account AWS e di prevenire scenari indesiderati.

Terraforma

Terraform ha il supporto nativo per i moduli. Ti consente di creare configurazioni standard molto simili a AWS CloudFormation e di utilizzarlo in altre configurazioni di terraform.

Poiché Terraform è uno strumento open source, puoi anche trovare e utilizzare alcuni moduli open source predefiniti nel registro Terraform. Puoi anche creare i tuoi moduli con le tue configurazioni e ospitarli su un registro dei moduli privato.

Personalmente, preferirei utilizzare Terraform su CloudFormation se la modularità fosse un grande requisito.

L’utilizzo di uno stack nidificato in CloudFormation non è facile come l’utilizzo dei moduli in Terraform. Il fattore principale è che il passaggio dei dati da un modello CFN allo stack nidificato può essere piuttosto complicato.

Non esiste un luogo standard in cui è possibile condividere i modelli CloudFormation. Hai il catalogo dei servizi AWS, ma questo è solo un modo per applicare alcune regole per la creazione dell’infrastruttura tramite la console. Siamo tutti incentrati sul codice. Quando si utilizza Service Catalog, sebbene alcune attività complicate siano incapsulate dai file CloudFormation, è comunque necessario eseguire l’attività manuale di accedere alla console e specificare i parametri per creare la propria infrastruttura.

Terraform, d’altra parte, ha un metodo prestabilito per creare, mantenere e condividere i moduli. Puoi vedere i requisiti esatti dei moduli nel registro dei moduli Terraform e usarli nei tuoi file terraform molto facilmente.

Controllo e governance sulle Infrastrutture

Se desideri limitare le risorse che i tuoi dipendenti possono creare nei tuoi account AWS: sia AWS CloudFormation che Terraform ti forniscono i mezzi per farlo.

Parliamo prima di CloudFormation. CloudFormation di per sé non offre alcun controllo su come vengono utilizzati i modelli, ma puoi utilizzare le policy AWS IAM solo per consentire agli utenti nel tuo account AWS di utilizzare solo i modelli CloudFormation standard per la creazione di risorse. Nel nostro esempio di bucket S3, potresti voler limitare tutte le autorizzazioni “S3 Create” per gli utenti e consentire loro di creare bucket S3 solo da AWS Service Catalog o Nested Stacks.

Terraform ti consente di controllare quali risorse i tuoi utenti possono creare utilizzando una policy come strumento di codice Sentinella. Sentinel ti consente di applicare policy a grana fine basate sulla logica per consentire o negare le azioni degli utenti tramite Terraform. Ad esempio, puoi negare tutte le risorse che creano bucket S3 e consentire agli utenti di creare bucket S3 solo da un modulo standard.

Gestione dello Stato

Sia AWS CloudFormation che Terraform devono tenere traccia delle risorse che stanno mantenendo.

Terraform memorizza lo stato della tua infrastruttura in un file di stato. Questo file è archiviato localmente per impostazione predefinita, tuttavia puoi archiviarlo su backend remoti come S3 e fare in modo che più utenti apportino modifiche allo stesso set di infrastruttura.

CloudFormation non mantiene un file di stato, almeno non uno che possiamo vedere. CloudFormation è un servizio gestito, quindi esegue tutta la manutenzione dello stato e i controlli in background.

Entrambi, AWS CloudFormation e Terraform hanno un mezzo per te per verificare quali modifiche verranno apportate alla tua infrastruttura. In Terraform, puoi eseguire un comando: “piano terraform” e come Terraform intende applicare le modifiche alla configurazione. In CloudFormation gli utenti possono visualizzare queste informazioni tramite i gruppi di modifiche.

Lingua

Terraform utilizza HashiCorp Configuration Language, HCL, un linguaggio creato da HashiCorp. È molto simile a JSON con funzionalità e capacità integrate aggiuntive.

I modelli CloudFormation sono scritti nei formati YAML o JSON

Registrazione e rollback

Sia AWS CloudFormation che Terraform hanno buone capacità di registrazione. Nella mia esperienza, gli errori e i problemi sono stati semplici (per la maggior parte).

CloudFormation: per impostazione predefinita, CloudFormation esegue il rollback di tutte le modifiche in caso di modifica dello stack non riuscita. Questa è una buona funzionalità e può essere disabilitata per qualsiasi scopo di debug.

Terraform: Terraform non annullerà automaticamente le modifiche in caso di errore. Questo non è un problema in quanto puoi sempre eseguire il comando terraform destroy per eliminare la configurazione fornita a metà e riavviare un’esecuzione di Terraform di nuovo.

Scopo

Terraform non è limitato al cloud AWS. Il fattore più importante nella scelta tra Terraform e CloudFormation è che Terraform supporta altri provider e servizi cloud.

Quindi, se prevedi di utilizzare IAC per più piattaforme cloud, Terraform è la scelta migliore. CloudFormation, sebbene sia uno strumento potente, è limitato solo ad AWS. Utilizzando Terraform puoi configurare l’infrastruttura e distribuire la tua applicazione in più piattaforme cloud, rendendo così la tua applicazione più disponibile e robusta.

Supporto per le funzionalità

Di solito, quando AWS lancia nuovi servizi e funzionalità, CloudFormation verrà aggiornato prima di Terraform, poiché è un servizio AWS. A partire da ora, entrambi gli strumenti coprono la maggior parte dei servizi e delle funzionalità di questi servizi. Questo può essere un leggero inconveniente dell’utilizzo di Terraform, tuttavia abbiamo una soluzione.

C’è anche la possibilità di creare uno stack CloudFormation all’interno del codice Terraform. Quindi, se usi Terraform e non ha una funzione, puoi impostare temporaneamente uno stack CloudFormation all’interno del tuo codice Terraform.

Supporto tecnico

Il piano di supporto tecnico AWS a pagamento copre anche il supporto di CloudFormation.

HashiCorp ha anche pagato piani per il supporto tecnico su Terraform.

Conclusione

Sia AWS CloudFormation che Terraform sono strumenti potenti e completamente sviluppati. Le differenze di cui sopra ti aiuteranno a prendere una decisione informata sulla scelta dello strumento in base alle tue esigenze. Come suggerimento personale, se prevedi di utilizzare più piattaforme cloud in futuro o stai attualmente utilizzando più cloud, dovresti utilizzare Terraform come sportello unico per tutte le tue esigenze. Se stai cercando uno strumento IAC solo per AWS, sia AWS CloudFormation che Terraform sono un gioco leale.

Se sei interessato a imparare Terraform, dai un’occhiata a questi corsi online.