AWS CloudFormation vs. Terraform: Hvilket verktøy bør du velge?

Usikker på om du skal velge AWS CloudFormation eller Terraform? Denne artikkelen gir deg innsikten du trenger for å ta en velbegrunnet avgjørelse.

Skybasert databehandling har omformet DevOps-verdenen. Det er ikke lenger bare et trendord; det er en realitet som endrer måten vi utvikler og drifter applikasjoner på. Selv om det er mange grunner til å omfavne skyen for bedrifter av alle størrelser, finnes det en liten utfordring: behovet for manuell infrastrukturkonfigurasjon.

Du må logge deg inn på skyleverandørens konsoll og spesifisere nøyaktig hva du trenger. Dette fungerer for mindre oppgaver, men hva skjer når ulike personer gjør endringer i konsollen? Du risikerer en kompleks infrastruktur som blir stadig vanskeligere å vedlikeholde. Det finnes ingen effektiv metode for samarbeid eller sporing av endringer i skyinfrastrukturen. Men det er faktisk en løsning: infrastruktur som kode.

Infrastruktur som kode (IaC) er et sentralt begrep innen skybasert databehandling. Det innebærer å håndtere IT-infrastrukturen ved hjelp av kode. Ja, du leste riktig. I stedet for å utføre manuelle konfigurasjoner i konsollen, gir IaC deg muligheten til å skrive konfigurasjonsfiler som automatiserer opprettelsen av din skyinfrastruktur. Fordelene med IaC inkluderer konsistens, enkelt og raskt vedlikehold, og færre menneskelige feil.

Bruk av IaC med Amazon Web Services

AWS er verdens ledende leverandør av skybaserte tjenester, med en markedsandel som er dobbelt så stor som nærmeste konkurrent. AWS tilbyr over 200 tjenester som kan dekke et bredt spekter av bruksområder.

Når du starter med IaC på AWS, vil du ofte velge mellom AWS CloudFormation og det åpne kildekode-verktøyet Terraform. Valget mellom disse to kan være utfordrende, da begge tilbyr mange funksjoner. I denne artikkelen ser vi nærmere på forskjellene mellom AWS CloudFormation og Terraform for å hjelpe deg med å velge det verktøyet som passer best for dine behov.

Terraform kontra AWS CloudFormation: Hovedforskjeller

Modularitet

For store organisasjoner som bruker IaC, er modularitet en viktig faktor ved valg av verktøy.

CloudFormation

CloudFormation har ikke innebygd støtte for moduler, men tilbyr noe som kalles nestede stakker som en erstatning.

For eksempel, du kan ha en standardkonfigurasjon for hvordan S3-bøtter skal settes opp. Da oppretter du en standard CloudFormation-mal for S3-bøtter. Når en bruker ønsker å opprette en S3-bøtte, kan de bruke denne CloudFormation-malen som en nestet stakk for å sikre en standardkonfigurasjon.

En annen mindre kjent AWS-tjeneste er AWS Service Catalog, som kan hjelpe med modularitet i AWS CloudFormation. Service Catalog er utviklet for organisasjoner som ønsker å begrense bruken av AWS-tjenester for å oppfylle krav til samsvar, sikkerhet, kostnader eller ytelse. AWS Service Catalog bruker CloudFormation-maler i backend.

La oss illustrere dette med et eksempel: Hvis S3-bøtter ikke brukes riktig, kan det føre til problemer med konfidensielle data. La oss si at du ønsker en standardmåte å bruke S3 i organisasjonen din på. Det første alternativet er å lage en mal for nestede stakker, som kan brukes i andre CloudFormation-stakker.

Hvis du ikke ønsker at brukerne skal bruke denne malen som en nestet stakk, kan du bruke AWS Service Catalog. Service Catalog lar brukerne bruke malen fra konsollens brukergrensesnitt og spesifisere enkelte parametere for små justeringer. Dette gir deg bedre kontroll over hvordan infrastruktur settes opp i AWS-kontoene dine, og forhindrer uønskede scenarier.

Terraform

Terraform har innebygd støtte for moduler. Du kan lage standardkonfigurasjoner, på samme måte som i AWS CloudFormation, og bruke dem i andre Terraform-konfigurasjoner.

Siden Terraform er et åpen kildekode-verktøy, finnes det også ferdige, åpne kildekode-moduler i Terraform Registry. Du kan også lage dine egne moduler med egne konfigurasjoner og lagre dem i et privat modulregister.

Personlig ville jeg foretrukket Terraform fremfor CloudFormation hvis modularitet var et viktig krav.

Å bruke nestede stakker i CloudFormation er ikke like enkelt som å bruke moduler i Terraform. Det kan være komplisert å overføre data fra en CFN-mal til den nestede stakken.

Det finnes ikke et standardisert sted for deling av CloudFormation-maler. AWS Service Catalog er et alternativ, men det er kun en måte å håndheve regler for opprettelse av infrastruktur via konsollen. Vi foretrekker å jobbe med kode. Selv om Service Catalog innkapsler komplekse oppgaver via CloudFormation-filer, må du manuelt gå inn i konsollen for å spesifisere parametere for å opprette infrastruktur.

Terraform har derimot en etablert metode for å opprette, vedlikeholde og dele moduler. Du kan se detaljerte krav til modulene i Terraform Module Registry og enkelt bruke dem i dine Terraform-filer.

Kontroll og styring av infrastruktur

Hvis du ønsker å begrense hvilke ressurser dine brukere kan opprette i AWS-kontoene dine, tilbyr både AWS CloudFormation og Terraform verktøy for å gjøre dette.

La oss starte med CloudFormation. CloudFormation i seg selv gir ikke kontroll over bruken av malene, men du kan bruke AWS IAM-policyer for å begrense bruken av standard CloudFormation-maler for ressurskonfigurasjon. For å ta S3-bøtte-eksemplet: Du kan forhindre alle «S3 Create»-tillatelser for brukere og kun tillate dem å opprette S3-bøtter via AWS Service Catalog eller nestede stakker.

Med Terraform kan du begrense ressurser brukerne kan opprette ved å bruke et policy-som-kode-verktøy kalt Sentinel. Sentinel gir deg mulighet til å håndheve detaljerte, logikkbaserte policyer for å tillate eller avvise brukerhandlinger via Terraform. Du kan for eksempel nekte opprettelse av alle ressurser som lager S3-bøtter og kun tillate brukere å opprette S3-bøtter fra en standardmodul.

Tilstandsstyring

Både AWS CloudFormation og Terraform må holde oversikt over ressursene de administrerer.

Terraform lagrer tilstanden til infrastrukturen i en tilstandsfil. Som standard lagres denne filen lokalt, men du kan lagre den på eksterne backends, som S3, for å la flere brukere gjøre endringer i samme infrastruktur.

CloudFormation opprettholder ikke en tilstandsfil på samme måte, i alle fall ikke en vi kan se. CloudFormation er en administrert tjeneste, så den utfører all tilstandshåndtering og kontroll i bakgrunnen.

Både AWS CloudFormation og Terraform lar deg sjekke hvilke endringer som skal utføres i infrastrukturen. I Terraform kan du kjøre kommandoen «terraform plan» for å se hvordan Terraform planlegger å bruke endringene dine. I CloudFormation får brukerne samme informasjon via endringssett.

Språk

Terraform bruker HashiCorp Configuration Language, HCL, som er utviklet av HashiCorp. Det ligner på JSON, men har flere innebygde funksjoner og muligheter.

CloudFormation-maler skrives i YAML- eller JSON-formater.

Loggføring og tilbakeføringer

Både AWS CloudFormation og Terraform har gode loggføringsfunksjoner. Min erfaring er at feil og problemer som har oppstått, stort sett har vært enkle å håndtere.

CloudFormation: Som standard vil CloudFormation rulle tilbake alle endringer dersom en stakkendring mislykkes. Dette er en nyttig funksjon som kan deaktiveres i feilsøkingsøyemed.

Terraform: Terraform ruller ikke automatisk tilbake endringer ved feil. Dette er ikke et stort problem, ettersom du alltid kan kjøre kommandoen «terraform destroy» for å fjerne den delvis opprettede konfigurasjonen og starte en ny Terraform-kjøring.

Omfang

Terraform er ikke begrenset til AWS-skyen. Et viktig argument for å velge Terraform over CloudFormation er at Terraform støtter andre skyleverandører og tjenester.

Hvis du planlegger å bruke IaC på flere skyplattformer, er Terraform det beste valget. CloudFormation er et kraftig verktøy, men er begrenset til AWS. Ved å bruke Terraform kan du sette opp infrastruktur og distribuere applikasjonen din på flere skyplattformer, noe som øker tilgjengeligheten og robustheten.

Funksjonsstøtte

Når AWS lanserer nye tjenester og funksjoner, vil CloudFormation vanligvis bli oppdatert før Terraform, ettersom det er en AWS-tjeneste. Begge verktøyene dekker nå de fleste tjenester og funksjoner. Dette kan være en liten ulempe ved bruk av Terraform, men det finnes løsninger.

Det er også mulig å lage en CloudFormation-stakk inne i din Terraform-kode. Så hvis Terraform mangler en bestemt funksjon, kan du midlertidig opprette en CloudFormation-stakk i Terraform-koden.

Teknisk støtte

Den betalte tekniske støtteplanen for AWS inkluderer også støtte for CloudFormation.

HashiCorp tilbyr også betalte tekniske støtteplaner for Terraform.

Konklusjon

Både AWS CloudFormation og Terraform er kraftige og veletablerte verktøy. Forskjellene som er beskrevet over, hjelper deg å ta en informert beslutning basert på dine behov. Hvis du planlegger å bruke flere skyplattformer, er det anbefalt å bruke Terraform som et samlet verktøy. Hvis du kun trenger et IaC-verktøy for AWS, er både AWS CloudFormation og Terraform gode alternativer.

Hvis du er interessert i å lære mer om Terraform, kan du sjekke ut disse nettkursene.