déploiement d’une application Node.js sur AWS Fargate avec Terraform : guide complet
15/09/2025
déploiement d’une application Node.js sur AWS Fargate avec Terraform
Pour scaler sans gestion de serveurs et garantir une haute disponibilité, AWS Fargate couplé à Terraform offre un déploiement automatisé et reproductible de vos conteneurs Node.js. Ce guide détaillé vous accompagnera pas à pas, afin de passer du Dockerfile au service Fargate opérationnel, tout en maîtrisant coûts et performances.
Prérequis
- Un compte AWS avec accès IAM autorisé à ECS, ECR et VPC
- Terraform v1.5+ installé (cf. Terraform pour plus de détails)
- Docker installé et configuré localement (Docker)
- Code source Node.js (Express, Fastify…)
1. Créer le Dockerfile
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD [ "node", "src/index.js" ]
Ce conteneur pèse ~50 Mo, démarrage en ~200 ms, idéal pour Fargate.
2. Initialiser Terraform
# main.tf
terraform {
required_providers {
aws = { source = "hashicorp/aws" version = "~> 5.0" }
}
backend "s3" {
bucket = "mon-terraform-state"
key = "ecs/fargate.tfstate"
region = "eu-west-3"
}
}
provider "aws" {
region = "eu-west-3"
}
L’état Terraform est externalisé pour le travail collaboratif.
3. Déployer le registre ECR
resource "aws_ecr_repository" "app" {
name = "nodejs-app"
image_scanning_configuration {
scan_on_push = true
}
lifecycle_policy {
policy = <
4. Définir le cluster et la tâche Fargate
resource "aws_ecs_cluster" "cluster" {
name = "cluster-nodejs"
}
resource "aws_ecs_task_definition" "task" {
family = "nodejs-task"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = "512"
memory = "1024"
execution_role_arn = aws_iam_role.ecs_exec.arn
container_definitions = jsonencode([{
name = "app"
image = "${aws_ecr_repository.app.repository_url}:latest"
portMappings = [{ containerPort = 3000, protocol = "tcp" }]
}])
}
5. Créer le service Fargate
resource "aws_ecs_service" "service" {
name = "nodejs-service"
cluster = aws_ecs_cluster.cluster.id
task_definition = aws_ecs_task_definition.task.arn
launch_type = "FARGATE"
network_configuration {
subnets = ["subnet-123", "subnet-456"]
security_groups = ["sg-789"]
assign_public_ip = true
}
desired_count = 2
wait_for_steady_state = true
}
6. Déploiement et mises à jour
$ terraform init
$ terraform plan -out plan.tfplan
$ terraform apply plan.tfplan
Une fois validé, Terraform crée VPC, cluster, registre ECR, puis déploie vos conteneurs en moins de 3 minutes.
Bonnes pratiques performance et coûts
- Configurer l’Auto Scaling (ECS Service Auto Scaling) pour ajuster
desired_count
selon le CPU (métriques CloudWatch : CPU > 70 %).
- Utiliser Spot Fargate pour réduire jusqu’à 40 % vos coûts d’exécution.
- Activer le logging CloudWatch au niveau du conteneur pour diagnostiquer rapidement.
- Séparer staging et prod dans des workspaces Terraform distincts.
Conclusion
En combinant Terraform et AWS Fargate, vous obtenez un pipeline IaC robuste, un coût maîtrisé et un déploiement sans interruption. Vos équipes gagnent en agilité et se concentrent sur le code, pas l’infra.
Besoin d’un accompagnement sur votre infrastructure cloud ? Contactez nos experts pour un audit personnalisé.