Introduction
AWS CloudFormation permet de définir des infrastructures complètes sous forme de code. En 2026, les exigences portent sur la gestion de systèmes distribués, la haute disponibilité et la conformité. Ce tutoriel expert couvre les patterns avancés : nested stacks, custom resources, conditions dynamiques et stratégies de mise à jour sans downtime. Vous apprendrez à concevoir des templates maintenables et testables pour des environnements de production critiques.
Prérequis
- Compétences solides en YAML et AWS IAM
- AWS CLI v2 installé et configuré
- Connaissances de base des services VPC, Lambda, RDS et S3
- Node.js 20+ pour les custom resources
Template de base avec paramètres
AWSTemplateFormatVersion: '2010-09-09'
Description: 'VPC de base avec sous-réseaux publics et privés'
Parameters:
VpcCidr:
Type: String
Default: 10.0.0.0/16
Environment:
Type: String
AllowedValues: [dev, prod]
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref VpcCidr
EnableDnsHostnames: true
EnableDnsSupport: true
Tags:
- Key: Environment
Value: !Ref EnvironmentCe template crée un VPC configurable. Les paramètres permettent la réutilisation entre environnements. Les tags facilitent le filtrage et la facturation.
Ajout de sous-réseaux et conditions
Resources:
PublicSubnet:
Type: AWS::EC2::Subnet
Condition: CreatePublic
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
Conditions:
CreatePublic: !Equals [!Ref Environment, prod]
Outputs:
VpcId:
Value: !Ref VPC
Export:
Name: !Sub '${AWS::StackName}-VpcId'Les conditions évitent de créer des ressources inutiles en dev. L'export permet le partage entre stacks via Cross-Stack References.
Nested stack pour modularité
Resources:
NetworkStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://s3.amazonaws.com/my-bucket/network.yaml
Parameters:
VpcCidr: !Ref VpcCidr
Environment: !Ref Environment
AppStack:
Type: AWS::CloudFormation::Stack
DependsOn: NetworkStack
Properties:
TemplateURL: https://s3.amazonaws.com/my-bucket/app.yaml
Parameters:
VpcId: !GetAtt NetworkStack.Outputs.VpcIdLes nested stacks séparent les responsabilités. DependsOn garantit l'ordre de création et évite les erreurs de références croisées.
Custom resource avec Lambda
Resources:
CustomFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.handler
Runtime: nodejs20.x
Code:
ZipFile: |
exports.handler = async (event) => {
// Logique de provisionnement custom
return { PhysicalResourceId: 'custom-123' };
};
CustomResource:
Type: Custom::MyResource
Properties:
ServiceToken: !GetAtt CustomFunction.ArnLes custom resources étendent CloudFormation pour des ressources non natives. Toujours implémenter la gestion des événements Create/Update/Delete.
Stratégie de déploiement sécurisé
#!/bin/bash
set -euo pipefail
STACK_NAME="prod-infra-$(date +%Y%m%d)"
aws cloudformation deploy \
--template-file parent-stack.yaml \
--stack-name $STACK_NAME \
--capabilities CAPABILITY_IAM \
--parameter-overrides Environment=prod \
--no-fail-on-empty-changesetLe script utilise des protections strictes (set -euo pipefail). CAPABILITY_IAM est obligatoire pour les ressources IAM. Le nom daté facilite les rollbacks.
Bonnes pratiques
- Toujours versionner les templates dans Git et utiliser des buckets S3 versionnés
- Préférer les nested stacks dès que le template dépasse 500 lignes
- Utiliser des Outputs exportés plutôt que des références physiques
- Activer la protection de terminaison sur les stacks de production
- Implémenter des tests avec cfn-lint et taskcat avant déploiement
Erreurs courantes à éviter
- Oublier les DependsOn sur les ressources qui ont des dépendances implicites
- Ne pas gérer les mises à jour de custom resources (risque de fuite de ressources)
- Utiliser des noms physiques au lieu de Refs (provoque des conflits de stack)
- Ignorer les limites de taille de template (max 1 Mo compressé)
Pour aller plus loin
Approfondissez vos compétences avec nos formations CloudFormation avancées.