Osäker på om du ska välja AWS CDK eller Terraform? Den här genomgången hjälper dig att göra ett informerat val.
Molntjänster har omvandlat teknik- och informationsvärlden. Allt, från hur vi distribuerar och underhåller applikationer till metoder för utveckling, har påverkats markant. Nya applikationer konstrueras nu med molnet i åtanke, för att vara kompatibla med molntjänster.
Molntjänster underlättar skapandet av mycket tillgängliga, skalbara och effektiva system, vilket ökar efterfrågan. Med denna utveckling ökar även behovet av att hantera infrastruktur som kod. Att manuellt administrera molnresurser via konsoler kan vara komplicerat och svårt att spåra.
Infrastruktur som kod, ofta kallat IaC, erbjuder en lösning. Genom att använda IaC kan vi definiera våra resurser i kodform och använda den koden för att driftsätta molntjänster. Detta möjliggör samarbete mellan utvecklare och underlättar spårning av ändringar.
Infrastruktur som kod i AWS
AWS är världens största molnleverantör. De har egna IaC-verktyg, som AWS CloudFormation och AWS CDK, men stöder även verktyg från tredje part, som Terraform. Vid val av IaC-verktyg för AWS, är Terraform en stark konkurrent till AWS egna verktyg.
Med så många alternativ och funktioner kan det vara svårt att välja rätt IaC-verktyg. Den här artikeln jämför AWS CDK och Terraform. AWS CDK använder CloudFormation internt, så för en djupare förståelse, se den relaterade artikeln om skillnader mellan CloudFormation och Terraform. Här är länken till den artikeln.
Terraform
Terraform är ett öppet källkodsverktyg för infrastruktur som kod, ursprungligen utvecklat av Hashicorp. Det är ett välutvecklat och stabilt verktyg som stöder flera molnleverantörer, inte bara AWS. Terraform stödjer alla AWS-tjänster, och utvecklargemenskapen är snabb att anpassa sig till nya funktioner i AWS. Koden skrivs i Hashicorps eget språk HCL, som liknar JSON, för att definiera infrastrukturresurser.
AWS CDK
AWS CDK bygger på AWS CloudFormation. För att förstå AWS CDK behöver man veta lite om CloudFormation, ett verktyg som låter oss definiera AWS-infrastruktur i YML- eller JSON-format. Även om JSON och YML är lättlästa, är de inte fullvärdiga programmeringsspråk. De saknar stöd för loopar och funktioner, vilket gör underhållet av stora infrastrukturer svårare. Det är här AWS CDK kommer in.
AWS CDK är ett lager ovanpå CloudFormation som tillåter oss att använda bekanta programmeringsspråk som Java eller Python för att hantera infrastruktur. Detta underlättar både skrivandet och underhållet av koden.
Terraform vs. AWS CDK: Jämförelse
#1. Språk och användarvänlighet
Språk och användarvänlighet är viktiga faktorer för att förstå skillnaden mellan AWS CDK och Terraform.
Terraform använder HCL, HashiCorp Configuration Language, ett JSON-liknande språk för att definiera resurser. Det är enkelt, och dokumentationen är lätt att förstå även för nybörjare.
Här är ett exempel på hur man skapar en S3-hink i Terraform:
resource "aws_s3_bucket" "my_s3_bucket" { bucket = "my-tf-bucket" tags = { Name = "My bucket" Environment = "Dev" } }
Koden är tydlig, och fler detaljer om resursen finns i Terraforms dokumentation.
AWS CDK låter oss definiera resurser i programmeringsspråk. Här är motsvarande kod för att skapa en S3-hink i AWS CDK:
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-koden kan se något renare ut, men båda är relativt enkla att förstå. För mindre projekt är både Terraform och CDK bra alternativ.
För stora projekt kan Terraform dock innebära en nackdel. Trots sin enkelhet är HCL ett nytt språk som utvecklare behöver lära sig. Datamanipulation i Terraform är inte heller lika smidig som i andra programmeringsspråk, vilket kan vara besvärligt, speciellt för nya användare.
Jag personligen föredrar AWS CDK på grund av användarvänligheten. I Terraform har jag ibland behövt tillgripa komplicerade lösningar för att uppnå önskat resultat. Den enkla datamanipulationen i AWS CDK är en stor fördel.
#2. Omfattning
Terraform stöder flera molnplattformar, vilket gör det användbart för distributioner som använder olika molntjänster. Detta är bra för att minimera risker om en specifik molnleverantör har driftstörningar.
AWS CDK är begränsat till AWS. Trots att det är ett kraftfullt verktyg, kan det endast användas inom AWS.
När det gäller omfattning vinner Terraform. Det är praktiskt att ha ett verktyg för alla molnplattformar.
#3. Prestanda
Prestanda är inte det viktigaste vid val av IaC-verktyg, men det kan spela roll i större projekt. Terraform distribuerar resurser med AWS SDK, medan CDK-koden först omvandlas till CloudFormation-mallar.
Terraform är generellt sett snabbare än AWS CDK, på grund av den extra tid det tar för CDK att konvertera kod till CloudFormation-mallar.
#4. Modularitet
Både Terraform och AWS CDK stöder moduler. Terraform har inbyggt stöd för att skapa och lagra moduler, både privat och offentligt.
AWS CDK låter dig skapa återanvändbara funktioner och klasser för att uppnå samma resultat. Detta är en fördel jämfört med CloudFormation, som inte har den här möjligheten på samma sätt. Du kan använda kapslade stackar, men AWS CDK är ett bättre alternativ.
Sammantaget är båda verktygen likvärdiga i detta avseende.
#5. Kontroll och styrning
IAM (Identity Management Service) används för att kontrollera åtkomst till AWS Console. Du kan använda IAM-policyer med både AWS CDK och Terraform för att definiera tillåtna åtgärder.
Utöver IAM erbjuder Terraform policyramverket Sentinel, som låter dig skriva finkorniga policyer för att kontrollera användares åtgärder i Terraform.
Sammanfattning
Eftersom AWS CDK bygger på CloudFormation rekommenderas att du läser om skillnaderna mellan CloudFormation och Terraform. Här är länken.
Både AWS CDK och Terraform är kraftfulla verktyg. Terraform kan vara lite svårare när det gäller datamanipulation, men med erfarenhet går det att hantera. För multimoln är Terraform det självklara valet, men om du bara använder AWS är AWS CDK ett utmärkt alternativ.