Förstå IaC-verktyg: Cloudformation vs Terraform

By rik

Är du osäker på om du ska välja AWS CloudFormation eller Terraform? Den här artikeln hjälper dig att fatta ett informerat beslut.

Molnbaserad databehandling har fullständigt förändrat DevOps-världen. Det är inte längre bara en trend, utan en realitet som omformar hur vi utvecklar och underhåller applikationer. Trots de många fördelarna med molntjänster för företag av alla storlekar finns det en viktig begränsning: du måste konfigurera din infrastruktur manuellt.

Det innebär att du behöver navigera till konsolerna hos dina molnleverantörer och exakt specificera dina önskemål. För mindre projekt är detta hanterbart, men om flera personer gör ändringar i konsolen kan det snabbt leda till en komplicerad infrastruktur som är svår att underhålla. Det saknas ett effektivt sätt att samarbeta och spåra infrastrukturförändringar i molnet. Men det finns en lösning: infrastruktur som kod.

Infrastruktur som kod (IaC) är ett mycket populärt koncept inom molnbaserad databehandling. Det handlar om att hantera IT-infrastruktur genom kod. Istället för att manuellt konfigurera allt via konsolen låter IaC dig skriva konfigurationsfiler som sedan automatiserar din molninfrastruktur. Fördelarna med IaC inkluderar konsistens, enkelt och snabbt underhåll samt minimerad risk för mänskliga fel.

Använda IaC med Amazon Web Services

AWS är den ledande molntjänsten globalt och har dubbelt så stor marknadsandel som den näst största leverantören. AWS erbjuder över 200 tjänster som kan hantera ett otal användningsområden.

När du börjar använda IaC med AWS kommer du ofta att begränsa dina alternativ till AWS CloudFormation och det öppna källkodsverktyget Terraform. Att välja mellan dessa två kan kännas överväldigande på grund av de många funktionerna de båda erbjuder. I den här artikeln kommer vi att undersöka skillnaderna mellan AWS CloudFormation och Terraform för att hjälpa dig att avgöra vilket verktyg som passar bäst för dina behov.

Terraform vs. AWS CloudFormation: Skillnader

Modularitet

För stora organisationer som använder IaC är modularitet en viktig faktor vid valet av verktyg.

CloudFormation

CloudFormation saknar inbyggt stöd för moduler. Istället använder man något som kallas kapslade stackar som moduler.

Till exempel kan du ha en standardkonfiguration för hur en S3-bucket ska skapas inom din organisation. Då skapar du en CloudFormation-mall som bygger S3-buckets. När en användare vill skapa en S3-bucket kan de använda den här mallen som en kapslad stack.

En mindre känd AWS-tjänst, AWS Service Catalog, kan också hjälpa till med modulariteten i AWS CloudFormation. Service Catalog är en tjänst som är utformad för att begränsa omfattningen av AWS-tjänster av säkerhets- och prestandaskäl. Den använder CloudFormation-mallar i backend.

Låt oss ta ett exempel: S3-buckets kan bli en säkerhetsrisk om de inte används korrekt. Du vill ha en standardmetod för hur S3 ska användas i din organisation. Ett alternativ är att skapa en kapslad stackmall. Det andra alternativet är att använda AWS Service Catalog.

Med Service Catalog kan användare använda standardmallen från konsolen och justera ett antal parametrar. Detta ger dig kontroll över hur infrastrukturen skapas i dina AWS-konton och förhindrar oönskade situationer.

Terraform

Terraform har inbyggt stöd för moduler. Det tillåter dig att skapa standardkonfigurationer och använda dem i andra Terraform-konfigurationer.

Eftersom Terraform är öppen källkod kan du även hitta och använda färdiga moduler i Terraform Registry. Du kan också skapa egna moduler och lagra dem i ett privat modulregister.

Personligen skulle jag föredra Terraform framför CloudFormation om modularitet var en prioritet.

Att använda kapslade stackar i CloudFormation är inte lika smidigt som att använda moduler i Terraform. En stor nackdel är att det kan vara komplicerat att skicka data mellan en CloudFormation-mall och den kapslade stacken.

Det finns ingen central plats för att dela CloudFormation-mallar. AWS Service Catalog finns, men det är mest ett sätt att tillämpa regler för att skapa infrastruktur via konsolen. När du använder Service Catalog, även om en del av komplexiteten är inkapslad i CloudFormation-filer, måste du fortfarande ange parametrar manuellt via konsolen för att skapa din infrastruktur.

Terraform å andra sidan har ett etablerat sätt att skapa, underhålla och dela moduler. Du kan granska modulkrav i Terraform Module Registry och enkelt använda dem i dina Terraform-filer.

Kontroll och styrning av infrastruktur

Både AWS CloudFormation och Terraform ger dig möjlighet att begränsa vilka resurser dina medarbetare kan skapa i dina AWS-konton.

CloudFormation ger i sig ingen kontroll över hur mallar används, men du kan använda AWS IAM-policyer för att styra vilka användare som får använda standardmallar för att skapa resurser. I vårt S3-bucket-exempel kan du begränsa skapandet av S3-buckets till enbart standardmallarna i AWS Service Catalog eller kapslade stackar.

Terraform låter dig styra vilka resurser användare kan skapa via Sentinel, ett verktyg för policy som kod. Sentinel tillåter dig att tillämpa detaljerade policyer för att godkänna eller neka åtgärder i Terraform. Till exempel kan du neka skapande av S3-segment och endast tillåta användare att skapa dem via en standardmodul.

Tillståndshantering

Både AWS CloudFormation och Terraform behöver spåra resurser som de hanterar.

Terraform lagrar tillståndet för din infrastruktur i en tillståndsfil. Denna fil lagras lokalt som standard, men kan lagras på en fjärransluten backend som S3, vilket möjliggör för flera användare att ändra samma infrastruktur.

CloudFormation lagrar inte en tillståndsfil som vi kan se. CloudFormation är en hanterad tjänst och utför all tillståndshantering i bakgrunden.

Både AWS CloudFormation och Terraform ger dig möjlighet att granska vilka ändringar som kommer att göras i din infrastruktur. I Terraform kan du använda kommandot ”terraform plan” för att se hur ändringarna kommer att tillämpas. I CloudFormation kallas den här informationen för Change Sets.

Språk

Terraform använder HashiCorp Configuration Language (HCL), ett språk som skapats av HashiCorp. Det liknar JSON med ytterligare funktioner.

CloudFormation-mallar skrivs i YAML- eller JSON-format.

Loggning och återställning

Både AWS CloudFormation och Terraform har bra loggningsfunktioner. Enligt min erfarenhet har fel och problem varit lätta att identifiera (för det mesta).

CloudFormation: CloudFormation återställer alla ändringar automatiskt om en stackändring misslyckas. Den här funktionen kan inaktiveras vid felsökning.

Terraform: Terraform återställer inte ändringar automatiskt vid fel. Detta är inte ett problem då du kan använda kommandot `terraform destroy` för att ta bort den halvfärdiga konfigurationen och starta om processen.

Omfattning

Terraform är inte begränsat till AWS-molnet. En stor faktor vid valet mellan Terraform och CloudFormation är att Terraform stöder flera molnleverantörer och tjänster.

Om du planerar att använda IaC för flera molnplattformar är Terraform det bästa valet. CloudFormation är ett kraftfullt verktyg, men det är endast begränsat till AWS. Genom att använda Terraform kan du distribuera din applikation i flera molnplattformar, vilket ökar tillgängligheten och robustheten.

Funktionsstöd

När AWS släpper nya tjänster och funktioner brukar CloudFormation uppdateras först, eftersom det är en AWS-tjänst. Båda verktygen täcker majoriteten av tjänster och funktioner. Detta kan vara en mindre nackdel med Terraform, men det finns en lösning.

Det går att skapa en CloudFormation-stack i Terraform-koden. Om Terraform saknar en funktion kan du tillfälligt implementera en CloudFormation-stack i din Terraform-kod.

Teknisk support

AWS betalda tekniska supportplan täcker även support för CloudFormation.

HashiCorp erbjuder också betalda supportplaner för Terraform.

Slutsats

Både AWS CloudFormation och Terraform är kraftfulla verktyg. Skillnaderna ovan kan hjälpa dig att göra ett välgrundat beslut. Om du planerar att använda flera molnplattformar, bör du använda Terraform som en central lösning. Om du letar efter ett IaC-verktyg endast för AWS är både CloudFormation och Terraform lämpliga alternativ.

Om du är intresserad av att lära dig Terraform, finns det bra onlinekurser att utforska.