Exercices et Projets
1 - Exercices pratiques
Exercice 1 : CodeCommit
Objectif : Créer et configurer un repository CodeCommit.
# Tâches :
# 1. Créer un repository "my-app"
# 2. Configurer l'authentification HTTPS
# 3. Cloner et pousser du code
# 4. Créer une branche "develop"
# 5. Créer une Pull Request
Solution
# 1. Créer le repo
aws codecommit create-repository --repository-name my-app
# 2. Configurer Git credentials (via IAM Console)
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
# 3. Cloner et pousser
git clone https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/my-app
cd my-app
echo "# My App" > README.md
git add .
git commit -m "Initial commit"
git push origin main
# 4. Créer develop
git checkout -b develop
git push origin develop
# 5. PR via CLI
aws codecommit create-pull-request \
--title "Merge develop to main" \
--targets repositoryName=my-app,sourceReference=develop,destinationReference=main
Exercice 2 : CodeBuild
Objectif : Créer un projet CodeBuild avec buildspec.yml.
Créez un buildspec.yml qui :
- Installe Node.js 18
- Exécute npm install
- Lance les tests
- Build l'application
- Génère un rapport de couverture
Solution
# buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
commands:
- echo "Installing dependencies..."
pre_build:
commands:
- npm ci
- npm run lint
build:
commands:
- npm run build
- npm test -- --coverage
post_build:
commands:
- echo "Build completed on $(date)"
artifacts:
files:
- dist/**/*
- package.json
discard-paths: no
reports:
coverage:
files:
- 'coverage/cobertura-coverage.xml'
file-format: COBERTURAXML
cache:
paths:
- node_modules/**/*
Exercice 3 : ECR et Docker
Objectif : Push une image Docker vers ECR.
# Tâches :
# 1. Créer un repository ECR
# 2. Build une image Docker
# 3. Tag et push vers ECR
# 4. Configurer une lifecycle policy
Solution
# 1. Créer le repo
aws ecr create-repository \
--repository-name my-app \
--image-scanning-configuration scanOnPush=true
# 2 & 3. Build, tag et push
ECR_REPO=123456789.dkr.ecr.eu-west-1.amazonaws.com/my-app
aws ecr get-login-password | docker login --username AWS --password-stdin $ECR_REPO
docker build -t my-app:latest .
docker tag my-app:latest $ECR_REPO:latest
docker push $ECR_REPO:latest
# 4. Lifecycle policy
aws ecr put-lifecycle-policy \
--repository-name my-app \
--lifecycle-policy-text '{
"rules": [{
"rulePriority": 1,
"description": "Keep last 10",
"selection": {
"tagStatus": "any",
"countType": "imageCountMoreThan",
"countNumber": 10
},
"action": {"type": "expire"}
}]
}'
Exercice 4 : CodePipeline
Objectif : Créer un pipeline simple avec 3 stages.
Solution (CloudFormation)
AWSTemplateFormatVersion: '2010-09-09'
Resources:
Pipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: simple-pipeline
RoleArn: !GetAtt PipelineRole.Arn
ArtifactStore:
Type: S3
Location: !Ref ArtifactBucket
Stages:
- Name: Source
Actions:
- Name: Source
ActionTypeId:
Category: Source
Owner: AWS
Provider: CodeCommit
Version: '1'
Configuration:
RepositoryName: my-app
BranchName: main
OutputArtifacts:
- Name: SourceArtifact
- Name: Build
Actions:
- Name: Build
ActionTypeId:
Category: Build
Owner: AWS
Provider: CodeBuild
Version: '1'
Configuration:
ProjectName: !Ref BuildProject
InputArtifacts:
- Name: SourceArtifact
OutputArtifacts:
- Name: BuildArtifact
- Name: Deploy
Actions:
- Name: Deploy
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: S3
Version: '1'
Configuration:
BucketName: !Ref DeployBucket
Extract: 'true'
InputArtifacts:
- Name: BuildArtifact
2 - Projet complet : Application Web
Description
Déployez une application web complète avec :
- Code source dans CodeCommit
- Build et tests avec CodeBuild
- Images Docker dans ECR
- Déploiement ECS avec CodeDeploy
- Pipeline orchestré par CodePipeline
Architecture
Structure du projet
my-web-app/
├── src/
│ └── app.js
├── tests/
│ └── app.test.js
├── Dockerfile
├── buildspec.yml
├── appspec.yml
├── taskdef.json
└── infrastructure/
└── pipeline.yaml
Fichiers clés
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY src/ ./src/
EXPOSE 3000
CMD ["node", "src/app.js"]
# buildspec.yml
version: 0.2
env:
variables:
ECR_REPO: 123456789.dkr.ecr.eu-west-1.amazonaws.com/my-web-app
phases:
pre_build:
commands:
- aws ecr get-login-password | docker login --username AWS --password-stdin $ECR_REPO
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:-latest}
build:
commands:
- npm ci
- npm test
- docker build -t $ECR_REPO:$IMAGE_TAG .
post_build:
commands:
- docker push $ECR_REPO:$IMAGE_TAG
- printf '{"ImageURI":"%s"}' $ECR_REPO:$IMAGE_TAG > imageDetail.json
artifacts:
files:
- imageDetail.json
- appspec.yml
- taskdef.json
Déploiement
# 1. Déployer l'infrastructure
aws cloudformation deploy \
--template-file infrastructure/pipeline.yaml \
--stack-name my-web-app-pipeline \
--capabilities CAPABILITY_IAM
# 2. Pousser le code
git push origin main
# 3. Le pipeline se déclenche automatiquement
# 4. Surveiller
aws codepipeline get-pipeline-execution \
--pipeline-name my-web-app-pipeline \
--pipeline-execution-id <execution-id>
3 - Quiz de révision
-
Quelle est la différence entre CodeBuild et CodeDeploy ?
-
Comment sécuriser les secrets dans un buildspec.yml ?
-
Qu'est-ce qu'un artifact dans CodePipeline ?
-
Comment déclencher un pipeline automatiquement ?
-
Quelle stratégie de déploiement permet un rollback instantané ?
Réponses
-
CodeBuild compile le code et crée des artifacts. CodeDeploy déploie les artifacts sur les cibles.
-
Utiliser
secrets-manager:ouparameter-store:dans la sectionenvdu buildspec. -
Fichiers passés entre les stages (source code, build output, etc.).
-
Via webhooks (GitHub), CloudWatch Events/EventBridge, ou PollForSourceChanges.
-
Blue/Green deployment permet un rollback instantané en reroutant le trafic.
4 - Certification AWS DevOps Professional
Domaines couverts
| Domaine | Poids |
|---|---|
| SDLC Automation | 22% |
| Configuration Management & IaC | 17% |
| Monitoring and Logging | 15% |
| Policies and Standards | 10% |
| Incident and Event Response | 18% |
| High Availability and Fault Tolerance | 18% |
Ressources
- AWS DevOps Learning Path
- Exam Guide
- AWS Skill Builder courses
Résumé du cours
Félicitations ! Vous avez complété le cours AWS DevOps.
Vous maîtrisez maintenant :
- CodeCommit pour le contrôle de source
- CodeBuild pour les builds et tests
- CodeDeploy pour les déploiements
- CodePipeline pour l'orchestration
- ECR pour les images Docker
- CloudWatch et X-Ray pour le monitoring
- Les bonnes pratiques de sécurité et d'architecture
Prochaines étapes
- Pratiquer avec des projets réels
- Passer la certification AWS DevOps Professional
- Explorer AWS CDK pour l'IaC
- Étudier EKS pour Kubernetes sur AWS