AWS CDK vs. Terraform: Hvilket verktøy er best for deg?

Er du usikker på om du skal velge AWS CDK eller Terraform? Denne artikkelen vil veilede deg til å ta et informert valg.

Skybasert databehandling har forandret IT-verdenen drastisk. Fra hvordan vi implementerer og vedlikeholder applikasjoner, til utviklingsmetoder, har alt blitt sterkt påvirket av skyteknologi. I dag er de fleste nye applikasjoner utviklet for å være skybaserte og kompatible med skytjenester.

Skybasert databehandling gjør det mulig å utvikle svært tilgjengelige, skalerbare og effektive arkitekturer, noe som øker etterspørselen etter skytjenester. Med denne veksten, har det oppstått et behov for å håndtere infrastruktur som kode. Å administrere skyressurser manuelt via konsoller kan være en kompleks oppgave, som er vanskelig å spore endringer i.

Infrastruktur som kode (IaC) løser dette problemet. Ved hjelp av IaC, kan vi definere ressursene våre som kode, som vi igjen bruker for å etablere skytjenester. Med infrastruktur som kode kan flere utviklere samarbeide om infrastruktur og kontrollere endringene som gjøres.

Infrastruktur som kode i AWS

AWS er den største og mest brukte skytjenesteleverandøren på verdensbasis. De har sitt eget IaC-verktøy, AWS CloudFormation, eller AWS CDK, og lar også tredjeparts IaC-verktøy som Terraform klargjøre ressurser. Når du skal velge et IaC-verktøy for AWS, er Terraform, et tredjepartsverktøy, en sterk konkurrent til AWS sine egne verktøy, AWS CloudFormation og AWS CDK.

Med så mange alternativer og funksjoner som hvert av disse verktøyene tilbyr, kan det være vanskelig å velge det riktige IaC-verktøyet. I denne artikkelen skal vi se på forskjellene mellom AWS CDK og Terraform. AWS CDK bruker CloudFormation internt, så for en dypere forståelse av CloudFormation og Terraform, se den relaterte artikkelen: Forstå IaC verktøy: CloudFormation vs. Terraform.

Terraform

Terraform er et åpen kildekode infrastruktur som kode-verktøy, som ble utviklet av Hashicorp. Det er et nøyaktig og modent verktøy som støtter flere skyleverandører, ikke bare AWS. Terraform støtter alle AWS-tjenester, og utviklermiljøet er raskt ute med å ta i bruk alle nye funksjoner som AWS legger til sine tjenester. Det lar oss skrive kode i et språk utviklet av Hashicorp, kalt HCL (Hashicorp Configuration Language). HCL er et JSON-lignende språk for å definere infrastrukturressurser.

AWS CDK

AWS CDK er et lag som ligger oppå AWS CloudFormation. For å forstå hvordan AWS CDK fungerer, bør du ha litt kunnskap om AWS CloudFormation. AWS CloudFormation er et AWS-administrert verktøy som lar oss definere AWS-infrastruktur i YML- eller JSON-format. Selv om JSON og YML er lett å lese, er de ikke egentlige programmeringsspråk. Det finnes ingen innebygd støtte for løkker og funksjoner, noe som gjør vedlikehold av store infrastrukturer vanskeligere. Det er her AWS CDK kommer inn.

AWS CDK er et lag over AWS CloudFormation som lar deg bruke kjente programmeringsspråk som JAVA eller Python for å konfigurere infrastrukturen din. Dette gjør det enklere å skrive og vedlikeholde koden.

Terraform vs. AWS CDK: Forskjeller

#1. Språk og brukervennlighet

Språk og brukervennlighet er essensielt for å forstå forskjellen mellom AWS CDK og Terraform.

La oss starte med Terraform. Terraform bruker et JSON-lignende språk for å definere ressurser og annen data, HCL eller HashiCorp Configuration Language. Det er ganske enkelt, og dokumentasjonen er lett å forstå, selv for nybegynnere.

Her er et kodeeksempel for å opprette en S3-bøtte:

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

  tags = {
    Name        = "Min bøtte"
    Environment = "Dev"
  }
}

Koden er enkel å lese, og du kan finne flere parametere som denne ressursen støtter i Terraform-dokumentasjonen.

Som nevnt tidligere, er AWS CDK et lag på toppen av CloudFormation som lar oss definere ressurser i programmeringsspråk. La oss se på en AWS CDK-kode for å opprette en S3-bøtte:

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: 'min-første-bøtte',
    });
 }
}

Terraform-koden kan se litt mer ryddig ut enn CDK, men både Terraform- og CDK-koder er ganske enkle. Hvis du skal bruke IaC for et lite prosjekt, er både Terraform og CDK gode alternativer med tanke på språk og brukervennlighet.

Når du velger det riktige IaC-verktøyet for et stort prosjekt med mange utviklere, har Terraform en ulempe. Selv om Terraform er enkelt, er det et nytt språk, og du må trene utviklerne dine i et helt nytt språk som ikke ligner på de andre programmeringsspråkene som er i bruk. Datamanipulering i Terraform er ikke like enkelt som i andre programmeringsspråk. Det er for eksempel ikke like enkelt å iterere gjennom lister og objekter og transformere verdier, spesielt for nybegynnere.

Personlig foretrekker jeg AWS CDK fremfor Terraform når jeg vurderer brukervennlighet. Når jeg har brukt Terraform, har jeg noen ganger måttet ty til komplekse skript for å få ønsket resultat. Kontrollen vi har over data og muligheten til å enkelt manipulere data i AWS CDK-språk er en stor fordel.

#2. Omfang

Terraform er et multi-sky IaC-verktøy, som betyr at du ikke bare kan bruke Terraform med AWS, men også med andre skyleverandører som Azure eller GCP. Terraform er et godt verktøy for å lage implementeringer i flere skyer, og ha et valg mellom flere skyleverandører for applikasjonen din.

Det har vært tilfeller der globale plattformer har hatt nedetid på grunn av feil i en skytjeneste. I dagens situasjon er det en god idé å ha mer enn én skyleverandør for applikasjonene dine.

AWS CDK er et AWS-tilbud for IaC. Selv om CDK er kraftig og moden, er den kun begrenset til AWS Cloud.

Når man vurderer omfanget av IaC-verktøyene, er Terraform den klare vinneren. Det er logisk å la utviklerne dine bruke ett enkelt verktøy for alle skyplattformene.

#3. Ytelse

Ytelse er vanligvis ikke det viktigste kriteriet når man velger riktig IaC-verktøy, men det kan være viktig i store prosjekter. Terraform distribuerer ressurser ved hjelp av AWS SDK, mens CDK-koden først konverteres til CloudFormation-maler før de tas i bruk.

Terraform ville fungere litt raskere enn AWS CDK, spesielt på grunn av tiden det tar for CDK å konvertere koden til en CloudFormation-mal.

#4. Modularitet

Både Terraform og AWS CDK kan brukes til å lage moduler. Terraform har innebygd støtte for moduler. Du kan lage dine egne moduler og lagre dem i et privat modulregister for bruk i organisasjonen din. Terraform har også et offentlig modulregister for lagring og bruk av offentlige moduler.

I AWS CDK kan du opprette gjenbrukbare funksjoner, klasser, og dele denne koden i organisasjonen for å oppnå samme resultat. Dette er en stor fordel med AWS CDK, ettersom det andre AWS IaC-verktøyet – CloudFormation – ikke lar deg opprette og gjenbruke kode som moduler. Du kan bruke nestede stabler i CloudFormation for å oppnå dette, men bruk av AWS CDK er et mer passende alternativ.

Alt i alt er begge verktøyene like på dette punktet.

#5. Kontroll og styring

Til syvende og sist kontrolleres all tilgang til AWS-konsollen av IAM, Identity Management Service fra AWS. Du kan bruke IAM-policyer med både AWS CDK og Terraform for å tillate og avvise visse handlinger. IAM lar deg ha god kontroll over hvilke handlinger som kan utføres på kontoen din.

I tillegg til å bruke IAM for å kontrollere tilgang til kontoressurser, tilbyr Terraform et rammeverk for policy som kode, Sentinel. Sentinel lar deg skrive detaljerte retningslinjer for å kontrollere en brukers handlinger via Terraform.

Konklusjon

Siden AWS CDK bruker CloudFormation internt, anbefales det at du går gjennom artikkelen om CloudFormation vs Terraform for en bedre forståelse av forskjellene mellom AWS CDK og Terraform.

Generelt er både AWS CDK og Terraform modne og kraftige verktøy. Terraform har en liten ulempe når det gjelder datamanipulering. Men etter min erfaring blir det enklere å løse problemer og utføre datatransformasjoner når man har blitt vant til å skrive Terraform. For multi-sky-operasjoner er Terraform et klart valg. Men hvis du har planer om å bruke AWS som din skytjeneste, er AWS CDK et utmerket alternativ.