Werken met CDK-constructs
AWS CDK-apps steunen op constructs als essentiële bouwelementen. Je infrastructuurcode wordt modularer, onderhoudbaarder en leesbaarder wanneer je constructs beheerst, of je nu ingebouwde serviceconstructs gebruikt of je eigen herbruikbare patronen maakt.
In deze sectie leer je L2 (high-level) constructs gebruiken en hoe je custom constructs ontwikkelt die repetitieve patronen verminderen.
L2-constructs gebruiken
L2-constructs zijn CDK-native abstracties die eenvoudiger te gebruiken zijn dan ruwe CloudFormation (L1). Ze hebben zinnige defaults en typeveiligheid en vereisen vaak minder regels code om een AWS-resource op te zetten.
Waarom L2-constructs gebruiken?
- Minder boilerplate — minder verplichte velden vergeleken met L1
- Leesbaardere en idiomatische Python-code
- Bevat hulpmethoden zoals
.add_to_role_policy()of.add_event_notification() - Beheert automatisch afhankelijkheden tussen resources
Voorbeeld: een S3-bucket maken met L2
from aws_cdk import aws_s3 as s3
# Create a versioned and encrypted S3 bucket
bucket = s3.Bucket(
self,
"MyBucket",
versioned=True,
encryption=s3.BucketEncryption.S3_MANAGED
)
Het equivalente L1-construct, s3.CfnBucket, zou alle eigenschappen handmatig moeten instellen en configuratie als ruwe dicts moeten definiëren—veel minder intuïtief.
Andere veelvoorkomende L2-constructs zijn onder meer:
lambda_.Function()voor AWS Lambdadynamodb.Table()voor DynamoDBsqs.Queue()voor SQSsns.Topic()voor SNS
Custom constructs maken
Je infrastructuur groeit met terugkerende patronen, zoals het maken van Lambda-functies met bepaalde permissies en S3-buckets. Custom constructs zijn de ideale oplossing voor dit specifieke scenario.
Custom constructs laten je gerelateerde resources combineren tot één logische eenheid die je kunt hergebruiken over stacks of projecten heen.
Wanneer maak je een custom construct:
- Wanneer je 3+ resources hebt die altijd samen worden geprovisioneerd
- Wanneer je herbruikbare logica wilt inkapselen
- Wanneer je code-duplicatie over stacks wilt verminderen
Voorbeeld: een herbruikbaar S3 + Lambda-patroon
from constructs import Construct
from aws_cdk import aws_s3 as s3, aws_lambda as lambda_
class StorageWithLambda(Construct):
def __init__(self, scope: Construct, id: str) -> None:
super().__init__(scope, id)
# S3 bucket
self.bucket = s3.Bucket(self, "MyBucket")
# Lambda function
self.function = lambda_.Function(
self,
"MyFunction",
runtime=lambda_.Runtime.PYTHON_3_9,
handler="index.handler",
code=lambda_.Code.from_asset("lambda")
)
# Grant Lambda access to the S3 bucket
self.bucket.grant_read_write(self.function)
Je kunt dit construct nu in elke stack als volgt gebruiken:
from my_project.storage_with_lambda import StorageWithLambda
storage = StorageWithLambda(self, "ReusableComponent")
Maak, voordat je het bovenstaande draait, in de projectroot een map lambda en maak een bestand index.py met de volgende inhoud:
def handler(event, context):
return {
"statusCode": 200,
"body": "Hello from Lambda!"
}
Tips voor hergebruik
- Voorzie bestanden van het prefix
construct_of plaats ze in een mapconstructs/ - Stel outputs bloot zoals
self.bucketofself.functionvoor flexibiliteit - Houd elk construct gefocust op één verantwoordelijkheid
CDK-apps testen en synthetiseren
Na het schrijven van je infrastructuurcode is het essentieel te controleren wat de CDK gaat deployen en idealiter te testen dat je stacks zich naar verwachting gedragen. De AWS CDK biedt tools om CloudFormation-templates te synthetiseren en geautomatiseerde tests te schrijven om misconfiguraties vóór deployment op te vangen.
Templates synthetiseren
Het commando cdk synth genereert de CloudFormation-template uit je CDK-code.
cdk synth
Wanneer je dit draait, doet CDK het volgende:
- Laadt je app (via
app.py) - Resolvet alle constructs en stacks
- Geeft ruwe YAML/JSON CloudFormation-templates als output

Gesynthetiseerde CloudFormation-template
Standaard gaat de output naar je terminal, maar je kunt desgewenst ook naar een bestand schrijven:
cdk synth > template.yaml
Dit is handig wanneer:
- Je de daadwerkelijke template wilt inspecteren vóór deployment
- Je de structuur van een stack debugt
- Je de template wilt delen met teams die geen CDK gebruiken
Infrastructuur testen
Hoewel infrastructuur als code testen ongebruikelijk kan klinken, is het erg nuttig, vooral wanneer je stacks groot worden of conditionele logica, lussen of herbruikbare constructs bevatten.
De AWS CDK biedt de assertions-module om gesynthetiseerde stacks te testen.
Een eenvoudige test schrijven met pytest
Hier is een voorbeeldtest die controleert of een specifieke resource (zoals een S3-bucket) in de stack is opgenomen:
# test/test_cdk_datacamp_stack.py
import aws_cdk as cdk
from aws_cdk.assertions import Template
from cdk_datacamp.cdk_datacamp_stack import CdkDatacampStack
def test_s3_bucket_created():
app = cdk.App()
stack = CdkDatacampStack(app, "TestStack")
template = Template.from_stack(stack)
# Assert that an S3 bucket exists
template.resource_count_is("AWS::S3::Bucket", 1)
Om de tests uit te voeren, zorg dat pytest is geïnstalleerd:
pip install -U pytest
Draai vervolgens:
pytest
Als alles slaagt, zie je een groen vinkje. Zo niet, dan vertelt de testoutput je wat er ontbreekt.
Pytest-output die het succesvol uitvoeren van alle testcases voor de AWS CDK-stack toont
Je kunt ook validatie opnemen in je CDK-stack. Validatietests zijn runtimecontroles binnen je construct- of stackcode die invoer valideren voordat deployment plaatsvindt. Ze helpen misconfiguraties vroeg in de ontwikkelcyclus op te vangen of beperkingen af te dwingen.
Stel dat we de bucket_name als contextvariabele willen doorgeven, maar we willen valideren dat:
- De bucketnaam niet leeg is
- Hij voldoet aan S3-naamregels (bijv. alleen lowercase)
Maak een bestand genaamd test/test_storage_with_lambda.py en voeg het volgende toe:
import pytest
from aws_cdk import App, Stack
from cdk_datacamp.storage_with_lambda import StorageWithLambda
def test_missing_bucket_name():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="bucket_name is required"):
StorageWithLambda(stack, "FailingConstruct", bucket_name=None)
def test_bucket_name_uppercase():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="must be lowercase"):
StorageWithLambda(stack, "FailingConstruct", bucket_name="InvalidName")
Om de validatie te testen, voer je onderstaand commando uit:
test/test_storage_with_lambda.py
Pytest-output die het succesvol uitvoeren van alle testcases voor de AWS CDK-stack toont
Wanneer testen gebruiken:
- Je herbruikbare constructs of patronen maakt.
- Het implementeren van tests dient om standaard technische vereisten onder teamleden vast te leggen.
- Je regressies of onbedoelde wijzigingen tijdens CI/CD wilt opvangen.
Wil je je CDK-kennis versterken in een interviewsetting? Deze top AWS DevOps-interviewvragen helpen je voorbereiden.
Best practices en tips voor werken met de AWS CDK
Nadat je het maken en deployen van CDK-stacks onder de knie hebt, is het goed om best practices te volgen om je infrastructuurcode schoon, veilig en schaalbaar te houden. In deze sectie bespreken we hoe je grote projecten structureert, security goed aanpakt en CDK integreert in CI/CD-pijplijnen.
Grote projecten organiseren
Naarmate je CDK-app groeit, wordt het essentieel om code op te delen in beheersbare eenheden.
Gebruik meerdere stacks
Splits je infrastructuur op per aandachtsgebied. Bijvoorbeeld:
- NetworkingStack: VPC's, subnets, security groups
- ComputeStack: EC2, Lambda
- StorageStack: S3, DynamoDB
Dit laat je delen van je infrastructuur onafhankelijk deployen, testen of vernietigen. Zo kun je het opnemen in app.py:
network_stack = NetworkingStack(app, "NetworkingStack")
compute_stack = ComputeStack(app, "ComputeStack")
Je kunt ook resources tussen stacks doorgeven met outputs of referenties.
Maak herbruikbare geneste constructs
Kapsel gerelateerde resources (zoals een Lambda en de permissies) in een custom construct, zoals je deed met StorageWithLambda. Dit verbetert de leesbaarheid en herbruikbaarheid over stacks of apps heen.
Gebruik omgevingsspecifieke configuratie
Ondersteun meerdere omgevingen (dev, staging, prod) met:
cdk.jsonmet contextwaarden- CLI-overrides:
cdk deploy -c env=prod - Conditionele logica in je stacks
env = app.node.try_get_context("env")
if env == "prod":
bucket_name = "mycompany-prod-logs"
Beveiliging en permissies
In elk infrastructuurproject moet security prioriteit krijgen tijdens geautomatiseerde deployments met AWS CDK. In de volgende sectie zie je hoe je IAM-resources veilig beheert met het principe van minimale privileges.
Definieer IAM-rollen in plaats van defaults te gebruiken
CDK-constructs, waaronder Lambda of ECS-taken, maken automatisch IAM-rollen aan. Hoewel dit handig is, kan het je controle over permissies en naamgeving beperken.
Definieer in plaats daarvan rollen expliciet:
from aws_cdk import aws_iam as iam
execution_role = iam.Role(
self,
"LambdaExecutionRole",
assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
description="Custom role for Lambda with least privilege",
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")
]
)
Deze rol staat standaard alleen logging toe en verder niets.
Pas het principe van minimale privileges toe
Vermijd het gebruik van "*" in actions of resources, tenzij het echt niet anders kan.
Voorbeeld:
lambda_fn.add_to_role_policy(
iam.PolicyStatement(
actions=["*"],
resources=["*"]
)
)
Gebruik ook waar mogelijk resource-specifieke grants:
bucket.grant_read(lambda_fn)
Dit genereert automatisch het benodigde beleid met beperkt toegangsbereik tot de S3-bucket.
Gebruik beheerde policies waar mogelijk
Door AWS beheerde policies vereenvoudigen het onderhoud en verkleinen de kans op fouten.
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSQSReadOnlyAccess")
Je kunt deze koppelen aan custom rollen voor services zoals ECS, Batch of Step Functions.
CI/CD-integratie
De AWS CDK wordt extra krachtig door integratie met moderne CI/CD-pijplijnen. CDK ondersteunt geautomatiseerde infrastructuurlevering via versiebeheerde codedeployments, die werken met GitHub, GitLab en AWS-native services zoals CodePipeline. Dit vermindert menselijke fouten, verkort feedbackcycli en maakt deployment over meerdere omgevingen mogelijk.
GitHub Actions: CDK-deployments automatiseren
Je kunt GitHub Actions gebruiken om CDK-stacks te synthetiseren, diffen, testen en deployen bij elke push of pull request.
Bekijk deze .github/workflows/deploy.yml:
name: Deploy CDK App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
pip install -r requirements.txt
npm install -g aws-cdk
- name: Run unit tests
run: pytest
- name: CDK Synth
run: cdk synth -c environment=prod
- name: Deploy to AWS
run: cdk deploy --require-approval never
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Gebruik cdk diff in PR's om infraveranderingen te bekijken vóór het mergen.
CDK-pipelines: Native CDK CI/CD met CodePipeline
Voor volledig beheerde deployments binnen AWS biedt CDK een module genaamd aws_cdk.pipelines, waarmee je je volledige CI/CD-pipeline als code kunt definiëren, net als infrastructuur.
Hier is een vereenvoudigd voorbeeld:
from aws_cdk import pipelines, SecretValue, Stack
from constructs import Construct
from my_app_stage import MyAppStage # replace with your actual stage import
class PipelineStack(Stack):
def __init__(
self,
scope: Construct,
construct_id: str,
**kwargs
) -> None:
super().__init__(scope, construct_id, **kwargs)
# Define the source of the pipeline from a GitHub repository
source = pipelines.CodePipelineSource.git_hub(
repo_string="your-org/your-repo", # GitHub org/repo
branch="main",
authentication=SecretValue.secrets_manager("GITHUB_TOKEN")
)
# Define the CodePipeline and its synthesis step
pipeline = pipelines.CodePipeline(
self,
"MyAppPipeline",
synth=pipelines.ShellStep(
"Synth",
input=source,
commands=[
"pip install -r requirements.txt",
"npm install -g aws-cdk",
"cdk synth"
]
)
)
# Add an application stage (e.g., production deployment)
pipeline.add_stage(
MyAppStage(self, "ProdStage")
)
In de bovenstaande code:
SecretValue.secrets_manager("GITHUB_TOKEN")haalt je GitHub-token veilig op uit Secrets Manager.MyAppStagemoet een klasse zijn dieStageuitbreidt en je daadwerkelijke CDK-stacks omhult.
Als je ML-systemen deployt, wordt het integreren van CDK met continuous deployment-praktijken behandeld in onze cursus CI/CD for Machine Learning.
Conclusie
Deze tutorial liet je zien hoe je cloudinfrastructuur in Python opzet en deployt met AWS Cloud Development Kit (CDK). Je hebt geleerd om:
- Je eerste CDK-stack te maken.
- S3-buckets en Lambda-functies als resources te definiëren en te valideren.
- Een project te organiseren met custom constructs en multi-stackpatronen.
- Security-best practices toe te passen met het principe van minimale privileges.
- Deployments te automatiseren door GitHub Actions te combineren met CDK Pipelines.
- Tests te schrijven om je infrastructuurlogica te valideren.
Nu je je eerste CDK-app hebt gedeployd, zijn dit een paar manieren om verder te groeien:
- Gebruik geparametriseerde omgevingen voor dev/staging/prod
- Voeg CloudWatch-alarms, API Gateway of Step Functions toe
- Verken CDK-constructs zoals
aws_s3_deployment,aws_ecs_patternsencdk.pipelines - Zet je constructs om in een interne Python-library voor hergebruik
Blijf leren en bouwen: bekijk de cursus Introduction to AWS Boto in Python!
FAQs
Wat is AWS CDK en hoe verschilt het van CloudFormation of Terraform?
Met AWS CDK definieer je cloudinfrastructuur met programmeertalen zoals Python, terwijl CloudFormation en Terraform vertrouwen op JSON/YAML of HCL. CDK biedt hogere abstractie en herbruikbaarheid via constructs.
Moet ik CloudFormation kennen om AWS CDK te gebruiken?
Nee, CDK abstraheert het meeste van de complexiteit van CloudFormation. Inzicht in CloudFormation helpt echter bij het gebruik van lower-level constructs of het troubleshooten van deployments.
Kan ik meerdere omgevingen (bijv. dev, prod) deployen met AWS CDK?
Ja! CDK ondersteunt omgevingsspecifieke configuratie met contextwaarden en CLI-flags zoals cdk deploy -c env=prod.
Hoe test ik mijn CDK-infrastructuurcode?
Je kunt pytest gebruiken, samen met CDK's assertions en de template-module, om unittests te schrijven die de resources en configuraties van je stack verifiëren vóór deployment.
Wat gebeurt er achter de schermen wanneer ik cdk deploy draai?
cdk deploy synthetiseert je Python-code naar een CloudFormation-template, uploadt deze naar AWS en provisioneert de gedefinieerde resources in je account.
Rahul Sharma is een AWS Ambassador, DevOps-architect en technisch blogger, gespecialiseerd in cloudcomputing, DevOps-praktijken en open-sourcetechnologieën. Met expertise in AWS, Kubernetes en Terraform maakt hij complexe concepten eenvoudiger voor zowel studenten als professionals via boeiende artikelen en tutorials. Rahul is gepassioneerd over het oplossen van DevOps-uitdagingen en het delen van inzichten om de techcommunity te versterken.


Cloudinfrastructuur beheren met ruwe JSON- of YAML-templates kan tijdrovend en foutgevoelig zijn. De AWS Cloud Development Kit (CDK) verandert dat door je cloudresources te laten definiëren met moderne programmeertalen zoals Python, TypeScript, Java en C#.
Met CDK wordt infrastructuur code die herbruikbaar, testbaar en versiebeheerbaar is. Het stelt je in staat te denken als een developer, zelfs bij het inrichten van complexe cloudsystemen.
In deze tutorial leer je hoe je een AWS CDK-project opzet met Python. We lopen door het proces van het schrijven van je eerste stack, het toevoegen van een essentiële AWS-resource en het uitrollen naar je AWS-account. Aan het eind snap je duidelijk hoe CDK werkt en hoe je het gebruikt om infrastructuur op een developer-vriendelijke manier, met code, te beheren.
Wil je de achterliggende principes van tools zoals AWS CDK beter begrijpen? Verken dan de basis in onze cursus DevOps Concepts.
Vereisten
Voordat we in code duiken met AWS CDK, zorg dat je omgeving goed is ingesteld. Dit heb je nodig:
AWS-account om te experimenteren
Je hebt toegang tot een AWS-account nodig om de applicatie te deployen die we gaan bouwen. Als je systeem al is geconfigureerd met inloggegevens voor een gebruiker met administratorrechten, kun je dit overslaan.
Als je nog geen AWS-account hebt, maak er hier een aan.
Voor een gestructureerd leerpad met AWS-basisprincipes is de AWS Cloud Practitioner-track een uitstekend startpunt.
Administratorgebruiker
Je hebt een gebruiker nodig met programmatische toegang en volledige permissies om mee te doen.
Noteer op het laatste scherm je Access key ID en Secret access key. Die heb je in de volgende stap nodig.
Je AWS-inloggegevens configureren
Open een terminal en voer uit:
Je wordt gevraagd de inloggegevens uit de IAM-console in te voeren:
Kies een IDE voor development
Met de AWS CDK kunnen developers werken in een volledige programmeeromgeving in plaats van met YAML- of JSON-templates. Deze volwaardige omgeving laat je je favoriete IDE gebruiken, met voordelen zoals codecompletion, realtime linting en refactoringtools voor efficiënt beheer van infrastructuurcode.
Voor de beste ontwikkelervaring met de Python-CDK raad ik een IDE aan die het volgende ondersteunt:
Installeer Python en pip
Om AWS CDK met Python te gebruiken, heb je Python versie 3.8 of hoger nodig op je systeem. Als je dat nog niet hebt, download dan de nieuwste versie via de officiële Python-website.
Als je Windows gebruikt, zorg dan dat Python is toegevoegd aan de
PATH-omgevingsvariabele van je systeem. Om te controleren open je een terminal of command prompt en voer je uit:Als je een foutmelding als “command not found” ziet, staat Python waarschijnlijk niet in je
PATH. De eenvoudigste oplossing is het vakje “Add Python 3.x to PATH” aan te vinken tijdens de installatie.Je hebt ook pip nodig, de Python package installer, om later AWS CDK-afhankelijkheden te installeren. De meeste moderne Python-distributies worden geleverd met pip.
Als het niet is geïnstalleerd, volg dan de officiële pip-installatiegids.
Aan de slag met AWS CDK
Voordat we code schrijven, is het belangrijk te begrijpen wat AWS CDK is, waarom het bestaat en hoe het past binnen de bredere wereld van infrastructure as code (IaC). In deze sectie maak je kennis met de kernconcepten achter CDK en zie je hoe het zich verhoudt tot andere populaire IaC-tools.
Wat is AWS CDK en waarom wordt het gebruikt?
AWS Cloud Development Kit (CDK) is een open-source framework waarmee je cloudinfrastructuur kunt creëren via bekende programmeertalen, waaronder Python, TypeScript, Java en C#.
Met de CDK genereer je CloudFormation-templates programmatisch met echte code in plaats van handmatig JSON- of YAML-templates te schrijven.
Dit betekent dat je kunt:
In de kern draait de CDK om drie hoofdconcepten:
Visuele hiërarchie van een AWS CDK-app
CDK vs Terraform vs CloudFormation
De onderstaande tabel beschrijft de verschillen tussen de tools die in AWS beschikbaar zijn om infrastructuur te beheren.
Functie
AWS CDK
Terraform
AWS CloudFormation
Taalondersteuning
Python, TypeScript, Java, C#
HCL (declaratief)
YAML / JSON
Abstractieniveau
Hoog (OOP + libraries)
Middel
Laag
Modulariteit
Sterk (constructs, klassen)
Sterk (modules)
Zwak (geneste stacks)
Statebeheer
Afgehandeld door CloudFormation
Afgehandeld door Terraform (tfstate)
Afgehandeld door CloudFormation
Multi-cloud
Alleen AWS
Ja
Alleen AWS
Ondersteunde talen en vereisten
De AWS CDK ondersteunt meerdere programmeertalen, zodat developers kunnen kiezen waar ze het meest vertrouwd mee zijn:
In deze tutorial focussen we op Python, maar de kernconcepten gelden voor alle ondersteunde talen.
Installatie en setup
Nu je omgeving klaar is, is het tijd om met Python je eerste AWS CDK-app te scaffolden. Het CDK-commando
initzet de volledige projectstructuur op, inclusief bestanden, mappen en een virtual environment, zodat je snel aan de slag kunt.Maak een projectmap
Open je terminal en voer het volgende commando uit om een nieuwe map te maken en erin te navigeren:
Initialiseer de CDK-app
Dit maakt een starterproject met een basisvoorbeeld dat onder meer bevat:
cdk_datacamp_stack)cdk.json-bestand dat configureert hoe je CDK-app draait.venv) voor Python-afhankelijkhedenWanneer het commando klaar is, zie je output vergelijkbaar met dit:
CDK Python-project scaffold
Virtual environment instellen
Als het
cdk init-proces niet automatisch een virtual environment maakt, kun je dat handmatig doen:Zodra deze is geactiveerd, installeer je de vereiste dependencies:
CDK-concepten begrijpen
Voordat we dieper in de code duiken, bekijken we hoe de kerncomponenten van AWS CDK—apps, stacks en constructs—in de praktijk samenwerken. Nu je weet wat elk onderdeel is, is het belangrijk te zien hoe ze interacteren om een schaalbare, modulaire infrastructuur te vormen.
We lichten ook de verschillende constructniveaus (L1, L2, L3) toe en bekijken de CDK-libraries die dit mogelijk maken.
Apps, stacks en constructs
Nu je uit de vorige secties weet wat App, Stack en Construct zijn, bekijken we hoe ze samenwerken in een CDK-applicatie.
Denk aan het bouwen van een huis:
In code ziet de relatie er zo uit:
Hier instantieert de App een Stack, die Constructs bevat zoals een S3-bucket.
Constructniveaus begrijpen: L1, L2 en L3
In AWS CDK bestaan constructs op drie abstractieniveaus, zodat je flexibiliteit hebt afhankelijk van de gewenste controle of eenvoud.
Niveau 1 (L1) – CloudFormation-constructs
Dit zijn de ruwe bouwstenen die rechtstreeks worden gegenereerd uit de AWS CloudFormation-specificatie. Elke AWS-resource in CloudFormation heeft een equivalent L1-construct in CDK; hun namen beginnen altijd met “Cfn”.
L1-constructs bieden elke mogelijke configuratieoptie maar geen abstracties of defaults. Ze zijn ideaal als je volledige controle nodig hebt of nieuwere AWS-functies wilt gebruiken die nog niet in hogere niveaus zijn verpakt.
s3.CfnBucketNiveau 2 (L2) – AWS CDK-native constructs
L2-constructs bieden een hoger, developer-vriendelijk abstractieniveau bovenop L1-constructs. Het zijn opiniërende componenten met zinnige defaults en ingebouwde methoden die alledaagse taken vereenvoudigen. Ze zijn ontworpen voor dagelijks gebruik en verminderen boilerplate, terwijl ze toch veel maatwerk toelaten.
s3.Bucket– Je maakt een versioned bucket met slechts één regel code.Niveau 3 (L3) – Patroonconstructs
L3-constructs zijn abstracties die meerdere AWS-resources bundelen tot gangbare architectuurpatronen. Ze kunnen door AWS worden aangeboden of als herbruikbare componenten door de community of door jou worden gebouwd. Gebruik L3-constructs om complexiteit te kapselen en infrastructuurpatronen te hergebruiken over projecten of teams heen.
aws_s3_deployment.BucketDeployment– Combineert een S3-bucket en een deploymentstrategie om uploads van assets te automatiseren.De meeste developers beginnen met L2-constructs en gebruiken L1 alleen wanneer nodig. L3 wordt handig naarmate je project groeit en je terugkerende patronen wilt abstraheren in herbruikbare componenten.
CDK-libraries en modules
Je werkt niet rechtstreeks met ruwe CloudFormation wanneer je met AWS CDK bouwt. In plaats daarvan gebruik je de modulaire libraries van CDK, die constructs bieden voor AWS-services zoals S3, Lambda, IAM en meer. Alle AWS-servicemodules zijn gebundeld onder het kernpakket
aws-cdk-liben zijn verder per service georganiseerd.Veelgebruikte libraries in Python
Hieronder staan enkele van de meest gebruikte libraries (of modules) uit
aws-cdk-libin Python-projecten:aws_cdk.aws_s3– Voor het maken van S3-bucketsaws_cdk.aws_lambda– Voor het definiëren van Lambda-functiesaws_cdk.aws_iam– Voor het beheren van rollen en permissiesaws_cdk.aws_dynamodb– Voor het werken met DynamoDB-tabellenaws_cdk.aws_ec2– Voor netwerkcomponenten zoals VPC's en security groupsaws_cdk.aws_sns/aws_cdk.aws_sns_subscriptions– Voor SNS-topics en hun subscribersDeze modules importeer je alleen wanneer nodig, zodat je project lichtgewicht en modulair blijft.
Hoe importeer en gebruik je een CDK-module
Om een specifieke AWS-service te gebruiken, importeer je de module en roep je de constructklassen aan. Bijvoorbeeld, om een S3-bucket te maken:
Dit voorbeeld gebruikt het L2-construct
s3.Bucket, dat ingebouwde defaults bevat zoals opties voor encryptie en versiebeheer.Als je een andere service nodig hebt, importeer je de module op dezelfde manier:
Let op: in je
requirements.txtheb je meestal alleen nodig:Met deze twee packages heb je toegang tot alle AWS CDK-constructs en de kernfunctionaliteit van het framework.
Je eerste CDK-stack maken
Na de interne werking van AWS CDK te hebben geleerd, kun je deze kennis toepassen. In de volgende sectie bouw je een werkende CDK-stack met Python. Je maakt via code een projectstructuur en implementeert echte AWS-resources, zoals S3-buckets en Lambda-functies, voordat je ze naar je AWS-account deployt.
Een nieuw project scaffolden
Wanneer je het commando
cdk initmet de vlag--language pythondraait, zet het een volledige projectstructuur op die er ongeveer zo uitziet:Mapstructuur van een AWS CDK Python-project
Het bestand
app.pyis waar de App is gedefinieerd, en incdk_datacamp_stack.pyschrijf je de code voor je Stack en Constructs.Tip: Je kunt het stackbestand of de klasse hernoemen zodat het past bij het doel van je app, zoals
storage_stack.pyofmonitoring_stack.py.AWS-resources toevoegen
Laten we nu enkele AWS-resources aan je CDK-stack toevoegen. Je schrijft dit binnen de
__init__()-methode van jeStack-klasse in het bestandcdk_datacamp_stack.py.S3-bucket
Lambda-functie
De stack deployen
Zodra je resources zijn toegevoegd, is het tijd om ze naar AWS te deployen.
Activeer in je terminal je virtual environment en voer uit:
Dit zal het volgende doen:
Als je de stack voor het eerst deployt, word je gevraagd de wijzigingen goed te keuren.
Na de deployment kun je: