Alegerea între AWS CloudFormation și Terraform poate fi dificilă. Acest articol oferă informațiile necesare pentru o decizie bine fundamentată.
Cloud Computing a transformat radical modul în care echipele DevOps lucrează. Nu mai este un simplu trend, ci o realitate care redefinește dezvoltarea și întreținerea aplicațiilor. Deși beneficiile adoptării cloud computing-ului sunt numeroase pentru toate tipurile de afaceri, există un aspect care poate fi problematic: furnizarea manuală a infrastructurii.
În mod tradițional, trebuie să accesați consolele furnizorilor de cloud și să specificați exact ce resurse doriți. Această metodă funcționează bine pentru proiecte mici, dar devine complicată atunci când mai multe persoane modifică configurațiile în consolă. Rezultatul poate fi o infrastructură complexă, dificil de întreținut, fără un mod eficient de colaborare sau de monitorizare a modificărilor. Soluția? Infrastructura ca cod (IaC).
Infrastructura ca cod este un concept popular în cloud computing, ce presupune gestionarea infrastructurii IT prin intermediul codului. În loc să configurați manual resursele prin consolă, IaC vă permite să utilizați fișiere de configurare pentru a defini și a implementa infrastructura cloud. Acest lucru oferă avantaje semnificative, cum ar fi consistența, întreținerea simplificată și eliminarea erorilor umane.
Utilizarea IaC cu Amazon Web Services
AWS este liderul pieței de servicii cloud, având o cotă de piață considerabil mai mare decât următorul concurent. Cu peste 200 de servicii, AWS poate acoperi o gamă largă de nevoi.
Când începeți să implementați IaC cu AWS, veți ajunge, de obicei, să evaluați AWS CloudFormation și instrumentul open-source Terraform. Alegerea între cele două poate fi dificilă, având în vedere multitudinea de funcții pe care le oferă. În acest articol, vom analiza diferențele dintre AWS CloudFormation și Terraform pentru a vă ajuta să determinați care dintre ele este cel mai potrivit pentru cerințele dumneavoastră.
Terraform vs. AWS CloudFormation: Comparație
Modularitatea
În organizațiile mari, modularitatea este un criteriu important în alegerea instrumentului IaC potrivit.
CloudFormation
CloudFormation nu oferă suport nativ pentru module. În schimb, folosește stive imbricate.
De exemplu, puteți defini o configurație standard pentru crearea unui bucket S3. Apoi, când un utilizator dorește să creeze un bucket S3, poate folosi acest șablon CloudFormation ca stivă imbricată.
Un alt serviciu AWS, mai puțin cunoscut, Catalogul de servicii AWS, poate ajuta cu modularitatea CloudFormation. Acesta este un serviciu conceput special pentru organizațiile care doresc să limiteze modul în care sunt utilizate serviciile AWS pentru a respecta cerințele de conformitate, securitate, cost sau performanță. Catalogul de servicii utilizează, de fapt, șabloane CloudFormation în culise.
Să clarificăm acest lucru cu un exemplu. Buckets S3, dacă nu sunt gestionate corespunzător, pot pune în pericol datele sensibile. Dacă doriți un mod standard de a utiliza S3 în organizația dvs., puteți crea un șablon de stivă imbricată, ce poate fi folosit în alte stive CloudFormation.
Dacă nu doriți ca utilizatorii să folosească acest șablon ca stivă imbricată, puteți folosi Catalogul de servicii AWS. Acesta permite utilizatorilor să utilizeze șablonul standard din interfața consolei, specificând parametrii pentru personalizare ușoară. Astfel, puteți controla modul în care este implementată infrastructura în conturile AWS și puteți preveni scenariile nedorite.
Terraform
Terraform oferă suport nativ pentru module. Puteți crea configurații standard, similar cu CloudFormation, și le puteți reutiliza în alte configurații Terraform.
Fiind un instrument open-source, puteți găsi module prefabricate în Registrul Terraform. De asemenea, vă puteți crea propriile module și le puteți găzdui într-un registru privat.
Personal, aș alege Terraform în defavoarea CloudFormation dacă modularitatea ar fi o cerință importantă.
Utilizarea stivelor imbricate în CloudFormation nu este la fel de simplă ca utilizarea modulelor în Terraform. Trecerea datelor de la un șablon CFN la stiva imbricată poate fi complicată.
Nu există un loc centralizat pentru partajarea șabloanelor CloudFormation. Deși există Catalogul de servicii AWS, acesta este doar o metodă de a impune reguli pentru crearea infrastructurii prin consolă. Când utilizați Catalogul de servicii, deși unele sarcini complexe sunt ascunse în spatele fișierelor CloudFormation, tot trebuie să specificați manual parametrii prin consolă pentru a crea infrastructura.
Terraform, pe de altă parte, oferă o metodă clară de creare, întreținere și partajare a modulelor. Cerințele exacte ale modulelor sunt afișate în Registrul de module Terraform și pot fi utilizate cu ușurință în fișierele Terraform.
Controlul și guvernanța infrastructurii
Atât CloudFormation, cât și Terraform vă oferă mijloace de a limita resursele pe care utilizatorii le pot crea în conturile AWS.
CloudFormation, în sine, nu oferă un control direct asupra utilizării șabloanelor. Însă, puteți utiliza politicile AWS IAM pentru a permite utilizatorilor să utilizeze doar șabloanele standard CloudFormation pentru crearea resurselor. În exemplul nostru cu bucket-ul S3, puteți limita permisiunile „S3 Create” și permite crearea bucket-urilor doar prin Catalogul de servicii AWS sau stive imbricate.
Terraform vă permite să controlați resursele create folosind politica Sentinel. Sentinel permite aplicarea unor politici detaliate, bazate pe logică, pentru a permite sau a refuza acțiunile utilizatorilor prin Terraform. Puteți, de exemplu, să refuzați crearea directă a bucket-urilor S3 și să permiteți crearea lor doar dintr-un modul standard.
Managementul Stării
Atât AWS CloudFormation, cât și Terraform trebuie să urmărească resursele pe care le gestionează.
Terraform stochează starea infrastructurii într-un fișier de stare. Acesta este stocat local în mod implicit, dar poate fi stocat și în backend-uri la distanță, precum S3, permițând mai multor utilizatori să facă modificări la aceeași infrastructură.
CloudFormation nu menține un fișier de stare vizibil. Fiind un serviciu gestionat, se ocupă de întreținerea și verificările de stare în fundal.
Ambele instrumente permit verificarea modificărilor planificate asupra infrastructurii. Terraform oferă comanda „terraform plan” pentru a vizualiza modificările. În CloudFormation, utilizatorii pot vizualiza aceste informații prin seturi de modificări.
Limbajul
Terraform folosește limbajul de configurare HashiCorp, HCL, un limbaj similar cu JSON, cu funcții suplimentare.
Șabloanele CloudFormation sunt scrise în formate YAML sau JSON.
Înregistrarea și Rollback-ul
Atât AWS CloudFormation, cât și Terraform oferă capabilități bune de înregistrare. Din experiența mea, identificarea erorilor a fost destul de simplă.
CloudFormation: În mod implicit, CloudFormation anulează toate modificările în cazul unei implementări eșuate. Această funcție utilă poate fi dezactivată în scopuri de depanare.
Terraform: Terraform nu anulează automat modificările în cazul unei erori. Nu este o problemă majoră, deoarece puteți folosi comanda „terraform destroy” pentru a șterge configurația parțial implementată și a relua implementarea.
Domeniul de Aplicare
Terraform nu se limitează doar la AWS Cloud. Acesta este un factor important în alegerea între Terraform și CloudFormation. Terraform acceptă mulți alți furnizori și servicii cloud.
Dacă intenționați să utilizați IaC pe mai multe platforme cloud, Terraform este cea mai bună alegere. CloudFormation este un instrument puternic, dar limitat la AWS. Terraform vă permite să configurați infrastructura și să implementați aplicații pe mai multe platforme cloud, crescând disponibilitatea și robustețea aplicațiilor.
Suport pentru Funcții Noi
De obicei, CloudFormation este actualizat mai rapid decât Terraform odată ce AWS lansează servicii noi. Cu toate acestea, ambele instrumente acoperă majoritatea serviciilor. Dacă Terraform nu are încă suport pentru o anumită funcție, există o soluție.
Puteți crea o stivă CloudFormation în codul Terraform. Astfel, puteți utiliza o stivă CloudFormation în codul Terraform pentru funcțiile care nu sunt suportate nativ.
Suport Tehnic
Planul de suport tehnic plătit AWS include și suport pentru CloudFormation.
HashiCorp oferă planuri plătite pentru suport tehnic pentru Terraform.
Concluzie
Atât AWS CloudFormation, cât și Terraform sunt instrumente performante. Diferențele prezentate vă pot ajuta să alegeți instrumentul potrivit. Dacă intenționați să utilizați mai multe platforme cloud, Terraform este alegerea potrivită. Dacă folosiți IaC doar pentru AWS, ambele instrumente sunt opțiuni bune.
Dacă doriți să învățați Terraform, există o varietate de cursuri online disponibile.