인프라 — ECS/Fargate Terraform 구성
Phase 3에서는 ECS/Fargate 인프라를 Terraform 모듈로 완성하는 작업을 진행했다.
이번 커밋에서 새로 추가된 모듈은 세 가지다. ecs-cluster는 Fargate 클러스터 자체를 관리하고, iam 모듈은 FargateTaskExecutionRole과 FargateTaskRole을 분리해서 정의한다. s3-bucket 모듈은 영상 처리 결과물 저장용으로 추가했다.
기존 ecs-worker 모듈에는 App Auto Scaling과 CloudWatch Alarm을 붙였다. SQS 큐에 쌓인 메시지 수를 기준으로 scale-up/down이 트리거되는 구조다. 초기 desired_count는 0으로 설정해서 큐가 비어 있을 때는 태스크가 아예 뜨지 않도록 했다.
resource "aws_appautoscaling_policy" "scale_up" {
name = "${var.service_name}-scale-up"
policy_type = "StepScaling"
resource_id = aws_appautoscaling_target.ecs.resource_id
scalable_dimension = aws_appautoscaling_target.ecs.scalable_dimension
service_namespace = aws_appautoscaling_target.ecs.service_namespace
step_scaling_policy_configuration {
adjustment_type = "ChangeInCapacity"
step_adjustment {
scaling_adjustment = 1
metric_interval_lower_bound = 0
}
}
}
dev/prod 양쪽 main.tf에서 VPC와 Subnet은 data source로 참조하고, S3, IAM, ECR, ECS Worker 모듈을 순서대로 연결했다. outputs.tf도 각 환경에 새로 추가해서 클러스터 ARN, 태스크 역할 ARN 등을 외부에서 참조할 수 있게 했다.
이 시점부터는 terraform apply 한 번으로 워커 인프라 전체가 올라간다.