MODULE 15 - Infrastructure as Code (CloudFormation)
Vue d'Ensemble
Cette dernière semaine introduit l'Infrastructure as Code (IaC) avec AWS CloudFormation. Vous apprendrez à définir votre infrastructure dans des fichiers de configuration versionnables et reproductibles.
Projet Final
ce module inclut le Projet Final (30%) : création d'un template CloudFormation complet.
LocalStack Supporte CloudFormation !
LocalStack émule CloudFormation (basique). Vous pourrez tester vos templates localement !
Objectifs d'Apprentissage
- Comprendre les principes de l'Infrastructure as Code
- Écrire des templates CloudFormation (YAML)
- Déployer et gérer des stacks
- Diagnostiquer les erreurs de déploiement
- Appliquer les bonnes pratiques IaC
Contenu de la Semaine
1. Pourquoi Infrastructure as Code ?
┌─────────────────────────────────────────────────────────────┐
│ INFRASTRUCTURE AS CODE │
├─────────────────────────────────────────────────────────────┤
│ │
│ AVANT (Manuel) APRÈS (IaC) │
│ ────────────── ────────── │
│ │
│ • Clics dans la console • Fichiers de code │
│ • Documentation obsolète • Code = Documentation │
│ • "Ça marchait hier..." • Reproductible │
│ • Environnements différents • Identiques │
│ • Difficile à auditer • Version control │
│ • Rollback manuel • Rollback automatique │
│ │
│ Bénéfices : │
│ ✅ Reproductibilité ✅ Versioning (Git) │
│ ✅ Consistance ✅ Review de code │
│ ✅ Automatisation ✅ Rollback facile │
│ ✅ Documentation vivante ✅ Tests possibles │
│ │
└─────────────────────────────────────────────────────────────┘
2. CloudFormation - Concepts
┌─────────────────────────────────────────────────────────────┐
│ AWS CLOUDFORMATION │
├─────────────────────────────────────────────────────────────┤
│ │
│ TEMPLATE (YAML/JSON) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AWSTemplateFormatVersion: '2010-09-09' │ │
│ │ Description: Mon infrastructure │ │
│ │ │ │
│ │ Parameters: │ │
│ │ Environment: │ │
│ │ Type: String │ │
│ │ │ │
│ │ Resources: │ │
│ │ MyVPC: │ │
│ │ Type: AWS::EC2::VPC │ │
│ │ Properties: │ │
│ │ CidrBlock: 10.0.0.0/16 │ │
│ │ │ │
│ │ Outputs: │ │
│ │ VPCId: │ │
│ │ Value: !Ref MyVPC │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ STACK │ │
│ │ (Ensemble de ressources créées) │ │
│ │ │ │
│ │ VPC ─── Subnet ─── Security Group ─── EC2 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
3. Structure d'un Template
AWSTemplateFormatVersion: '2010-09-09'
Description: Template de base pour le cours AWS
# Paramètres d'entrée
Parameters:
EnvironmentName:
Type: String
Default: dev
AllowedValues:
- dev
- staging
- prod
# Ressources à créer
Resources:
# VPC
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Sub ${EnvironmentName}-vpc
# Subnet Public
PublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: !Sub ${EnvironmentName}-public-subnet
# Sorties
Outputs:
VPCId:
Description: ID du VPC créé
Value: !Ref MyVPC
Export:
Name: !Sub ${EnvironmentName}-vpc-id
4. Fonctions Intrinsèques Utiles
| Fonction | Usage | Exemple |
|---|---|---|
!Ref | Référence une ressource/paramètre | !Ref MyVPC |
!Sub | Substitution de variables | !Sub ${AWS::StackName}-vpc |
!GetAtt | Attribut d'une ressource | !GetAtt MyEC2.PublicIp |
!Join | Concatène des valeurs | !Join ['-', [a, b, c]] |
!If | Condition | !If [IsProd, m5.large, t3.micro] |
5. Lab avec LocalStack
# Déployer un stack sur LocalStack
awslocal cloudformation create-stack \
--stack-name mon-stack \
--template-body file://template.yaml \
--parameters ParameterKey=EnvironmentName,ParameterValue=dev
# Voir le statut
awslocal cloudformation describe-stacks \
--stack-name mon-stack
# Lister les ressources créées
awslocal cloudformation list-stack-resources \
--stack-name mon-stack
# Supprimer le stack
awslocal cloudformation delete-stack \
--stack-name mon-stack
Projet Final (30%)
Objectif
Créer un template CloudFormation déployant une architecture web simple :
- 1 VPC avec subnet public
- 1 Security Group (HTTP + SSH)
- 1 Instance EC2 avec user-data installant un serveur web
Livrables
-
Template CloudFormation (YAML)
- Bien structuré et commenté
- Paramètres pour l'environnement
- Outputs utiles
-
Documentation
- Description de l'architecture
- Instructions de déploiement
- Tests de validation
-
Démonstration
- Déploiement sur LocalStack
- Preuve de fonctionnement
- Questions/Réponses
Grille d'Évaluation
| Critère | Points |
|---|---|
| Template valide et fonctionnel | 10 |
| Bonnes pratiques (params, outputs) | 5 |
| Documentation claire | 5 |
| Tests et validation | 5 |
| Démonstration et Q/R | 5 |
| Total | 30 |
Navigation
- Concepts IaC et CloudFormation
- Quiz de Validation - 30 questions pour valider vos connaissances
- Lab : CloudFormation
🎓 Félicitations !
Vous avez terminé le cours Services de Calcul AWS !
Compétences Acquises
- ✅ Concepts cloud et AWS
- ✅ EC2 et stockage EBS
- ✅ Réseaux VPC et sécurité
- ✅ Haute disponibilité et scaling
- ✅ Serverless avec Lambda
- ✅ Monitoring et observabilité
- ✅ FinOps et optimisation
- ✅ Infrastructure as Code
Prochaines Étapes
- 📚 Certifications AWS (Cloud Practitioner, Solutions Architect)
- 🔧 Pratique sur compte AWS réel (Free Tier)
- 🚀 Projets personnels
- 💼 Expérience professionnelle
Bonne continuation dans votre parcours cloud !