Cloudformation/Serverless vs Terraform in AWS
Vorrei capire la necessità di strumenti come Terraform. Quando disponiamo di un modello Cloudformation disponibile e si possono creare/aggiornare tutti i servizi AWS con quello, qual è il punto nell'usare un servizio come Terraform. Si prega di suggerire.
Risposte
CloudFormation (CFN) e Terraform (CF) sono entrambi strumenti di sviluppo Infrastructure as Code (IaC).
Tuttavia, CFN è solo per AWS . Non puoi usarlo con Azure, GCP o qualsiasi altra cosa al di fuori dell'ecosistema AWS. Al contrario, TF è indipendente dal cloud . Puoi utilizzarlo non solo su più provider cloud, ma anche per lavorare con prodotti non cloud, come docker, vari database e persino pizza domino, se lo desideri.
Quindi il vantaggio principale di TF è che una volta che lo impari solo una volta , puoi applicarlo a un numero di fornitori di servizi cloud. CFN è utile solo in AWS e, una volta che smetti di utilizzare CFN, devi imparare qualcosa di nuovo per lavorare con altri cloud.
Ci sono anche differenze nel modo in cui funzionano TF e CFN. Entrambi hanno i loro punti di forza e i fine settimana . Per esempio:
quando esegui la distribuzione utilizzando CFN, tutte le risorse sono disponibili per la visualizzazione in una posizione centrale in AWS insieme al codice sorgente del modello. Mentre con TF non esiste un posto del genere. Se accedi alla console AWS, non hai idea di cosa sia stato creato da TF, quale sia stato il codice sorgente utilizzato, ecc.
TF ha loop e strutture dati complesse e condizioni, mentre CFN no.
CFN ha politiche di creazione e politiche di aggiornamento, TF no.
Puoi controllare l'accesso a CFN utilizzando le policy CFN e le policy IAM. Non puoi fare lo stesso con TF poiché "vive" al di fuori di AWS.
Ci sono un paio di motivi per cui potresti scegliere Terraform piuttosto che CloudFormation:
- Vendor Agnostic: potrebbe esserci un punto in futuro in cui è necessario migrare la tua infrastruttura cloud. Ciò potrebbe essere dovuto a diversi motivi (ad es. costi, conformità normativa, ecc.). Con Terraform puoi ancora utilizzare lo stesso strumento per distribuire la nuova infrastruttura. Con un uso intelligente dei moduli Terraform puoi persino lasciare intatte gran parte della tua infrastruttura come repository di codice.
- Supporto per altri strumenti: anche questo si basa un po' sul punto precedente, ma Terraform può distribuire molto di più delle sole risorse AWS. Ad esempio, puoi utilizzare Terraform per orchestrare la distribuzione di una macchina EC2 che viene quindi configurata con Ansible. Oppure puoi utilizzare Terraform per distribuire le applicazioni sul tuo cluster Kubernetes. Sebbene CloudFormation supporti le risorse personalizzate tramite la creazione di Lambda personalizzati, la manutenzione richiede molto lavoro.
- Ecosistema più ampio: a causa della natura Open Source di Terraform, esiste un enorme ecosistema di strumenti che ti aiutano a risolvere tutti i tipi di problemi, come testare l'infrastruttura come codice o costruire in conformità in modo continuo.
- Probabilmente un linguaggio migliore: personalmente penso che Terraform sia un modo più adatto per Infrastructure as Code rispetto a CloudFormation. Terraform ha molta più flessibilità incorporata nel linguaggio (HCL) e il loro sistema di moduli consente una componibilità molto maggiore di quella che si può ottenere in CloudFormation.