3.2 - CI/CD et stratégies de déploiement (CodeDeploy, canary)
L'objectif 3.2 de l'AWS Certified Developer Associate couvre les pipelines CI/CD et les stratégies de déploiement. Un déploiement canary décale d'abord un petit pourcentage du trafic vers la nouvelle version, surveille les métriques, puis termine le déploiement, limitant l'impact ; linéaire et all-at-once sont les autres styles de décalage CodeDeploy. Dans un déploiement CodeDeploy, le fichier appspec.yml du bundle applicatif définit les hooks du cycle de vie et, pour EC2/sur site, où vont les fichiers. Quand un développeur veut que CodeBuild exécute de nombreux builds en parallèle sur plusieurs configurations, les batch builds répartissent des groupes de builds parallèles depuis un seul projet. Tu dois aussi connaître les étapes CodePipeline, CodeCommit, le blue-green avec CodeDeploy et les artefacts. Attends-toi à des mises en situation demandant le bon mécanisme CI/CD - canary, appspec.yml ou batch builds CodeBuild.
Décaler d'abord un petit % du trafic = déploiement canary. Hooks de cycle de vie CodeDeploy + mapping de fichiers = appspec.yml. Nombreux builds en parallèle sur plusieurs configs = batch builds CodeBuild.
Questions d'entraînement
1. Quelle stratégie de déploiement bascule d'abord un petit pourcentage du trafic vers la nouvelle version pour limiter le rayon d'impact ?
- Déploiement canary (bonne réponse)
- Déploiement tout d'un coup
- Déploiement par recréation
- Bascule complète en place
Un déploiement canary route une petite part du trafic vers la nouvelle version, la surveille, puis bascule le reste si tout va bien. Le tout-d'un-coup maximise le rayon d'impact en cas d'échec.
2. Quel framework est un raccourci de CloudFormation qui simplifie la définition de ressources serverless Lambda, API et DynamoDB ?
- AWS CDK
- AWS Amplify
- AWS SAM (bonne réponse)
- AWS OpsWorks
Le Serverless Application Model (SAM) est une extension de CloudFormation avec des types de ressources concis (AWS::Serverless::Function/Api/SimpleTable) et une CLI pour construire, tester en local et déployer.
3. Comment router un pourcentage du trafic vers une nouvelle version de Lambda et revenir en arrière automatiquement en cas d'erreurs ?
- Un alias pondéré avec CodeDeploy canary et alarmes CloudWatch (bonne réponse)
- Une seule version $LATEST toujours déployée en place à chaque changement
- Une allocation mémoire plus grande sur la fonction
- Une table globale DynamoDB pour le code
Un alias Lambda peut répartir le trafic par poids entre versions ; CodeDeploy effectue des bascules canary/linéaires et revient en arrière si une alarme CloudWatch se déclenche, pour des déploiements sûrs.
4. Un déploiement CodeDeploy vers Lambda doit basculer 10 % du trafic, attendre 5 minutes, puis basculer le reste. Quel nom de configuration correspond ?
- AllAtOnce
- Linear10PercentEvery1Minute
- Canary10Percent5Minutes (bonne réponse)
- HalfAtATime
Canary10Percent5Minutes bascule d'abord 10 %, attend 5 minutes pour surveiller, puis déplace les 90 % restants d'un coup. Les configs linéaires déplacent des incréments égaux à intervalle régulier.
5. Un développeur veut tester en local la Lambda et l'API d'une application SAM avant de déployer. Quelle commande utiliser ?
- aws cloudformation deploy
- sam local invoke / sam local start-api (bonne réponse)
- git push vers CodeCommit
- aws lambda update-function-code de façon répétée
La CLI SAM exécute les fonctions et API en local dans Docker : sam local invoke teste une fonction, et sam local start-api émule API Gateway, permettant une itération locale rapide avant sam deploy.
6. Dans un déploiement CodeDeploy, quel fichier définit les hooks de cycle de vie et, pour EC2, où copier les fichiers ?
- buildspec.yml à la racine du dépôt
- appspec.yml dans le bundle d'application (bonne réponse)
- template.yaml transformé par SAM
- Dockerfile construisant l'image de l'application
CodeDeploy lit appspec.yml (ou .json) : pour EC2/on-prem il mappe les fichiers et définit les hooks (BeforeInstall, AfterInstall, ApplicationStart, ValidateService) ; pour Lambda/ECS il définit les hooks de version/trafic.