[Video] Déployer un service ECS avec un ALB
Objectif
- Déployer une application web conteneurisée sur ECS (Fargate).
- Utiliser un Load Balancer (ALB) pour l’accès public.
- Utiliser le VPC par défaut pour simplifier le réseau.
- Utiliser une image Nginx publique comme application d’exemple.
Pré-requis
- Un compte AWS actif.
- Avoir accès à la Console AWS.
- Aucune connaissance approfondie du réseau (car on utilise le VPC par défaut).
Étape 1 : Préparer l'image Docker (Optionnel si vous souhaitez utiliser la vôtre)
Si vous voulez utiliser une image publique :
- Nous allons utiliser l’image Nginx officielle :
nginx:latest
Pas besoin de construire une image ou utiliser Amazon ECR si vous utilisez l’image officielle.
✅ Si vous souhaitez utiliser votre propre image (ex : une app custom) :
- Construire l’image Docker localement :
Pas besoin de construire une image ou utiliser Amazon ECR si vous utilisez l’image officielle.
✅ Si vous souhaitez utiliser votre propre image (ex : une app custom) :
- Construire l’image Docker localement:
docker build -t my-web-app .
- Créer un repository Amazon ECR :
Console AWS → ECR → “Créer un référentiel” → Nom : my-web-app.
- Tagger et pousser l’image vers ECR :
aws ecr get-login-password --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com
docker tag my-web-app:latest .dkr.ecr..amazonaws.com/my-web-app:latest
docker push .dkr.ecr..amazonaws.com/my-web-app:latest
Étape 2 : Créer un Cluster ECS (Fargate)
- Aller sur la console ECS : https://console.aws.amazon.com/ecs
- Cliquer sur “Clusters” puis sur “Créer un cluster”.
- Choisir “EC2 + Networking (VPC par défaut)” (option préconfigurée).
- Nom du cluster : web-app-cluster.
- Cliquer sur “Créer”.
✅ Votre cluster est prêt !
Étape 3 : Créer une Task Definition (Définition de tâche ECS)
- Console AWS → ECS → “Task Definitions” → “Créer une nouvelle définition de tâche”.
- Sélectionner Fargate.
- Nom : nginx-app-task.
- Rôle IAM : Laisser vide ou choisir un rôle existant si besoin.
- Réglages réseau : awsvpc.
- Compatibilité : Fargate.
⚙️ Ajouter le conteneur :
- Nom du conteneur : nginx-container.
- Image :
- Pour utiliser Nginx : nginx:latest.
- Pour une image perso : <account-id>.dkr.ecr.<region>.amazonaws.com/my-web-app:latest.
- Port Mappings :
- Container Port : 80.
Laisser le reste par défaut et cliquer sur Créer.
Étape 4 : Créer un Application Load Balancer (ALB)
- Console AWS → EC2 → “Load Balancers” → “Créer un Load Balancer”.
- Choisir “Application Load Balancer”.
- Nom : web-app-alb.
- Schéma : Internet-facing (externe).
- VPC : VPC par défaut.
- Subnets : Choisir au moins 2 subnets publics (du VPC par défaut).
- Security Group : Créer un nouveau groupe “alb-sg”, autoriser TCP 80 (HTTP) depuis 0.0.0.0/0.
⚙️ Configuration Listener :
- Port : 80 (HTTP).
- Cible : “Créer un nouveau groupe cible” (voir ci-dessous).
⚙️ Groupe cible (pour ECS) :
- Nom : web-app-tg.
- Type : IP (pour ECS Fargate).
- Port : 80.
Finaliser et cliquer sur Créer.
✅ Le ALB est prêt.
Étape 5 : Créer le Service ECS (avec le Load Balancer)
- Console AWS → ECS → Clusters → web-app-cluster.
- Onglet Services → “Créer”.
- Lancer type : Fargate.
- Task Definition : nginx-app-task.
- Cluster : web-app-cluster.
- Service name : web-app-service.
- Nombre de tâches (Desired tasks) : 2 (pour la haute dispo).
⚙️ Configuration réseau :
- VPC : VPC par défaut.
- Subnets : Subnets publics.
- Security Group : Créer un nouveau “ecs-sg”, autoriser TCP 80 depuis le ALB uniquement (ou 0.0.0.0/0 si test simple).
- Attribuer IP Publique : OUI.
⚙️ Load balancer :
- Cocher “Activer Load Balancer”.
- Type : ALB.
- Choisir web-app-alb.
- Groupe cible : web-app-tg.
- Mapping du conteneur : nginx-container:80.
Cliquer sur Suivant puis sur Créer Service.
Étape 6 : Vérifier et tester l'application
- Retourner dans EC2 → Load Balancers.
- Sélectionner web-app-alb.
- Copier le DNS Name (ex: web-app-alb-123456789.region.elb.amazonaws.com).
- Coller dans le navigateur → Vous devriez voir la page d’accueil Nginx