Förstå IaC-verktyg: AWS CDK vs. Terraform

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

Cloud Computing har revolutionerat världen av information och teknik. Allt från hur vi distribuerar och underhåller applikationer till utvecklingsmetoder, allt har påverkats mycket av Cloud Computing. Alla nya applikationer är utvecklade för att vara molnbaserade och kompatibla med molntjänster.

Cloud Computing hjälper oss att utveckla högt tillgängliga, skalbara och effektiva arkitekturer, vilket gör molntjänster mer och mer efterfrågade. Med denna boom inom cloud computing kommer ett behov av att underhålla infrastruktur som en kod. Att underhålla molnresurser manuellt via konsolen kan vara en komplex uppgift som kan vara mycket svår att spåra.

Infrastruktur som en kod, aka IAC eller IAAC, löser detta problem. Genom att använda IAC kan vi definiera våra resurser som kod och använda denna kod för att tillhandahålla molntjänster. Genom att använda infrastruktur som en kod kan flera utvecklare samarbeta kring infrastruktur och hålla reda på de ändringar som görs av utvecklare.

Infrastruktur som en kod i AWS

AWS är den största och mest använda molnleverantören globalt. Den har sitt eget IAC-verktyg, AWS CloudFormation eller AWS CDK, och tillåter även IAC-verktyg från tredje part som Terraform att tillhandahålla resurser. När man väljer IAC-verktyg för AWS är Terraform, ett tredjepartsverktyg, en solid konkurrens till AWS-hanterade verktyg, AWS CloudFormation och AWS CDK.

Med så många val och funktioner som vart och ett av dessa verktyg ger, kan det vara svårt att välja rätt IAC-verktyg. I den här artikeln kommer vi att diskutera skillnaden mellan AWS CDK och Terraform. AWS CDK använder Cloudformation internt, så för en djupare inblick i Cloudformation och Terraform, se den relaterade artikeln, Understanding IAC tools: CloudFormation vs. Terraform.

Terraform

Terraform är en öppen källkodsinfrastruktur som ett kodverktyg som ursprungligen utvecklades av Hashicorp. Det är ett mycket exakt och moget verktyg som stöder inte bara AWS utan även andra molnleverantörer. Terraform stöder alla AWS-tjänster, och utvecklingssamhället är snabbt med att ta till sig alla nya funktioner som AWS lägger till sina tjänster. Det låter oss skriva kod i Hashicorp utvecklat språk (HCL). HCL är ett JSON-liknande språk för att definiera infrastrukturresurser.

AWS CDK

AWS CDK är ett omslag runt AWS CloudFormation. För att förstå hur AWS CDK fungerar bör du veta lite om AWS CloudFormation. AWS CloudFormation är ett AWS-hanterat verktyg som låter oss definiera AWS-infrastruktur i YML- eller JSON-format. Även om det är lätt att läsa JSON och YML, är de inte några egentliga programmeringsspråk. Det finns inget inbyggt stöd för loopar och funktioner, vilket gör det svårare och svårare att underhålla stora infrastrukturer. Det är här AWS CDK kommer in.

AWS CDK är ett omslag runt AWS CloudFromation som låter dig använda välbekanta programmeringsspråk som – JAVA eller Python för att tillhandahålla din infrastruktur. Detta gör det lättare att skriva och underhålla kod.

Terraform vs. AWS CDK: Skillnader

#1. Språk och användarvänlighet

Språk och användarvänlighet är avgörande för att förstå skillnaden mellan AWS CDK och Terraform.

Låt oss prata om Terraform först. Terraform använder ett JSON-liknande språk för att definiera resurser och annan data, HCL eller HashiCorp Configuration Language. Det är ganska enkelt, och dokumentationen är lätt att förstå och följa, även för nybörjare.

Låt oss se en kod för att skapa en S3-hink.

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

Koden är ganska enkel att läsa, och du kan se andra parametrar som den här resursen stöder i Terraform dokumentation.

Som nämnts tidigare är AWS CDK ett CloudFormation-omslag som låter oss definiera våra resurser i programmeringsspråk. Låt oss se en AWS CDK-kod för att skapa en S3-hink.

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 kan se lite snyggare ut än CDK, men både Terraform- och CDK-koder är ganska enkla. Om du planerar att använda IAC för ett litet projekt är både Terraform och CDK bra alternativ när det gäller språk och användarvänlighet.

Men när man väljer rätt IAC-verktyg för ett stort projekt med många utvecklare har Terraform en nackdel. Så enkelt som Terraform är, det är ett nytt språk, och du kommer att behöva utbilda dina utvecklare i ett helt nytt språk som inte liknar de andra programmeringsspråken som används. Ännu viktigare är att datamanipulation i Terraform inte är lika enkel som i andra programmeringsspråk. Att till exempel iterera genom listor och objekt och omvandla värden är inte lika enkelt, särskilt för nybörjare.

Personligen skulle jag föredra AWS CDK framför Terraform om man överväger användarvänligheten. När jag använder Terraform har det funnits tillfällen då jag har varit tvungen att använda lösningar eller komplicerade skript för att få önskat resultat. Kontrollen vi har över data och möjligheten att enkelt manipulera data i AWS CDK-språk är en stor vinst för AWS CDK.

#2. Omfattning

Terraform är ett IAC-verktyg för flera moln, vilket innebär att du inte bara kan använda Terraform med AWS utan även med andra molnleverantörer som Azure eller GCP. Terraform är ett utmärkt verktyg för att skapa multimolndistributioner och ha valfritt antal molnleverantörer för din applikation.

Det har funnits tillfällen då allmänt använda globala plattformar gick ner på grund av ett problem i molnleverantörens tjänster. I dagens tid är det ett smart beslut att ha mer än en molnleverantör för dina applikationer.

AWS CDK är ett AWS-erbjudande för IAC. Hur kraftfull och mogen CDK kan vara, är den endast begränsad till AWS Cloud.

När man överväger omfattningen av IAC-verktygen är Terraform den uppenbara vinnaren av de två. Det är mycket vettigt att låta dina utvecklare använda ett enda verktyg för alla molnplattformar.

#3. Prestanda

Prestanda är vanligtvis inte det viktigaste kriteriet när man väljer rätt IAC-verktyg, men det kan ha betydelse i stora projekt. Terraform distribuerar resurser med hjälp av AWS SDK, medan CDK-koden först konverteras till CloudFormation-mallar och sedan tillämpas.

Terraform skulle fungera något snabbare än AWS CDK, särskilt på grund av den tid det tar för CDK att konvertera kod till CloudFormation Template.

#4. Modularitet

Både Terraform och AWS CDK kan användas för att skapa moduler. Terraform har inbyggt stöd för moduler. Du kan skapa dina egna moduler och lagra dem i ett privat modulregister för användning inom din organisation. Terraform har också ett offentligt modulregister för värd och användning av publika moduler.

I AWS CDK kan du skapa återanvändbara funktioner, klasser och dela denna kod inom din organisation för att uppnå samma resultat. Detta är ett stort plus i AWS CDK som det andra AWS IAC-verktyget – CloudFormation tillåter dig inte att skapa och återanvända kod som moduler. Du kan använda kapslade stackar i CloudFormation för att uppnå detta krav, men att använda AWS CDK är ett mycket lämpligare alternativ.

Sammantaget är båda verktygen likartade i denna aspekt.

#5. Kontroll och styrning

I slutändan kontrolleras all åtkomst till AWS Console av IAM, Identity Management Service från AWS. Du kan använda IAM-policyer med både AWS CDK och Terraform för att tillåta och neka vissa åtgärder. IAM låter dig ha finkornig kontroll över vilka åtgärder som kan vidtas på ditt konto.

Förutom att använda IAM för att kontrollera åtkomst till kontoresurser erbjuder Terraform en policy som ett kodramverk, Sentinel. Sentinel låter dig skriva finkorniga policyer för att korrekt kontrollera en användares handlingar via Terraform.

Slutsats

Eftersom AWS CDK internt använder CloudFormation, föreslår jag att du går igenom CloudFormation vs Terraform-artikeln för att bättre förstå skillnaderna mellan AWS CDK och Terraform.

Sammantaget är både AWS CDK och Terraform mogna och kraftfulla verktyg. Terraform har en liten nackdel när det kommer till datamanipulation. Men enligt min erfarenhet, när du blir mer bekväm med att skriva Terraform, blir det lättare att använda lösningar och utföra datatransformationer. För multimolnoperationer är Terraform ett självklart val; men om du funderar på att använda AWS som din molnleverantör är AWS CDK ett utmärkt alternativ.