Aller au contenu principal

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​

FonctionUsageExemple
!RefRéférence une ressource/paramètre!Ref MyVPC
!SubSubstitution de variables!Sub ${AWS::StackName}-vpc
!GetAttAttribut d'une ressource!GetAtt MyEC2.PublicIp
!JoinConcatène des valeurs!Join ['-', [a, b, c]]
!IfCondition!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​

  1. Template CloudFormation (YAML)

    • Bien structuré et commenté
    • Paramètres pour l'environnement
    • Outputs utiles
  2. Documentation

    • Description de l'architecture
    • Instructions de déploiement
    • Tests de validation
  3. Démonstration

    • Déploiement sur LocalStack
    • Preuve de fonctionnement
    • Questions/Réponses

Grille d'Évaluation​

CritèrePoints
Template valide et fonctionnel10
Bonnes pratiques (params, outputs)5
Documentation claire5
Tests et validation5
Démonstration et Q/R5
Total30
  1. Concepts IaC et CloudFormation
  2. Quiz de Validation - 30 questions pour valider vos connaissances
  3. 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 !