Amazon DOP-C02: CI/CD-pijplijnen en Deploymentstrategieën — Studiegids
Onderdeel van de AWS DevOps Engineer Professional DOP-C02 — Studiegids. Oefen met geverifieerde antwoorden in het Amazon-examencentrum, of doe getimede oefentests op ExamRoll.io.
Overzicht
Een robuust CI/CD-systeem op AWS verbindt broncodebeheer, build, test, artifact governance, deployment-orkestratie en veilige releasestrategieën over meerdere accounts en Regions. De kern van de managed services—CodeCommit, CodeArtifact, CodeBuild, CodePipeline en CodeDeploy—elimineert serveronderhoud, integreert naadloos met IAM en KMS, en biedt eersteklas ondersteuning voor blue/green, canary, rolling en in-place deployments naar EC2/Auto Scaling, ECS en Lambda. Effectieve pipelines zijn ook afhankelijk van precieze triggers (webhooks, EventBridge, schedules), gedisciplineerd artifact management, build-caching voor snelheid, en ‘opinionated’ traffic shifting met health alarms voor automatische rollback. Voor enterprises zijn cross-account en cross-Region patronen verplicht, wat role assumption, regionale artifact stores en consistente encryptiebeleidsregels vereist.
Orkestratie met AWS Developer Tools
Gebruik CodeCommit als een private, hoogbeschikbare Git-service. Het integreert met EventBridge voor repository- en pull request-events, ondersteunt approval rule templates en gebruikt IAM voor fijnmazige autorisatie. Voor Git van derden (GitHub/Bitbucket), configureer CodePipeline source actions met webhooks voor nagenoeg real-time triggers.
CodeArtifact centraliseert package management voor meerdere ecosystemen (npm, Maven, PyPI, NuGet). Het ondersteunt upstream-verbindingen met publieke registries met caching, KMS-encryptie per repository, en ‘scoped’ auth tokens die automatisch verlopen. Integreer in CodeBuild door aws codeartifact login aan te roepen tijdens pre_build om package managers te configureren zonder langlevende secrets in te sluiten.
CodeBuild levert efemere, gecontaineriseerde builds zonder dat je workers hoeft te beheren. Belangrijkste mogelijkheden:
- Omgevingsisolatie en VPC-ondersteuning voor private dependencies. Schakel de ‘privileged mode’ in voor Docker-builds en activeer lokale Docker layer caching om het bouwen van images te versnellen.
- Omgevingsvariabelen uit drie bronnen: plaintext, SSM Parameter Store en Secrets Manager (standaard veilig, geen hardcoded secrets). Je kunt ook variabelen doorgeven vanuit CodePipeline.
- Caching om build-tijden te verkorten:
- Lokale caching: source cache, Docker layer cache en custom directories op de build host.
- S3-caching: herbruikbare dependency sets die gedeeld worden tussen builds.
- Artifact management: specificeer
primaryensecondaryArtifactsom meerdere outputs te publiceren (bijv. een app-bundel en een CloudFormation-template). Versleutel artifacts met KMS-sleutels en vermijd publieke ACL’s. - Rapportage: stuur logs naar CloudWatch Logs/S3. Gebruik rapporten voor testresultaten en CodeBuild-badges voor feedback op PR’s.
CodePipeline is de orkestrator. Definieer stages (source, build, test, deploy, approval) met actions die parallel of sequentieel kunnen worden uitgevoerd. Best practices:
- Triggers:
- Webhooks voor GitHub/Bitbucket-bronnen.
- EventBridge-rules voor branch-wijzigingen in CodeCommit; verifieer dat de rule bestaat als pipelines niet starten.
- Geplande pipelines via EventBridge schedule rules die
StartPipelineExecutionaanroepen.
- Artifact stores: een S3-bucket per Region die door de pipeline wordt gebruikt; gebruik een door de klant beheerde KMS-sleutel. Voeg voor cross-Region actions regionale artifact stores toe.
- Handmatige goedkeuringen met SNS of EventBridge om chat/webhooks te integreren voor nagenoeg real-time notificaties.
- Fijnmazige IAM: een pipeline service role met ’least privilege’; per-action roles worden aangenomen voor cross-account operaties.
CodeDeploy is de deployment engine die EC2/on-prem, ECS en Lambda-targets ondersteunt. Het beheert lifecycle hooks, traffic shifting, health checks en automatische rollback via CloudWatch alarms. Zorg ervoor dat EC2-instances de CodeDeploy-agent draaien, een instance profile hebben en uitgaande connectiviteit hebben met CodeDeploy-eindpunten (of egress via NAT). Overgeslagen events en no-op deployments duiden vaak op problemen met de agent, permissies of connectiviteit.
Deploymentstrategieën en de Levenscyclus van CodeDeploy
Kies de strategie op basis van risico, capaciteit en platform:
- In-place (EC2/on-prem): Update de app op bestaande instances. Combineer met OneAtATime, HalfAtATime of AllAtOnce deploymentconfiguraties. Koppel een ELB om instances leeg te maken (drain) en opnieuw te registreren.
- Rolling (ECS): Vervang taken in batches op dezelfde service. Native ECS rolling of beheerd via CodeDeploy als blue/green met een gecontroleerde verschuiving.
- Blue/green:
- EC2/Auto Scaling: Provisioneer een groene ASG, valideer en schakel dan het verkeer over van blauw naar groen. Optioneel kan de blauwe omgeving beëindigd of behouden worden.
- ECS: Maak een vervangende task set aan achter een tweede target group; valideer en wissel dan de listeners om.
- Lambda: Verschuif het verkeer van een alias naar een nieuwe functie-versie en monitor.
- Canary: Verschuif eerst een klein percentage (bv. 10%), observeer gedurende een bepaalde periode en voltooi dan.
- Linear: Verhoog het verkeer in gelijke stappen (bv. 10% elke 5 minuten).
CodeDeploy appspec.yml definieert wat te installeren en wanneer scripts uit te voeren:
- Voor EC2/On-Prem (YAML):
- files: waar bestanden te plaatsen.
- permissions: updates van bestandseigendom/modus zonder custom scripts.
- hooks (algemeen): ApplicationStop, BeforeInstall, Install, AfterInstall, ApplicationStart, ValidateService.
- Traffic control hooks (bij gebruik van een load balancer): BeforeBlockTraffic, AfterBlockTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- Gebruik vooraf gedefinieerde omgevingsvariabelen (bv. DEPLOYMENT_GROUP_NAME, DEPLOYMENT_ID, LIFECYCLE_EVENT) om gedrag dynamisch aan te passen zonder aparte revisies, zoals het schakelen van Apache logniveaus per deployment group.
- Voor ECS:
- resources: TargetService met TaskDefinition en LoadBalancerInfo.
- hooks: BeforeInstall, AfterInstall, AfterAllowTestTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- AfterAllowTestTraffic is ideaal voor smoke-/integratietests op de groene task set met een test listener.
- Voor Lambda:
- resources definiëren de functie, versie en alias die verschoven moet worden.
- hooks: BeforeAllowTraffic en AfterAllowTraffic.
Verkeer verschuiven en terugdraaien (rollback):
- Configureer deploymentconfiguraties:
- Lambda/ECS: Canary10Percent15Minutes, Canary10Percent5Minutes, Linear10PercentEvery1Minute, AllAtOnce, of aangepast.
- EC2 Blue/Green: All-at-once, canary, of linear verkeersomleiding via de listeners/target groups van de load balancer.
- Voeg CloudWatch-alarmen toe aan de deployment group voor automatische rollback bij fouten, 5xx-errors of custom metrics. Voor ECS kunnen alarmen 5xx-errors van de target group of service metrics monitoren; voor Lambda, monitor Errors/Throttles van de functie met alias/versie-dimensies.
- Gebruik lifecycle hooks (bv. AfterAllowTestTraffic) om validatie uit te voeren via Lambda of SSM; een non-zero exit code veroorzaakt een rollback.
Blue/Green en Traffic Shifting voor EC2, ECS en Lambda
EC2/Auto Scaling:
- Blue/green met CodeDeploy provisioneert een nieuwe Auto Scaling group voor groen, koppelt deze aan een aparte target group en schakelt vervolgens de ALB-listeners om. U kunt ervoor kiezen om de blauwe omgeving automatisch te beëindigen of te behouden voor een snelle rollback.
- Voor in-place op EC2, combineer met een ELB om instances netjes te deregistreren/registreren en de beschikbaarheid te beschermen. De deploymentconfiguratie bepaalt de batchgroottes en het tempo.
ECS:
- CodeDeploy integreert met ECS-services door gebruik te maken van twee target groups achter een ALB. Een vervangende task set (groen) wordt aangemaakt met de nieuwe task definition.
- Testverkeer gaat naar de groene target group via een speciale test listener; productieverkeer blijft op blauw tot aan de promotie.
- Canary of linear shifts verplaatsen het verkeer progressief naar groen terwijl CloudWatch-alarmen worden gemonitord. Gebruik AfterAllowTestTraffic om validatie uit te voeren (bijvoorbeeld een Lambda-functie die synthetische checks aanroept) vóór de overschakeling naar productie.
Lambda:
- CodeDeploy werkt een functie-alias bij naar een nieuwe versie met gewogen routering (weighted routing). Canary- en linear-patronen verplaatsen het verkeer geleidelijk in percentages. CloudWatch-alarmen op de alias sturen de automatische rollback aan.
- Met AWS SAM of CDK, stel AutoPublishAlias en DeploymentPreference in templates in om canary/linear-beleid en alarmen per functie te coderen.
Gewogen routering buiten CodeDeploy:
- Voor multi-Region of multi-stack load balancing zorgen Route 53 weighted records met health checks voor regionale verkeerssplitsing (bijvoorbeeld 1% naar een secundaire regio) en failover. Dit is een aanvulling op, maar geen vervanging van, de per-service traffic shifting van CodeDeploy.
Multi-Account en Multi-Region Delivery
Enterprise-pipelines bevinden zich doorgaans in een gecentraliseerd ’tooling’-account en deployen naar dev/test/prod-accounts in meerdere Regions:
- Cross-account:
- Specificeer in CodePipeline-acties een RoleArn in het doelaccount die de principal van de pipeline-rol vertrouwt. Gebruik per actie (CloudFormation, CodeDeploy, ECS, Lambda) permissies volgens het ’least-privilege’-principe.
- Voor CodeBuild dat toegang moet hebben tot resources in het doelaccount, laat de build een rol aannemen (STS) of gebruik een specifieke actierol per account, en niet de brede AdministratorAccess.
- Voor CodeDeploy naar EC2 beheert het doelaccount de applicatie/deployment group en de service-rol; de pipeline neemt een rol aan om CreateDeployment aan te roepen.
- Cross-Region:
- Voeg per Region een artifact store toe aan de pipeline-configuratie (een S3-bucket met een regionale KMS-sleutel). Werk de bucket policies bij zodat de pipeline-rol en de specifieke actierollen lees- en schrijfrechten hebben.
- Bouw regiospecifieke artifacts wanneer dat nodig is (bijvoorbeeld het packagen van Lambda-code met aws cloudformation package gericht op een S3-bucket die lokaal is voor die Region).
- CloudFormation deploy-acties in een externe Region moeten verwijzen naar de artifact store van die Region en kunnen een stack execution role in het doelaccount specificeren voor ’least privilege’.
Security, artifacts en governance:
- Houd artifact-buckets privé; vermijd publieke ACL’s zoals authenticated-read. Vertrouw op bucket policies die gescoped zijn op pipeline- en actierollen, met KMS-encryptie.
- Standaardiseer buildspecs om artifacts voorspelbaar te pushen (bijv. een application bundle voor EC2/CodeDeploy, taskdef.json en appspec voor ECS, gepackagede templates voor Lambda).
- Bevorder onveranderlijkheid (immutability) met het ‘pre-baken’ van AMI’s voor EC2, zodat de CodeDeploy-agent en de basis-runtime consistent zijn; dit vermindert ‘drift’ en de deploymenttijd.
- Gebruik EventBridge-regels om pipeline-gebeurtenissen te spiegelen naar notificaties, ChatOps of ticketingsystemen, en om handmatige goedkeuringsstappen (manual gates) te orkestreren.
Praktijkscenario
Spotify heeft behoefte aan veiligere releases voor honderden microservices met een gemengd compute-landschap (ECS op Fargate, op EC2 gebaseerde services en Lambda). Ze vereisen canary- en blue/green-deployments met geautomatiseerde tests voordat er productieverkeer wordt toegelaten, governance voor artifacts en promotie naar meerdere Regions, terwijl de prod-omgeving in een apart account blijft.
- Repositories en packages opzetten
- Gebruik CodeCommit voor privé-repositories en EventBridge-gestuurde PR/test-automatisering. CodeArtifact host npm-, Maven- en PyPI-dependencies met upstreams en KMS-encryptie om de controle op de supply chain te standaardiseren. Waarom: Centrale IAM/KMS-integratie en geen externe webhooks nodig voor kritieke repositories; CodeArtifact levert gecachte, gecureerde packages.
- Bouwen en testen
- Maak per service CodeBuild-projecten met VPC-integratie, lokale caching (Docker-laag en broncode) en omgevingsvariabelen die uit Secrets Manager/Parameter Store worden gehaald. Bouw images en push ze naar ECR; genereer secundaire artifacts (taskdef.json/appspec.yaml of gepackagede CloudFormation-templates). Waarom: Kortstondige (ephemeral), geïsoleerde builds, sterke afhandeling van secrets, snellere cycli door caching, en meerdere outputs ondersteunen zowel container- als serverless-packaging.
- Pipelines orkestreren
- Maak een gecentraliseerde CodePipeline in een tooling-account met de volgende stages: Source, Build, Unit Tests, Deploy-to-Staging, Automated Tests, Manual Approval, Deploy-to-Prod. Triggers komen van EventBridge bij CodeCommit-updates; een nachtelijk ingeplande EventBridge-regel start de integratietests. Waarom: Een ‘opinionated’, auditeerbare flow met goedkeuringsstappen (gates) en zowel event- als schedule-gestuurde uitvoeringen.
- Blue/green- en canary-deployments
- ECS-services gebruiken CodeDeploy blue/green met twee target groups en canary traffic shifting; validatie wordt uitgevoerd in de AfterAllowTestTraffic-fase via een Lambda die contracttests en synthetische controles uitvoert. EC2-services gebruiken CodeDeploy in-place met OneAtATime of blue/green ASG-swaps wanneer de capaciteit dit toelaat. Lambda-functies deployen met CodeDeploy via Canary10Percent15Minutes en CloudWatch-alarms op Errors en 5xx-fouten van API Gateway. Waarom: Eersteklas verkeersregeling per runtime en automatische rollback bij het afgaan van een alarm minimaliseren de impact op de klant.
- Cross-account- en cross-Region-promotie
- De pipeline neemt per omgeving rollen aan in de dev/test/prod-accounts. Configureer voor us-east-1 en eu-west-1 regionale artifact stores en regionale KMS-sleutels; CodeBuild produceert regiospecifieke gepackagede templates en uploadt artifacts naar S3-buckets die lokaal zijn voor die Region. CloudFormation-acties in elk account/elke Region gebruiken stack execution roles; CodeDeploy-acties richten zich op omgevingsspecifieke applicaties/deployment groups. Waarom: Sterke isolatie van de prod-omgeving, ’least privilege’ via het aannemen van rollen, en compliante encryptie met lage operationele overhead.
- Artifact governance en security
- Dwing het gebruik van privé S3 artifact-buckets af met restrictieve policies en verwijder alle publieke ACL’s. Onderteken (sign) container-images en templates; sla SBOM’s op als build-artifacts. Gebruik IAM condition keys om productieacties te beperken tot pipelines in het tooling-account. Waarom: Voorkomt datalekken, verbetert de herleidbaarheid (provenance) en sluit aan bij best practices voor de supply chain.
- Observability en notificaties
- Koppel CloudWatch-alarms aan alle deployment groups; EventBridge-regels sturen uitvoerings- en goedkeuringsgebeurtenissen van CodePipeline door naar een SNS-topic en een Lambda die berichten naar Slack post. Waarom: Snellere feedback, geautomatiseerde rollbacks en ‘human-in-the-loop’-goedkeuringen waar nodig.
Dit ontwerp verenigt heterogene runtimes onder één beheerde toolchain, biedt veilige uitrolstrategieën met geautomatiseerde verificatie, vermindert onderhoud door zelf-gehoste CI/CD-infrastructuur te elimineren, en schaalt wereldwijd met een duidelijke scheiding van verantwoordelijkheden.
Alle domeinen · Infrastructuur als Code en Configuratiebeheer →
Oefen deze vragen → · Getimede oefening op ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Slaag voor je examen →