Skip to content
Deployer des applications conteneurisees sur AWS ECS Fargate : Guide pratique
← ← Retour aux Réflexions Cloud

Deployer des applications conteneurisees sur AWS ECS Fargate : Guide pratique

L'exploitation de conteneurs en production exige une orchestration fiable, une mise a l'echelle fluide et un minimum de charge operationnelle. AWS Elastic Container Service (ECS) avec le type de lancement Fargate repond a ces trois exigences en supprimant totalement la necessite de provisionner ou de gerer des serveurs. Dans ce guide, nous expliquons ce qu'est Fargate, comment mettre en place un deploiement pret pour la production et comment maitriser les couts.

Qu'est-ce qu'AWS ECS Fargate ?

Amazon ECS est un service d'orchestration de conteneurs entierement gere. Lorsque vous choisissez le type de lancement Fargate, AWS prend en charge l'integralite de l'infrastructure de calcul. Vous definissez vos conteneurs, specifiez les besoins en CPU et memoire, et Fargate s'occupe du reste : provisionnement des hotes, placement des taches, mise a jour du systeme d'exploitation et mise a l'echelle de la flotte.

Contrairement au type de lancement EC2, ou vous gerez vous-meme un cluster d'instances EC2, Fargate abstrait completement la couche serveur. Vous ne payez que les ressources vCPU et memoire effectivement consommees par vos taches, facturees a la seconde avec un minimum d'une minute.

Configuration etape par etape

1. Construire et publier l'image Docker

Commencez par creer une image Docker pour votre application et publiez-la dans Amazon Elastic Container Registry (ECR). ECR s'integre nativement avec ECS et prend en charge l'analyse d'images, les politiques de cycle de vie et la replication inter-regions.

aws ecr create-repository --repository-name mon-app
docker build -t mon-app:latest .
docker tag mon-app:latest <account-id>.dkr.ecr.<region>.amazonaws.com/mon-app:latest
aws ecr get-login-password | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/mon-app:latest

2. Creer une Task Definition

Une task definition constitue le schema directeur de votre conteneur. Elle specifie l'image Docker, les allocations de CPU et memoire, les mappings de ports, les variables d'environnement, la configuration de journalisation et les roles IAM.

Parametres essentiels a configurer :

  • networkMode : Defini sur awsvpc (obligatoire pour Fargate). Chaque tache recoit sa propre interface reseau elastique et une adresse IP privee.
  • requiresCompatibilities : Defini sur FARGATE.
  • cpu / memory : Choisissez parmi les combinaisons prises en charge (par exemple, 0,25 vCPU / 512 Mo, 1 vCPU / 2 Go, jusqu'a 16 vCPU / 120 Go).
  • logConfiguration : Utilisez le pilote awslogs pour transmettre les logs du conteneur vers CloudWatch.
  • executionRoleArn : Un role IAM qui accorde a ECS la permission de telecharger les images depuis ECR et d'ecrire les logs.
  • taskRoleArn : Un role IAM que votre code applicatif assume au moment de l'execution pour acceder a d'autres services AWS.

3. Configurer le reseau

Les taches Fargate s'executent a l'interieur d'un VPC. Creez ou selectionnez des sous-reseaux prives pour vos taches et associez un security group qui autorise le trafic entrant uniquement sur les ports exposes par votre application. Pour les services accessibles depuis Internet, placez un Application Load Balancer (ALB) dans des sous-reseaux publics et dirigez le trafic vers les taches dans les sous-reseaux prives.

4. Creer un service ECS

Un service ECS maintient le nombre souhaite d'instances de taches en cours d'execution et s'integre avec l'ALB pour les verifications de sante et la repartition du trafic. Lors de la creation du service, specifiez :

  • Le cluster et la task definition.
  • Le nombre souhaite de taches.
  • La configuration reseau (sous-reseaux, security groups, attribution d'IP publique).
  • Le target group du load balancer, le nom du conteneur et le port du conteneur.

Le planificateur du service remplace automatiquement les taches defaillantes et les distribue entre les zones de disponibilite pour garantir une haute disponibilite.

Integration avec l'Application Load Balancer

Un ALB est indispensable pour les deploiements Fargate en production. Il offre le routage par chemin et par hote, la terminaison TLS, les verifications de sante et le connection draining. Creez un target group avec le type de cible defini sur ip (et non instance, car les taches Fargate utilisent le mode reseau awsvpc). Configurez des chemins de health check qui retournent un HTTP 200 depuis votre application et definissez des valeurs appropriees pour le delai de desinscription, assurant ainsi des arrets progressifs lors des deploiements.

Politiques d'auto-scaling

ECS Service Auto Scaling ajuste le nombre souhaite de taches en fonction des metriques CloudWatch. Trois types de politiques sont disponibles :

  • Target Tracking : L'option la plus simple. Definissez une valeur cible pour une metrique telle que l'utilisation moyenne du CPU (par exemple, 60 %), et ECS ajuste automatiquement le nombre de taches pour maintenir cette cible.
  • Step Scaling : Definissez des ajustements de mise a l'echelle correspondant aux seuils d'alarmes CloudWatch. Utile lorsque vous avez besoin de comportements differents en scale-out et en scale-in.
  • Scheduled Scaling : Augmentez ou diminuez la capacite a des moments predetermines, ideal pour les charges de travail aux schemas de trafic previsibles.

Pour la plupart des applications, commencez par le target tracking sur l'utilisation CPU a 60-70 %. Ajoutez une seconde politique surveillant le nombre de requetes par cible de l'ALB si votre charge est davantage liee aux E/S qu'au CPU.

Strategies d'optimisation des couts

La tarification de Fargate est transparente, mais les couts peuvent s'accumuler rapidement. Voici des methodes concretes pour les reduire :

  • Dimensionner correctement les taches : Evitez le surprovisionnement en CPU et memoire. Utilisez les metriques de Container Insights pour identifier l'utilisation reelle des ressources et ajustez les task definitions en consequence.
  • Utiliser Fargate Spot : Pour les charges tolerantes aux interruptions (jobs batch, processeurs de files d'attente), Fargate Spot offre des economies allant jusqu'a 70 %. Les taches peuvent etre interrompues avec un preavis de deux minutes ; concevez donc vos applications pour un arret progressif.
  • Tirer parti des Savings Plans : Les Compute Savings Plans s'appliquent a Fargate et peuvent reduire les couts jusqu'a 50 % en echange d'un engagement d'un ou trois ans.
  • Optimiser la taille des images : Des images plus petites reduisent les couts de stockage ECR et accelerent le demarrage des taches. Utilisez des builds multi-etapes et des images de base minimales comme Alpine ou Distroless.
  • Controler le volume de journalisation : CloudWatch Logs facture l'ingestion et le stockage. Filtrez les logs detailles au niveau applicatif et definissez des politiques de retention des logs.

Fargate vs. EC2 vs. EKS : Choisir la bonne approche

| Critere | Fargate | Type de lancement EC2 | EKS (Kubernetes) | |---|---|---|---| | Gestion des serveurs | Aucune | Vous gerez les instances | Vous configurez le control plane | | Granularite de mise a l'echelle | Par tache | Par instance + par tache | Par pod + par noeud | | Temps de demarrage | 30 a 60 secondes | Depend du lancement de l'instance | Depend du provisionnement du noeud | | Modele de cout | Paiement par ressources de tache | Paiement par instance (Reserved/Spot) | Frais du control plane + calcul | | Support GPU | Limite | Support complet | Support complet | | Ideal pour | Microservices, API, jobs batch | Charges importantes et stables | Equipes maitrisant Kubernetes |

Choisissez Fargate lorsque vous souhaitez zero gestion d'infrastructure et que vos charges presentent un trafic variable ou imprevisible. Choisissez EC2 lorsque vous avez besoin d'instances GPU, de types d'instances specifiques ou que vous souhaitez optimiser les couts pour des charges importantes et stables. Choisissez EKS lorsque votre equipe possede une expertise Kubernetes et que vous avez besoin de portabilite entre fournisseurs cloud ou de fonctionnalites avancees de planification.

Conseils pratiques pour les deploiements en production

  • Utiliser les deploiements progressifs (rolling) avec minimumHealthyPercent defini a 100 et maximumPercent defini a 200. Cela garantit des deploiements sans interruption en lancant les nouvelles taches avant de retirer les anciennes.
  • Activer ECS Exec pour le debogage. Il offre un acces shell interactif aux conteneurs en cours d'execution sans SSH, en s'appuyant sur AWS Systems Manager.
  • Definir des delais d'arret appropries. Le parametre stopTimeout donne a votre application le temps de terminer les requetes en cours avant l'arret force du conteneur.
  • Implementer des verifications de sante a la fois au niveau du conteneur (dans la task definition) et au niveau du target group de l'ALB. Utilisez des endpoints distincts si necessaire.
  • Utiliser AWS Copilot ou CDK pour gerer l'infrastructure en tant que code. Ces deux outils simplifient le provisionnement des ressources ECS et prennent en charge la generation de pipelines CI/CD.
  • Surveiller avec Container Insights pour obtenir une visibilite sur les metriques de CPU, memoire, reseau et stockage au niveau des taches et des services.

Conclusion

AWS ECS Fargate offre un equilibre convaincant entre simplicite et puissance pour l'exploitation d'applications conteneurisees. En eliminant la gestion des serveurs, il permet aux equipes d'ingenierie de se concentrer sur la logique applicative plutot que sur l'infrastructure. Avec un dimensionnement reflechi des taches, des politiques d'auto-scaling et des strategies d'optimisation des couts, Fargate peut servir de fondation robuste pour les charges de production de toute envergure.