Gestion et gouvernanceService régional
CloudFormation
Permet de définir, déployer et gérer une infrastructure AWS via des templates JSON ou YAML
Cas d’utilisations
- Automatiser la création d’environnements cohérents et reproductibles
- Versionner le code de l’infrastructure
- Faciliter le partage et la collaboration dans une équipe
- Déployer la même architecture dans plusieurs comptes ou régions
- Intégrer au CI/CD pour un déploiement continu
Fonctionnement
- Écriture du template (JSON/YAML)
- Déploiement d’une stack CloudFormation appelle automatiquement les APIs AWS
- Gestion : mise à jour via Change Sets, rollback automatique en cas d’erreur, suppression simple
Fonctionnalités
- Drift Detection : vérifie si l’infrastructure réelle diffère du template
- Change Set : aperçu des modifications avant déploiement
- StackSet : déploiement multi-comptes et multi-régions
- Rollback : retour à l’état précédent en cas d’échec
- Intégration avec les autres services AWS
- SNS notifications lors des déploiements
- Support de la majorité des services AWS (pas 100 %)
Concepts clés
- Template : fichier décrivant l’infrastructure, composants principaux :
- AWSTemplateFormatVersion
- Resources (obligatoire)
- Parameters, Mappings, Conditions
- Outputs (export)
- Transform (SAM, macros)
- Stack : instance du template déployée (régional)
- Nested stacks : permet de factoriser des architectures complexes
Certaines ressources sont immuables. Elles ne peuvent pas être modifiées (par exemple renommer un bucket S3)
Bonnes pratiques
- Paramétrer plutôt que coder en dur : utiliser Parameters, Mappings et Conditions pour rendre les templates réutilisables et adaptables
- Modulariser : privilégier les templates imbriqués (nested stacks) pour éviter les gros fichiers monolithiques et favoriser la réutilisation
- Outputs : utiliser les Outputs pour partager des valeurs entre stacks
- Nommer clairement : respecter une convention de nommage cohérente pour stacks, ressources et paramètres
- Automatiser la validation : tester les templates avec cfn-lint par exemple