Skip to content
Learni
Voir tous les tutoriels
Cloud & DevOps

Comment déployer des infrastructures AWS avec CloudFormation en 2026

Read in English

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

base-vpc.yaml
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 Environment

Ce 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

subnets.yaml
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é

parent-stack.yaml
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.VpcId

Les 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

custom-resource.yaml
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.Arn

Les 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é

deploy.sh
#!/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-changeset

Le 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.