Featured image of post Aan de slag met AWS CDK v2

Aan de slag met AWS CDK v2

Met de CDK van AWS bouw je eenvoudig je infrastructuur in AWS op via Infrastracture-as-Code. In plaats van lange CloudFormation-templates in YML schrijf je korte, bondige code om een S3-bucket aan te maken, een Lambda te deployen of een CloudFront-distributie te maken. We zetten alles wat je moet weten van de AWS CDK kort voor je op een rij zodat je er snel mee aan de slag kunt gaan.

CDK staat voor Cloud Development Kit. Het is een Infrastracture-as-Code (IaC)-framework waarbij je je AWS-resources kunt definiëren in TypeScript, JavaScript, Go, C#, Python of Java. De code die je schrijft wordt door de CDK CLI omgezet in een CloudFormation-template, die vervolgens automatisch gedeployd wordt naar AWS.
In dit artikel gaan we aan de slag met de AWS CDK met TypeScript. Je installeert de AWS CDK voor TypeScript of JavaScript eenvoudig via npm of yarn. De packagename is aws-cdk-lib: npm install-g aws-cdk-lib.

En om een nieuwe CDK-app te starten voer je de volgende commando's uit:

mkdir hello-cdk
cd hello-cdk
cdk init app --language typescript

Je krijgt dan een nieuw CDK-project. Elk CDK-project bestaat uit een bin- en een lib-map. In de bin-map definieer je je app (elk CDK-project kun je zien als één app) en voeg je al je stacks toe aan de app. In de lib-map bouw je je stacks met resources erin.
Laten we kijken hoe je bijvoorbeeld een S3-bucket kunt maken met de CDK:

import { App, Stack, StackProps } from'aws-cdk-lib';
import * as s3 from'aws-cdk-lib/aws-s3'; 

class S3CdkStack extends Stack {  

constructor(scope: App, id: string, props?: StackProps) {   
   super(scope, id, props);    
   const s3Bucket = new s3.Bucket(this, 'MyFirstBucket', {      
      autoDeleteObjects: true    
   });  
  }
}

Een stack is een verzameling van AWS-resources, vergelijkbaar als in CloudFormation. Binnen een stack maak je je resources, in ons geval een S3-bucket. Je kunt in elke stack een reeks resources deployen, maar het is wel aan te raden de stacks logisch op te delen in wat bij elkaar hoort. Het kan weleens voorkomen dat je een stack moet afbreken en opnieuw opbouwen. Het is dan niet fijn als je stack eigenlijk te groot is waardoor je onnodig resources af moet breken.

Met het CLI-commando cdk synth zet je je CDK-project om in een CloudFormation-template en met cdk deploy deploy je je CDK-project daadwerkelijk naar AWS.

Je vindt een overzicht van alle resources, samen met codevoorbeelden en welke opties je hebt, op het documentatieportaal van de CDK. De documentatie is over het algemeen van hoge kwaliteit en compleet, voor in ieder geval de stabiele modules. Let altijd wel even op of je V1 of V2 van de docs bekijkt, dat is linksboven in de portal aangegeven (zie ook verderop in dit artikel: CDK V1 vs V2).

Voor alle concepten van de CDK, check de documentatie. Hier vind je ook bijvoorbeeld hoe je parameters kunt gebruiken om de naam van een resource mee te geven.

Constructs

Het belangrijkste concept van AWS CDK zijn de constructs. In de meeste gevallen zijn het AWS-resources. AWS zelf omschrijft het als "cloud components". Je kunt met de CDK op drie verschillende niveaus constructs maken. Het laagste niveau is level 1 (L1), de zogenaamde CFN resources (Cfn). Met Level 1 ben je eigenlijk direct bezig om de CloudFormation-templates te manipuleren. Je herkent dit soort constructs aan het feit dat de namen van de classes altijd beginnen met Cfn. Bijvoorbeeld een CfnBucket is een S3-bucket. Level 1 is dus het laagste niveau, dat betekent dat je hier erg veel moet configureren en instellen en geen 'sane defaults' krijgt.

De meeste code die je schrijft in de AWS CDK zal op level 2 (L2) zijn. Op dit niveau krijg je veel boilerplate cadeau en hoef je niet zo veel code te schrijven om resources samen te laten werken. Bovendien biedt de CDK je op level 2 goede defaults aan volgens AWS best practices en hoef je dus niet elk klein detail van de AWS-resources te weten. Als je op Level 2 een S3-bucket aan wilt maken, gebruik je bijvoorbeeld de class s3.Bucket, zoals hierboven in de code sample.

Het hoogste niveau is Level 3 (L3). Op dit niveau heb je het eigenlijk niet meer over resources, maar over patterns. Je kunt hiermee bijvoorbeeld in één keer een Lambda achter een API Rest Gateway deployen, of een Fargate-cluster met een Application Load Balancer ervoor. L3 van de CDK is nog actief in ontwikkeling en is nog niet helemaal compleet of heel stabiel.

Escape hatch

Soms kan het voorkomen dat de CDK achterloopt op wat je met CloudFormation kan, of kan het zijn dat de CDK een optie niet exposet of zelfs een bug heeft bij de gedeployde resources. Met een Escape hatch kun je eenvoudig van een level 2- naar een level 1-resource teruggaan en op die manier zelf de CloudFormation-template direct overschrijven. Bijvoorbeeld:

// Convert our Level 2 S3 bucket to a Level 1 construct
const cfnBucket = bucket.node.defaultChildas s3.CfnBucket; 

// We can now directly override CloudFormation template properties
cfnBucket.addOverride('Properties.VersioningConfiguration.Status', 'NewStatus');

De bucket is een AWS-resource op L2. Via de node.defaultChild property's zet je deze resource om naar een L1-resource. Vervolgens kun je via de addOverride methode direct de property’s van de gegenereerde YML-CloudFormation-template overschrijven en naar wens aanpassen.

Bootstrapping

Voordat je met de CDK aan de slag gaat, is het nodig om je AWS-account te bootstrappen. De CDK zelf heeft een aantal resources nodig om zelf in staat te zijn om resources te deployen, denk dan aan IAM-rollen en policy’s. Voor je eerste deploy run je eenmalig het commando cdk bootstrap vanaf de CLI om je AWS-account gebruiksklaar te maken. Daarna ben je klaar om met de CDK aan de slag te gaan.

CDK v1 vs v2

Op dit moment zijn er twee versies van de AWS CDK in ontwikkeling. Als je nu begint, is het aan te bevelen CDK v2 te gebruiken. In deze versie is de CDK samengevoegd in één package, in v1 waren er heel veel losse pakketten. Ontwikkelen is daardoor met V2 een stuk fijner. V1 krijgt nog nieuwe functies tot 1 juni 2022, daarna alleen nog bugfixes en securityfixes tot 1 juni 2023. Upgraden naar V2 is niet heel moeilijk: even de imports fixen en de Constructs zijn verplaatst naar een aparte package.

Conclusie

We hebben je laten zien hoe je aan de slag gaat met AWS CDK v2, hoe je de CLI installeert, je eerste CDK-project maakt en we hebben ook een aantal belangrijke concepten van de CDK uitgelegd, zoals Stacks, Constructs en Escape Hatches. De AWS CDK is een interessant alternatief op CloudFormation en ook Terraform, met als grote verschil dat je met AWS CDK een echte programmeertaal gebruikt in plaats van een puur declaratieve taal.