ECS Fargate supprime la charge de gestion des instances EC2 : vous définissez vos conteneurs, AWS les fait tourner. Pas de patching, pas de dimensionnement de cluster, pas de nœuds à administrer.
Task Definition : spécifier votre conteneur
{
"family": "myapp",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "512",
"memory": "1024",
"executionRoleArn": "arn:aws:iam::123456789:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::123456789:role/ecsTaskRole",
"containerDefinitions": [{
"name": "api",
"image": "123456789.dkr.ecr.eu-west-1.amazonaws.com/myapp:latest",
"portMappings": [{"containerPort": 8080}],
"environment": [{"name": "ENV", "value": "production"}],
"secrets": [{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:eu-west-1:123456789:secret:myapp/db"
}],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/myapp",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "api"
}
}
}]
}
Service ECS : maintenir N tâches en vie
resource "aws_ecs_service" "api" {
name = "myapp-api"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.api.arn
desired_count = 3
launch_type = "FARGATE"
network_configuration {
subnets = var.private_subnet_ids
security_groups = [aws_security_group.ecs.id]
assign_public_ip = false
}
load_balancer {
target_group_arn = aws_lb_target_group.api.arn
container_name = "api"
container_port = 8080
}
deployment_controller {
type = "CODE_DEPLOY" # déploiement bleu/vert
}
}
Déploiement bleu/vert avec CodeDeploy
Le déploiement bleu/vert démarre une nouvelle version en parallèle, la valide, puis bascule le trafic — zéro interruption et rollback instantané si un problème survient.
# Via CLI après push d'une nouvelle image
aws deploy create-deployment \
--application-name myapp \
--deployment-group-name production \
--revision revisionType=AppSpecContent,...
Notre formation AWS couvre ECS Fargate avec des ateliers Terraform complets.