AWS CloudFormation e Terraform — non sei sicuro di quale scegliere? Questo articolo ti aiuterà a prendere una decisione intelligente.
Il cloud computing ha rivoluzionato il mondo del DevOps. Non è più solo un termine alla moda; è qui per cambiare il modo in cui sviluppiamo e manteniamo le nostre applicazioni. Anche se ci sono innumerevoli motivi per cui dovresti utilizzare il cloud computing per tutte le dimensioni delle imprese, c’è una leggera limitazione: devi provisionare manualmente la tua infrastruttura.
Devi andare alle console dei tuoi fornitori di cloud e dirgli esattamente cosa vuoi. Questo funziona bene per piccoli casi d’uso, ma cosa succede se hai persone diverse che effettuano modifiche di configurazione nella console? Potresti finire con un’infrastruttura super complicata che diventerà sempre più difficile da mantenere. Non c’è un modo efficiente per collaborare o tenere traccia delle modifiche all’infrastruttura cloud. Bene, c’è l’Infrastructure as a Code.
Infrastructure as a Code (IaC) è un termine di tendenza nel cloud computing. È il processo di gestione della tua IT IaC. Sì, hai capito bene. Invece di andare alla console e fare tutto manualmente, l’IaC ti consente di scrivere file di configurazione per provisionare la tua infrastruttura cloud. L’IaC ci offre vantaggi come coerenza, manutenzione facile e veloce, e nessuno spazio per errori umani.
Utilizzando l’IaC con Amazon Web Services
AWS è il principale servizio di cloud computing al mondo, con oltre il doppio della quota di mercato del successivo fornitore di cloud. Offre oltre 200 servizi che possono soddisfare centinaia e migliaia di casi d’uso.
Quando si inizia a utilizzare IaC con AWS, è comune limitare le scelte a AWS CloudFormation e al tool open-source Terraform. Se desideri scegliere tra i due, comprendere la molteplicità di funzionalità offerte da entrambi gli strumenti può essere travolgente. In questo articolo, esamineremo le differenze tra AWS CloudFormation e Terraform per aiutarti a decidere quale strumento sia più adatto alle tue esigenze.
Terraform vs. AWS CloudFormation: Differenze
Modularità
Nell’utilizzo di IaC in grandi organizzazioni, la modularità può essere un fattore significativo nella scelta del giusto strumento.
CloudFormation
CloudFormation non ha un supporto nativo per i moduli. Invece, consente di utilizzare qualcosa chiamato stack nidificati come moduli.
Ad esempio, è possibile creare un modello standard di CloudFormation per il provisioning di un bucket S3 nella tua organizzazione. Quando gli utenti finali desiderano creare un bucket S3, possono utilizzare questo modello di CloudFormation come stack nidificato per eseguire il provisioning del bucket S3 standard.
Vi è anche un servizio AWS, il Catalogo dei servizi AWS, che può aiutare con la modularità per CloudFormation. Il Catalogo dei servizi AWS è progettato per le organizzazioni che hanno bisogno di limitare l’ambito dei servizi AWS per rispettare requisiti di conformità, sicurezza, costo o prestazioni. Utilizza modelli di CloudFormation sul retro.
Capiremo rapidamente questo con un esempio. Se non utilizzati correttamente, i bucket S3 possono presto diventare catastrofici per i tuoi dati riservati. Prendiamo lo stesso esempio. Vuoi avere un modo standard di utilizzare S3 nella tua organizzazione. La prima opzione è creare il modello di stack nidificato, che può essere utilizzato all’interno di altri stack di CloudFormation ed è altrettanto buono.
In alternativa, è possibile utilizzare il Catalogo dei servizi AWS, che consente agli utenti di utilizzare questo modello standard dall’interfaccia utente della console e specificare alcuni parametri per leggere personalizzazioni. Questo ti permetterà di controllare come viene eseguito il provisioning dell’infrastruttura nei tuoi account AWS e prevenire eventuali scenari indesiderati.
L’uso degli stack nidificati di CloudFormation e del Catalogo dei servizi AWS può anche supportare configurazioni standard in grandi organizzazioni, anche se potrebbe richiedere più configurazioni manuali.
Terraform
Terraform ha supporto nativo per i moduli. Consente di creare configurazioni standard simili a CloudFormation AWS e utilizzarle in altre configurazioni di Terraform.
Poiché Terraform è uno strumento open-source, puoi anche trovare e utilizzare alcuni moduli open-source già pronti nel Terraform Registry. Puoi anche creare i tuoi moduli con le tue configurazioni e ospitarli in un registro di moduli privato.
Il supporto nativo di Terraform per i moduli offre un approccio semplice alla modularità. Tuttavia, gestire moduli all’interno di un grande team potrebbe richiedere una governance aggiuntiva per garantire un uso corretto.
Utilizzare uno stack nidificato in CloudFormation non è facile come utilizzare moduli in Terraform. Il fattore principale è che passare dati da un modello CFN allo stack nidificato può essere complicato.
CloudFormation non ha un repository centralizzato per la condivisione di modelli. L’AWS Service Catalog ti consente di gestire questo processo, ma applica principalmente regole tramite la console. Anche se i modelli di CloudFormation possono racchiudere compiti complessi, gli utenti devono comunque specificare parametri quando creano risorse.
D’altra parte, Terraform ha un metodo definito per creare, mantenere e condividere moduli. Puoi vedere i requisiti esatti dei moduli nel Terraform Module Registry e usarli facilmente nei tuoi file Terraform.
Controllo e Governance sull’Infrastruttura
Se desideri limitare quali risorse le tue persone possono creare nei tuoi account AWS, AWS CloudFormation e Terraform ti forniscono i mezzi per farlo.
CloudFormation
CloudFormation offre controllo tramite politiche IAM, consentendo di gestire l’accesso degli utenti alle risorse. Tuttavia, questo controllo è specifico di AWS, il che può essere ideale se la tua infrastruttura è completamente incentrata su AWS.
Nel nostro esempio del bucket S3, potresti voler limitare tutti i permessi di “Creazione S3” per gli utenti e consentire loro di creare solo bucket S3 tramite AWS Service Catalog o Nested Stacks.
Terraform
Terraform ti consente di controllare quali risorse i tuoi utenti possono creare utilizzando un tool di policy as code, Sentinel. Sentinel ti permetterà di applicare politiche dettagliate e basate su logica per consentire o negare azioni degli utenti tramite Terraform. Ad esempio, puoi negare tutte le risorse che creano bucket S3 e consentire solo agli utenti di creare bucket S3 da un modulo standard.
Gestione dello stato
AWS CloudFormation e Terraform devono tenere traccia delle risorse che mantengono.
Terraform
Terraform memorizza lo stato della tua infrastruttura in un file di stato. Questo file è memorizzato localmente per impostazione predefinita; tuttavia, puoi memorizzarlo su backend remoti come S3 e permettere a più utenti di apportare modifiche allo stesso insieme di infrastruttura.
CloudFormation
CloudFormation gestisce la manutenzione dello stato internamente in background, quindi gli utenti non devono preoccuparsi di gestire manualmente un file di stato. Questo è vantaggioso per coloro che desiderano un servizio completamente gestito.
Sia AWS CloudFormation che Terraform ti consentono di controllare quali modifiche verranno apportate alla tua infrastruttura. In Terraform, puoi eseguire il comando “terraform plan” per vedere come Terraform prevede di applicare le modifiche alla tua configurazione. In CloudFormation, gli utenti possono visualizzare queste informazioni tramite Change Sets.
Lingua
Terraform
Terraform utilizza l’HashiCorp Configuration Language, HCL, un linguaggio creato da HashiCorp. È molto simile a JSON, con funzionalità e capacità integrate aggiuntive.
CloudFormation
I modelli di 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 chiari (per la maggior parte).
CloudFormation
Per impostazione predefinita, CloudFormation annulla tutte le tue modifiche in caso di un cambiamento di stack non riuscito. Questa è una buona funzionalità, ma può essere disabilitata per scopi di debugging.
Terraform
Terraform non annullerà automaticamente le tue modifiche se fallisce. Questo non è un problema, poiché puoi sempre eseguire il comando Terraform destroy per eliminare la configurazione parzialmente provviste e riavviare un’esecuzione di Terraform.
Ambito
Terraform
Il supporto multi-cloud di Terraform ti consente di distribuire infrastrutture su AWS, Azure, Google Cloud e altre piattaforme e offre flessibilità se stai lavorando in un ambiente multi-cloud.
CloudFormation
CloudFormation è strettamente integrato con AWS, rendendolo una buona opzione per infrastrutture solo AWS ma limitato per configurazioni multi-cloud.
Supporto delle funzionalità
CloudFormation
AWS CloudFormation di solito riceve per primo gli aggiornamenti per nuovi servizi e funzionalità, data la sua stretta integrazione con AWS.
Terraform
In casi in cui Terraform manca di alcune funzionalità AWS, è possibile integrare direttamente stack di CloudFormation nel proprio codice Terraform come soluzione alternativa.
Supporto tecnico
CloudFormation
Anche il piano di supporto tecnico a pagamento di AWS copre il supporto di CloudFormation.
Terraform
HashiCorp ha piani a pagamento per il supporto tecnico su Terraform.
Conclusione
Sia AWS CloudFormation che Terraform sono strumenti robusti e completamente sviluppati, ciascuno con i propri vantaggi. Le differenze sopra possono aiutarti a determinare quale strumento si adatta meglio alle tue esigenze. Se prevedi di utilizzare più piattaforme cloud, Terraform offre supporto multi-cloud, mentre AWS CloudFormation è un’ottima scelta per ambienti specifici AWS. In definitiva, entrambi gli strumenti sono validi e possono gestire efficacemente l’IaC. La scelta giusta dipende dalle tue esigenze, che tu ti stia concentrando solo su AWS o stia lavorando con più fornitori di servizi cloud.
Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform