Introduction à AWS CloudFormation
Qu'est-ce que CloudFormation ?
AWS CloudFormation est un service qui vous permet de modéliser et de provisionner des ressources AWS de manière automatisée et répétable.
Principe de base
Concepts clés
1. Template
Un template est un fichier YAML ou JSON qui décrit les ressources AWS à créer.
AWSTemplateFormatVersion: '2010-09-09'
Description: Mon premier template CloudFormation
Resources:
MonBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: mon-bucket-unique-12345
2. Stack
Une stack est une collection de ressources AWS gérée comme une unité.
3. Change Set
Un change set permet de prévisualiser les modifications avant de les appliquer.
4. Stack Events
Les events tracent toutes les opérations sur la stack.
CloudFormation vs Terraform
| Aspect | CloudFormation | Terraform |
|---|---|---|
| Provider | AWS uniquement | Multi-cloud |
| Langage | YAML/JSON | HCL |
| State | Géré par AWS | Fichier local ou remote |
| Coût | Gratuit | Gratuit (Open Source) |
| Drift Detection | Intégré | Limité |
| Rollback | Automatique | Manuel |
| Modules | Nested Stacks | Modules natifs |
Quand utiliser CloudFormation ?
- Infrastructure 100% AWS
- Besoin de rollback automatique
- Équipe déjà familière avec AWS
- Intégration avec AWS Organizations
Workflow CloudFormation
Étapes du workflow
- Écrire : Créer le template YAML/JSON
- Valider : Vérifier la syntaxe
- Créer/Mettre à jour : Déployer la stack
- Surveiller : Vérifier les events
- Maintenir : Gérer le cycle de vie
Premier template
Créons un bucket S3 simple :
AWSTemplateFormatVersion: '2010-09-09'
Description: Création d'un bucket S3 simple
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub 'my-first-bucket-${AWS::AccountId}'
Tags:
- Key: Environment
Value: Development
- Key: ManagedBy
Value: CloudFormation
Déploiement via CLI
# Valider le template
aws cloudformation validate-template \
--template-body file://template.yaml
# Créer la stack
aws cloudformation create-stack \
--stack-name my-first-stack \
--template-body file://template.yaml
# Vérifier le statut
aws cloudformation describe-stacks \
--stack-name my-first-stack
# Voir les events
aws cloudformation describe-stack-events \
--stack-name my-first-stack
Déploiement via Console
- Ouvrir la console CloudFormation
- Cliquer Create stack
- Uploader le template
- Nommer la stack
- Configurer les options
- Reviewer et créer
États d'une Stack
| État | Description |
|---|---|
CREATE_IN_PROGRESS | Création en cours |
CREATE_COMPLETE | Création réussie |
CREATE_FAILED | Création échouée |
UPDATE_IN_PROGRESS | Mise à jour en cours |
DELETE_IN_PROGRESS | Suppression en cours |
ROLLBACK_IN_PROGRESS | Rollback en cours |
Régions et disponibilité
CloudFormation est disponible dans toutes les régions AWS. Chaque stack est créée dans une région spécifique.
# Créer dans une région spécifique
aws cloudformation create-stack \
--stack-name my-stack \
--template-body file://template.yaml \
--region eu-west-1
# Lister les stacks d'une région
aws cloudformation list-stacks \
--region eu-west-1 \
--stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE
Limites et quotas
| Limite | Valeur |
|---|---|
| Taille max template (S3) | 1 MB |
| Taille max template (direct) | 51,200 bytes |
| Ressources par stack | 500 |
| Stacks par compte/région | 2000 |
| Paramètres par template | 200 |
| Outputs par template | 200 |
| Mappings par template | 200 |
Commandes CLI essentielles
# Créer une stack
aws cloudformation create-stack \
--stack-name NAME \
--template-body file://template.yaml
# Mettre à jour une stack
aws cloudformation update-stack \
--stack-name NAME \
--template-body file://template.yaml
# Supprimer une stack
aws cloudformation delete-stack \
--stack-name NAME
# Lister les stacks
aws cloudformation list-stacks
# Décrire une stack
aws cloudformation describe-stacks \
--stack-name NAME
# Créer un change set
aws cloudformation create-change-set \
--stack-name NAME \
--change-set-name my-changes \
--template-body file://template.yaml
# Exécuter un change set
aws cloudformation execute-change-set \
--stack-name NAME \
--change-set-name my-changes
Résumé
- CloudFormation est le service IaC natif d'AWS
- Les templates décrivent l'infrastructure
- Les stacks regroupent les ressources
- Les change sets permettent de prévisualiser
- Le rollback est automatique en cas d'erreur