Förstå IaC-verktyg: Cloudformation vs Terraform

AWS CloudFormation och Terraform – inte säker på vilken du ska välja? Den här artikeln hjälper dig att fatta ett smart beslut.

Cloud Computing har revolutionerat världen av DevOps. Det är inte bara ett modeord längre; det är här och det är här för att förändra hur vi utvecklar och underhåller våra applikationer. Även om det finns otaliga skäl till varför du bör använda molnberäkning för alla skalor av företag finns det en liten begränsning, du måste tillhandahålla din infrastruktur manuellt.

Du måste gå till konsolerna hos dina molnleverantörer och berätta exakt vad du vill ha. Detta fungerar bra för små användningsfall, men tänk om du har olika personer som gör konfigurationsändringar i konsolen. Du kan sluta med en superkomplicerad infrastruktur som bara kommer att bli svårare och svårare att underhålla. Det finns inget effektivt sätt att samarbeta eller hålla reda på ändringarna av infrastrukturen i molnet. Jo, det finns det faktiskt. Infrastruktur som en kod.

Infrastruktur som kod är ett mycket populärt begrepp inom cloud computing. Det är processen att hantera din IT-infrastruktur med hjälp av kod. Ja det stämmer. Istället för att gå till konsolen och göra allt manuellt; Infrastruktur som en kod, alias IAAC eller IAC, låter dig skriva konfigurationsfiler, som sedan tillhandahåller din molninfrastruktur. IAC ger oss fördelar som konsekvens, enkelt och snabbt underhåll och inget utrymme för mänskliga fel.

Använder IAC med Amazon Web Services

AWS är den ledande molntjänsten i världen och har dubbelt så stor marknadsandel än nästa molnleverantör efter den. Det finns över 200 tjänster på AWS som kan tillgodose hundratals och tusentals användningsfall.

När du börjar använda IAC med AWS kommer du ofta att begränsa dina val till AWS CloudFormation och verktyget med öppen källkod, Terraform. När du försöker göra ett val mellan de två kan det vara ganska överväldigande att förstå de många funktioner som båda verktygen erbjuder. I den här artikeln kommer vi att ta en titt på skillnaderna mellan AWS CloudFormation och Terraform för att hjälpa dig att bestämma vilket verktyg som är bättre lämpat för dina behov.

Terraform vs. AWS CloudFormation: Skillnader

Modularitet

När man använder IAC i stora organisationer kan modularitet vara en stor faktor för att välja rätt verktyg.

CloudFormation

CloudFormation har inte inbyggt stöd för moduler. Det låter dig använda något som kallas kapslade stackar som moduler.

Du kan till exempel ha en standardkonfiguration för hur du vill tillhandahålla en S3-bucket i din organisation. Så du skapar en standard CloudFormation-mall som skapar S3-hinkar. Nu när en slutanvändare vill skapa S3-bucket kan de använda denna CloudFormation-mall som en kapslad stack och skapa en standard S3-bucket.

Det finns också en mindre känd tjänst av AWS, den AWS tjänstekatalog som kan hjälpa dig med modulariteten i din AWS CloudFormation. Service Catalog är en AWS-tjänst som är utformad specifikt för organisationer som vill begränsa omfattningen av AWS Services för att möta krav på efterlevnad, säkerhet, kostnad eller prestanda. Och gissa vad? AWS Service Catalog använder CloudFormation-mallar i backend.

Låt oss snabbt förstå detta med ett exempel. S3-hinkar, om de inte används på rätt sätt, kan snart bli katastrofala för dina konfidentiella data. Låt oss ta samma exempel, du vill ha ett standardsätt för hur du vill använda S3 i din organisation. Det första alternativet är att skapa den kapslade stackmallen, som kan användas inom andra CloudFormation-stackar och är lika bra.

Om du inte vill att användarna ska behöva använda denna standardmall som en kapslad stack kan du använda AWS Service Catalog. Service Catalog kommer att tillåta användare att använda denna standardmall från gränssnittet på konsolen och ange några parametrar, för mindre anpassningar. Detta gör att du kan kontrollera hur infrastrukturen tillhandahålls i dina AWS-konton och förhindra oönskade scenarier.

Terraform

Terraform har inbyggt stöd för moduler. Det låter dig skapa standardkonfigurationer ungefär som AWS CloudFormation och använda den i andra terraform-konfigurationer.

Eftersom Terraform är ett verktyg med öppen källkod kan du också hitta och använda några förgjorda moduler med öppen källkod i Terraform-registret. Du kan också skapa dina egna moduler med dina egna konfigurationer och lagra dem i ett privat modulregister.

Personligen skulle jag föredra att använda Terraform framför CloudFormation om modularitet var ett stort krav.

Att använda en kapslad stack i CloudFormation är inte lika lätt som att använda moduler i Terraform. Den viktigaste faktorn är att det kan vara ganska komplicerat att skicka data från en CFN-mall till den kapslade stacken.

Det finns ingen standardplats där CloudFormation-mallar kan delas. Du har AWS Service Catalog men det är bara ett sätt för dig att genomdriva vissa regler för att skapa infrastruktur via konsolen. Vi handlar alla om kod. När du använder Service Catalog, även om vissa komplicerade uppgifter är inkapslade av CloudFormation-filer, måste du fortfarande gå igenom den manuella uppgiften att gå till konsolen och ange parametrar för att skapa din infrastruktur.

Terraform, å andra sidan, har en fast metod för att skapa, underhålla och dela modulerna. Du kan se de exakta kraven för modulerna i Terraform Module Registry och använda dem i dina terraform-filer mycket enkelt.

Kontroll och styrning över Infrastruktur

Om du vill begränsa vilka resurser dina medarbetare kan skapa i dina AWS-konton: Både AWS CloudFormation och Terraform ger dig möjligheten att göra det.

Låt oss prata om CloudFormation först. CloudFormation i sig erbjuder ingen kontroll över hur mallarna används men du kan använda AWS IAM-policyerna för att endast tillåta användarna på ditt AWS-konto att endast använda standardmallarna för CloudFormation för att skapa resurser. I vårt S3-hinkexempel kanske du vill begränsa alla ”S3 Create”-behörigheter för användare och bara tillåta dem att skapa S3-buckets från AWS Service Catalog eller Nested Stacks.

Terraform låter dig styra vilka resurser dina användare kan skapa med hjälp av en policy som ett kodverktyg Vakt. Sentinel låter dig tillämpa finkorniga, logikbaserade policyer för att tillåta eller neka användaråtgärder via Terraform. Du kan till exempel neka alla resurser som skapar S3-segment och endast tillåta användare att skapa S3-segment från en standardmodul.

Statsledning

Både AWS CloudFormation och Terraform behöver hålla reda på de resurser de underhåller.

Terraform lagrar tillståndet för din infrastruktur i en tillståndsfil. Den här filen lagras lokalt som standard men du kan lagra den på fjärranslutna backends som S3 och låta flera användare göra ändringar i samma uppsättning infrastruktur.

CloudFormation underhåller inte en tillståndsfil, åtminstone inte en som vi kan se. CloudFormation är en hanterad tjänst så den gör allt statligt underhåll och kontroller i bakgrunden.

Både AWS CloudFormation och Terraform har ett sätt för dig att kontrollera vilka ändringar som kommer att göras i din infrastruktur. I Terraform kan du köra ett kommando – ”terraform plan” och hur Terraform planerar att tillämpa dina konfigurationsändringar. I CloudFormation kan användare se denna information via Change Sets.

Språk

Terraform använder HashiCorp Configuration Language, HCL, ett språk skapat av HashiCorp. Det är väldigt likt JSON med ytterligare inbyggda funktioner och möjligheter.

CloudFormation-mallar är skrivna i YAML- eller JSON-format

Loggning och rollbacks

Både AWS CloudFormation och Terraform har goda loggningsmöjligheter. Enligt min erfarenhet har felen och problemen varit enkla (för det mesta).

CloudFormation: Som standard rullar CloudFormation tillbaka alla dina ändringar i händelse av en misslyckad stackändring. Detta är en bra funktion och kan inaktiveras för alla felsökningsändamål.

Terraform: Terraform återställer inte automatiskt dina ändringar om det misslyckas. Detta är inte ett problem eftersom du alltid kan köra kommandot terraform destroy för att ta bort den halvprovisionerade konfigurationen och starta om en Terraform-körning igen.

Omfattning

Terraform är inte begränsat till AWS Cloud. Den viktigaste faktorn när man väljer mellan Terraform och CloudFormation är att Terraform stödjer andra molnleverantörer och tjänster.

Så om du planerar att använda IAC för flera molnplattformar är Terraform ditt bästa val. CloudFormation, även om det är ett kraftfullt verktyg, är bara begränsat till AWS. Genom att använda Terraform kan du sätta upp infrastruktur och distribuera din applikation i flera molnplattformar, och därigenom göra din applikation mer tillgänglig och robust.

Funktionsstöd

Vanligtvis, när AWS rullar ut nya tjänster och funktioner kommer CloudFormation att uppdateras före Terraform, eftersom det är en AWS-tjänst. Från och med nu täcker båda verktygen de flesta av tjänsterna och funktionerna i dessa tjänster. Detta kan vara en liten nackdel med att använda Terraform, men vi har en lösning.

Det finns också en möjlighet för dig att skapa en CloudFormation-stack i din Terraform-kod. Så om du använder Terraform och den inte har en funktion kan du tillfälligt ställa in en CloudFormation-stack i din Terraform-kod.

Teknisk support

Den betalda AWS tekniska supportplanen täcker även CloudFormation-support.

HashiCorp har betalat planer för teknisk support på Terraform också.

Slutsats

Både AWS CloudFormation och Terraform är kraftfulla och fullt utvecklade verktyg. Skillnaderna ovan hjälper dig att fatta ett välgrundat beslut att välja verktyg baserat på dina krav. Som ett personligt förslag, om du planerar att använda flera molnplattformar i framtiden eller för närvarande använder flera moln bör du använda Terraform som en one-stop-shop för alla dina behov. Om du letar efter ett IAC-verktyg endast för AWS är både AWS CloudFormation och Terraform rättvist spel.

Om du är intresserad av att lära dig Terraform, kolla in dessa onlinekurser.