AWS CDK i Terraform – niste sigurni koji alat odabrati? Ovaj članak će vam pomoći da donesete informisanu odluku.
Računarstvo u oblaku je iz temelja promenilo svet informacione tehnologije. Od načina na koji implementiramo i održavamo aplikacije do razvojnih praksi, računarstvo u oblaku ima značajan uticaj na sve aspekte. Sve nove aplikacije razvijaju se da budu izvorno u oblaku i kompatibilne sa uslugama u oblaku.
Računarstvo u oblaku omogućava nam da razvijemo veoma dostupne, skalabilne i efikasne arhitekture, što dovodi do sve veće potražnje za uslugama u oblaku. Sa ovim procvatom računarstva u oblaku, javlja se i potreba za održavanjem infrastrukture putem koda. Ručno upravljanje resursima u oblaku preko konzole može biti komplikovan zadatak koji je teško pratiti.
Infrastruktura kao kod, ili IaC (Infrastructure as Code), rešava ovaj problem. Korišćenjem IaC-a, možemo definisati naše resurse kao kod i koristiti ga za implementaciju usluga u oblaku. Korišćenje infrastrukture kao koda omogućava većem broju programera da sarađuju na infrastrukturi i da prate promene koje su programeri napravili.
Infrastruktura kao kod u AWS-u
AWS je najveći i najčešće korišćeni provajder usluga u oblaku na globalnom nivou. On ima sopstveni IaC alat, AWS CloudFormation ili AWS CDK, a takođe omogućava korišćenje IaC alata trećih strana, kao što je Terraform, za implementaciju resursa. Kada birate IaC alate za AWS, Terraform, alat treće strane, predstavlja jaku konkurenciju alatima kojima upravlja AWS, odnosno AWS CloudFormation i AWS CDK.
Sa toliko izbora i funkcionalnosti koje svaki od ovih alata pruža, izbor pravog IaC alata može biti izazovan. U ovom članku ćemo razmotriti razliku između AWS CDK-a i Terraform-a. AWS CDK interno koristi CloudFormation, tako da za dublje razumevanje odnosa CloudFormation-a i Terraform-a, pogledajte naš članak „Razumevanje IaC alata: CloudFormation vs. Terraform“.
Terraform
Terraform je alat otvorenog koda za infrastrukturu kao kod, koji je prvobitno razvio HashiCorp. To je vrlo precizan i pouzdan alat koji podržava ne samo AWS, već i druge provajdere usluga u oblaku. Terraform podržava sve AWS usluge, a razvojna zajednica brzo prihvata svaku novu funkciju koju AWS doda svojim uslugama. Omogućava nam da pišemo kod na jeziku koji je razvio HashiCorp (HCL). HCL je jezik sličan JSON-u, koji služi za definisanje infrastrukturnih resursa.
AWS CDK
AWS CDK je omotač oko AWS CloudFormation-a. Da biste razumeli kako AWS CDK funkcioniše, trebali biste imati osnovno znanje o AWS CloudFormation-u. AWS CloudFormation je alat kojim upravlja AWS, a koji nam omogućava da definišemo AWS infrastrukturu u YAML ili JSON formatu. Iako su JSON i YAML lako čitljivi, oni nisu pravi programski jezici. Ne postoji izvorna podrška za petlje i funkcije, što otežava održavanje velikih infrastrukturnih projekata. Tu na scenu stupa AWS CDK.
AWS CDK je omotač oko AWS CloudFormation-a, koji vam omogućava da koristite poznate programske jezike, kao što su Java ili Python, za implementaciju vaše infrastrukture. Ovo značajno olakšava pisanje i održavanje koda.
Terraform naspram AWS CDK: Razlike
#1. Jezik i jednostavnost upotrebe
Jezik i lakoća korišćenja su od vitalnog značaja za razumevanje razlike između AWS CDK-a i Terraform-a.
Prvo da razmotrimo Terraform. Terraform koristi jezik sličan JSON-u za definisanje resursa i drugih podataka, HCL ili HashiCorp Configuration Language. Prilično je jednostavan, a dokumentacija je lako razumljiva i prati se, čak i za početnike.
Pogledajmo kod za kreiranje S3 kante (bucket-a).
resource "aws_s3_bucket" "my_s3_bucket" { bucket = "my-tf-bucket" tags = { Name = "My bucket" Environment = "Dev" } }
Kod je prilično jednostavan za čitanje, a ostale parametre koje ovaj resurs podržava možete videti u Terraform dokumentaciji.
Kao što je ranije pomenuto, AWS CDK je omotač oko CloudFormation-a koji nam omogućava da definišemo naše resurse u programskim jezicima. Pogledajmo AWS CDK kod za kreiranje S3 kante.
import * as cdk from '@aws-cdk/core'; import * as s3 from '@aws-cdk/aws-s3'; export class BucketStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, 'MyFirstBucket', { bucketName: 'my-first-bucket', }); } }
Terraform kod može izgledati malo urednije od CDK-a, ali su oba, i Terraform i CDK, prilično jednostavni za korišćenje. Ako planirate da koristite IaC za manji projekat, i Terraform i CDK su odlične opcije u pogledu jezika i lakoće korišćenja.
Međutim, kada birate pravi IaC alat za veliki projekat sa mnogo programera, Terraform ima nedostatak. Koliko god da je Terraform jednostavan, to je novi jezik i moraćete da obučite svoje programere u potpuno novom jeziku koji nije sličan drugim programskim jezicima koji se koriste. Što je još važnije, manipulacija podacima u Terraform-u nije tako jednostavna kao u drugim programskim jezicima. Na primer, ponavljanje kroz liste i objekte i transformisanje vrednosti nije tako jednostavno, posebno za početnike.
Lično, više bih voleo AWS CDK u odnosu na Terraform, ako uzmem u obzir jednostavnost korišćenja. Kada sam koristio Terraform, bilo je situacija kada sam morao da koristim zaobilazna rešenja ili komplikovane skripte da bih dobio željene rezultate. Kontrola koju imamo nad podacima i mogućnost lakog manipulisanja podacima u AWS CDK jezicima je velika prednost za AWS CDK.
#2. Obim
Terraform je IaC alat za više oblaka, što znači da ga ne možete koristiti samo sa AWS-om, već i sa drugim provajderima usluga u oblaku, kao što su Azure ili GCP. Terraform je odličan alat za kreiranje implementacije u više oblaka i za bilo koji broj provajdera usluga u oblaku za vašu aplikaciju.
Bilo je situacija kada su široko korišćene globalne platforme pale zbog problema sa uslugama provajdera u oblaku. U današnje vreme, pametno je imati više od jednog provajdera usluga u oblaku za svoje aplikacije.
AWS CDK je AWS-ova ponuda za IaC. Koliko god da je CDK moćan i pouzdan, ograničen je samo na AWS Cloud.
Kada se uzme u obzir obim IaC alata, Terraform je očigledan pobednik od ta dva. Ima puno smisla da vaši programeri koriste jedan alat za sve platforme u oblaku.
#3. Performanse
Performanse obično nisu najvažniji kriterijum pri izboru pravog IaC alata, ali mogu biti važne u velikim projektima. Terraform raspoređuje resurse koristeći AWS SDK, dok se CDK kod prvo konvertuje u CloudFormation šablone, a zatim implementira.
Terraform bi radio nešto brže od AWS CDK-a, posebno zbog vremena potrebnog CDK-u da konvertuje kod u CloudFormation Template.
#4. Modularnost
I Terraform i AWS CDK se mogu koristiti za kreiranje modula. Terraform ima izvornu podršku za module. Možete kreirati sopstvene module i hostovati ih u privatnom registru modula za upotrebu u vašoj organizaciji. Terraform takođe ima registar javnih modula za hostovanje i korišćenje javnih modula.
U AWS CDK-u možete kreirati funkcije, klase za višekratnu upotrebu i deliti ovaj kod u okviru vaše organizacije da biste postigli isti rezultat. Ovo je veliki plus u AWS CDK kao drugom AWS IaC alatu – CloudFormation vam ne dozvoljava da kreirate i ponovo koristite kod kao module. Možete koristiti ugnježđene stekove u CloudFormation-u da biste postigli ovaj zahtev, ali korišćenje AWS CDK-a je mnogo pogodnija alternativa.
Sve u svemu, oba alata su slična u ovom aspektu.
#5. Kontrola i upravljanje
Na kraju, sav pristup AWS konzoli kontroliše IAM, usluga upravljanja identitetima iz AWS-a. IAM smernice možete koristiti i sa AWS CDK i sa Terraform-om da biste dozvolili i odbili određene radnje. IAM vam omogućava da imate detaljnu kontrolu nad radnjama koje se mogu preduzeti na vašem nalogu.
Pored korišćenja IAM-a za kontrolu pristupa resursima naloga, Terraform nudi politiku kao okvir koda, Sentinel. Sentinel vam omogućava da pišete detaljne smernice za ispravnu kontrolu radnji korisnika preko Terraform-a.
Zaključak
Pošto AWS CDK interno koristi CloudFormation, predlažem da pročitate članak o CloudFormation-u i Terraform-u, kako biste bolje razumeli razlike između AWS CDK-a i Terraform-a.
Sve u svemu, i AWS CDK i Terraform su pouzdani i moćni alati. Terraform ima mali nedostatak kada je u pitanju manipulacija podacima. Međutim, prema mom iskustvu, kada se bolje naviknete na pisanje Terraform-a, korišćenje zaobilaznih rešenja i izvođenje transformacija podataka postaje lakše. Za operacije sa više oblaka, Terraform je očigledan izbor; međutim, ako želite da koristite AWS kao svog provajdera usluga u oblaku, AWS CDK je odlična alternativa.