DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesAWS - Avancé : ECS, IAM avancé et architecture multi-région

Module

Maîtrisez les conteneurs sur AWS avec ECS et EKS, la sécurité IAM avancée, CloudFormation StackSets et la conception d'architectures multi-région résilientes.

  • 3h
  • Avancé
  • 3 exercices
Voir les exercices

Formation 100 % Linux

Tous les modules nécessitent un environnement Linux. Si vous êtes sur Windows, installez d'abord WSL (Windows Subsystem for Linux) avant de continuer.

AWS - Avancé : ECS, IAM avancé et architecture multi-région

🎯 Objectifs

  • ✅ Déployer des conteneurs en production avec ECS Fargate et ECR
  • ✅ Orchestrer Kubernetes avec EKS
  • ✅ Maîtriser les politiques IAM avancées : cross-account, permission boundaries, SCP
  • ✅ Automatiser avec CloudFormation StackSets et CDK
  • ✅ Concevoir une architecture multi-région avec Route 53
  • ✅ Optimiser les coûts avec Reserved Instances, Savings Plans et Spot

📋 Prérequis

  • AWS Intermédiaire (VPC, RDS, Lambda, CloudFormation)
  • Kubernetes Débutant (concepts pods, services, kubectl)
  • Docker Intermédiaire (images, registries)

🐳 ECS - Elastic Container Service

Fargate vs EC2 Launch Type

ECS orchestre des conteneurs Docker sur AWS. Deux modes de fonctionnement :

CritèreFargateEC2 Launch Type
Gestion des serveursAWS (serverless)Vous gérez les EC2
Contrôle de l'OSAucunTotal
CoûtPlus cher à l'usageMoins cher en continu
ScalabilitéInstantanéeDépend de l'ASG
Cas d'usageApplications standardWorkloads GPU, haute performance

Concepts ECS

Cluster ECS
├── Service (maintient N tâches en vie)
│   ├── Task Definition (blueprint : image, CPU, mémoire, ports)
│   └── Task (instance en cours d'exécution)
└── Capacity Provider (Fargate ou EC2)

ECR - Elastic Container Registry

ECR est le registry Docker d'AWS, intégré nativement avec IAM.

bash
# Créer un repository ECR
aws ecr create-repository \
  --repository-name mon-app \
  --image-scanning-configuration scanOnPush=true

# Authentifier Docker vers ECR
aws ecr get-login-password --region eu-west-3 | \
  docker login --username AWS --password-stdin \
  123456789.dkr.ecr.eu-west-3.amazonaws.com

# Tagger et pousser une image
docker tag mon-app:latest 123456789.dkr.ecr.eu-west-3.amazonaws.com/mon-app:latest
docker push 123456789.dkr.ecr.eu-west-3.amazonaws.com/mon-app:latest

Déployer sur ECS Fargate

bash
# Créer la Task Definition
aws ecs register-task-definition \
  --family mon-app-task \
  --network-mode awsvpc \
  --requires-compatibilities FARGATE \
  --cpu 256 \
  --memory 512 \
  --execution-role-arn arn:aws:iam::ACCOUNT:role/ecsTaskExecutionRole \
  --container-definitions '[{
    "name": "mon-app",
    "image": "123456789.dkr.ecr.eu-west-3.amazonaws.com/mon-app:latest",
    "portMappings": [{"containerPort": 8080, "protocol": "tcp"}],
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "/ecs/mon-app",
        "awslogs-region": "eu-west-3",
        "awslogs-stream-prefix": "ecs"
      }
    }
  }]'

# Créer le cluster ECS
aws ecs create-cluster --cluster-name mon-cluster

# Créer le service ECS
aws ecs create-service \
  --cluster mon-cluster \
  --service-name mon-app-service \
  --task-definition mon-app-task \
  --desired-count 2 \
  --launch-type FARGATE \
  --network-configuration '{
    "awsvpcConfiguration": {
      "subnets": ["subnet-priv-a", "subnet-priv-b"],
      "securityGroups": ["sg-xxxx"],
      "assignPublicIp": "DISABLED"
    }
  }' \
  --load-balancers '[{
    "targetGroupArn": "arn:aws:elasticloadbalancing:...",
    "containerName": "mon-app",
    "containerPort": 8080
  }]'

☸️ EKS - Elastic Kubernetes Service

Quand choisir EKS plutôt qu'ECS ?

  • Vous avez déjà des manifestes Kubernetes existants
  • Vous voulez des workloads portables (multi-cloud possible)
  • Vous avez besoin de l'écosystème Kubernetes (Helm, Operators, service mesh)

Créer un cluster EKS avec eksctl

bash
# Installer eksctl
curl --silent --location \
  "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_Linux_amd64.tar.gz" \
  | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin

# Créer un cluster (prend ~15 minutes)
eksctl create cluster \
  --name mon-cluster-eks \
  --region eu-west-3 \
  --nodegroup-name standard-nodes \
  --node-type t3.medium \
  --nodes 2 \
  --nodes-min 1 \
  --nodes-max 4 \
  --managed

# Configurer kubectl automatiquement
aws eks update-kubeconfig --name mon-cluster-eks --region eu-west-3

# Vérifier les noeuds
kubectl get nodes

# Déployer une application
kubectl apply -f deployment.yaml

# Supprimer le cluster
eksctl delete cluster --name mon-cluster-eks --region eu-west-3

Fargate Profile pour EKS

Les Fargate Profiles permettent d'exécuter des pods Kubernetes sur Fargate (sans gérer les EC2) :

bash
eksctl create fargateprofile \
  --cluster mon-cluster-eks \
  --name mon-profile-fargate \
  --namespace production

🔐 IAM Avancé

Politiques basées sur les ressources

Contrairement aux politiques IAM attachées à des identités (utilisateurs, rôles), les politiques basées sur les ressources s'attachent à la ressource elle-même et définissent qui peut y accéder.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AUTRE_COMPTE:root"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::mon-bucket-partage/*"
    }
  ]
}

Rôles Cross-Account

Permettent à une identité d'un compte AWS d'accéder à des ressources dans un autre compte.

Compte A (source)          Compte B (cible)
└── Utilisateur Alice ──→  └── Rôle "ReadOnlyRole"
     (sts:AssumeRole)           └── Politique: S3 ReadOnly
bash
# Dans le compte B : créer le rôle avec une Trust Policy vers le compte A
aws iam create-role \
  --role-name ReadOnlyRole \
  --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::COMPTE_A:root"},
      "Action": "sts:AssumeRole"
    }]
  }'

# Depuis le compte A : assumer le rôle
aws sts assume-role \
  --role-arn arn:aws:iam::COMPTE_B:role/ReadOnlyRole \
  --role-session-name alice-session

Permission Boundaries

Une Permission Boundary limite le maximum de permissions qu'une identité peut avoir, même si une politique plus permissive lui est attachée.

Permissions effectives = Politiques IAM ∩ Permission Boundary

Cas d'usage : permettre aux développeurs de créer leurs propres rôles, sans qu'ils puissent s'octroyer des permissions d'administrateur.

Service Control Policies (SCP) dans AWS Organizations

Les SCP s'appliquent à des unités d'organisation (OU) entières et limitent ce que tous les comptes fils peuvent faire, indépendamment de leurs politiques IAM.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": ["ec2:*"],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": ["eu-west-3", "eu-west-1"]
        }
      }
    }
  ]
}

Cette SCP interdit toute action EC2 en dehors des régions européennes.


🏗️ CloudFormation Avancé et CDK

StackSets - Déployer dans plusieurs comptes/régions

bash
# Créer un StackSet (déploie dans plusieurs comptes depuis un compte administrateur)
aws cloudformation create-stack-set \
  --stack-set-name mon-stackset \
  --template-body file://template.yaml \
  --permission-model SERVICE_MANAGED \
  --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false

# Déployer dans des OUs entières
aws cloudformation create-stack-instances \
  --stack-set-name mon-stackset \
  --deployment-targets OrganizationalUnitIds=ou-xxxx \
  --regions eu-west-3 eu-west-1 us-east-1

CDK - Cloud Development Kit

Le CDK permet de définir l'infrastructure dans un vrai langage de programmation (TypeScript, Python, Java...). Il génère du CloudFormation sous le capot.

typescript
// lib/mon-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as ecs from 'aws-cdk-lib/aws-ecs';

export class MonStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // VPC avec sous-réseaux publics et privés dans 2 AZ
    const vpc = new ec2.Vpc(this, 'MonVPC', {
      maxAzs: 2,
      natGateways: 1,
    });

    // Cluster ECS
    const cluster = new ecs.Cluster(this, 'MonCluster', { vpc });
  }
}
bash
# Déployer avec CDK
cdk deploy

🌍 Architecture Multi-Région avec Route 53

Route 53 - DNS managé

Route 53 supporte plusieurs politiques de routage :

PolitiqueComportementCas d'usage
SimpleUn enregistrement, une valeurSite statique
PondéréDistribution selon un poidsTests A/B, migration progressive
LatenceRedirige vers la région la plus rapideAudience mondiale
FailoverBascule vers un secondaire si le primaire est en panneHaute disponibilité
GéolocalisationSelon la localisation de l'utilisateurConformité RGPD, contenu localisé
bash
# Créer une zone hébergée
aws route53 create-hosted-zone \
  --name monsite.fr \
  --caller-reference $(date +%s)

# Créer un enregistrement de routage par latence
aws route53 change-resource-record-sets \
  --hosted-zone-id ZXXXX \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "api.monsite.fr",
        "Type": "A",
        "Region": "eu-west-3",
        "SetIdentifier": "paris",
        "AliasTarget": {
          "HostedZoneId": "Z...",
          "DNSName": "mon-alb.eu-west-3.elb.amazonaws.com",
          "EvaluateTargetHealth": true
        }
      }
    }]
  }'

Architecture Active-Active Multi-Région

           Route 53 (routage par latence)
               /              \
        eu-west-3          us-east-1
        (Paris)            (Virginie)
           │                   │
          ALB                 ALB
           │                   │
      ECS Service          ECS Service
           │                   │
         RDS ←── Réplication ──→ RDS Read Replica
       (Primary)              (Promoted en besoin)

💰 Optimisation des Coûts

Modèles de tarification EC2

ModèleRéductionEngagementInterruptible
On-Demand-AucunNon
Reserved Instancesjusqu'à 72%1 ou 3 ansNon
Savings Plansjusqu'à 66%1 ou 3 ansNon
Spot Instancesjusqu'à 90%AucunOui (2 min de préavis)

Règle : On-Demand pour les ressources imprévisibles, Reserved/Savings Plans pour la baseline stable, Spot pour les workloads tolérants aux interruptions (batch, CI/CD).

Outils d'optimisation

bash
# Analyser les coûts avec Cost Explorer
aws ce get-cost-and-usage \
  --time-period Start=2024-01-01,End=2024-02-01 \
  --granularity MONTHLY \
  --metrics BlendedCost \
  --group-by Type=DIMENSION,Key=SERVICE

# Créer une alerte de budget
aws budgets create-budget \
  --account-id ACCOUNT_ID \
  --budget '{
    "BudgetName": "Alerte 100EUR",
    "BudgetLimit": {"Amount": "100", "Unit": "USD"},
    "TimeUnit": "MONTHLY",
    "BudgetType": "COST"
  }' \
  --notifications-with-subscribers '[{
    "Notification": {
      "NotificationType": "ACTUAL",
      "ComparisonOperator": "GREATER_THAN",
      "Threshold": 80
    },
    "Subscribers": [{"SubscriptionType": "EMAIL", "Address": "alerte@example.com"}]
  }]'

🏛️ Well-Architected Framework

Les 6 piliers d'une architecture AWS bien conçue :

PilierPrincipe clé
Excellence opérationnelleAutomatiser, observer, améliorer en continu
SécuritéMoindre privilège, défense en profondeur, chiffrement
FiabilitéRedondance multi-AZ, recovery automatique
Efficacité des performancesChoisir le bon type de ressource, monitorer
Optimisation des coûtsPay-as-you-go, Spot, Reserved selon l'usage
DurabilitéRéduire l'empreinte carbone des workloads

📌 Points Clés

  • ECS Fargate = conteneurs sans gérer de serveurs ; EKS = Kubernetes managé pour les workloads portables
  • Les SCP bloquent à l'échelle des OU entières - elles s'imposent même aux administrateurs des comptes fils
  • Le CDK génère du CloudFormation mais s'écrit dans un vrai langage de programmation
  • Route 53 routage par latence = les utilisateurs sont envoyés vers la région la plus rapide pour eux
  • Spots pour le batch, Reserved/Savings Plans pour la baseline : économies jusqu'à 90%

📚 Ressources

  • Documentation ECS
  • Documentation EKS
  • IAM Policy Simulator
  • CDK Workshop
  • AWS Well-Architected Framework
  • AWS Pricing Calculator

Exercices Pratiques

3 exercices pour mettre en pratique

01

03 - Déployer un conteneur sur ECS Fargate

60 minutesAvancé
02

08 - Politiques IAM avancées et audit des permissions

45 minutesAvancé
03

09 - Infrastructure as Code avec CloudFormation

50 minutesAvancé
Retour aux modules

Sur cette page

  • 🎯 Objectifs
  • 📋 Prérequis
  • 🐳 ECS - Elastic Container Service
  • Fargate vs EC2 Launch Type
  • Concepts ECS
  • ECR - Elastic Container Registry
  • Déployer sur ECS Fargate
  • ☸️ EKS - Elastic Kubernetes Service
  • Quand choisir EKS plutôt qu'ECS ?
  • Créer un cluster EKS avec eksctl
  • Fargate Profile pour EKS
  • 🔐 IAM Avancé
  • Politiques basées sur les ressources
  • Rôles Cross-Account
  • Permission Boundaries
  • Service Control Policies (SCP) dans AWS Organizations
  • 🏗️ CloudFormation Avancé et CDK
  • StackSets - Déployer dans plusieurs comptes/régions
  • CDK - Cloud Development Kit
  • 🌍 Architecture Multi-Région avec Route 53
  • Route 53 - DNS managé
  • Architecture Active-Active Multi-Région
  • 💰 Optimisation des Coûts
  • Modèles de tarification EC2
  • Outils d'optimisation
  • 🏛️ Well-Architected Framework
  • 📌 Points Clés
  • 📚 Ressources