본문으로 건너뛰기
aws검색
컴퓨트

ECS 와 Fargate (태스크, 서비스, Express Mode, Managed Instances)

Amazon ECS 의 클러스터, 태스크 정의, 서비스 구조와 세 가지 실행 방식(Fargate, EC2, 2025-09 에 나온 ECS Managed Instances), 태스크 역할과 실행 역할의 차이, 배포 방식, 2025-11 의 ECS Express Mode 까지 정리합니다.

ECSFargate태스크 정의Express ModeECS Managed Instances2026-10 기준, 약 8분상태 표시 설명

구조

Amazon ECS 는 AWS 가 만든 컨테이너 오케스트레이터입니다. 쿠버네티스보다 개념이 적고 AWS 서비스와 깊게 엮여 있어서, "컨테이너를 돌리고 싶지 쿠버네티스를 운영하고 싶지는 않은" 팀에 잘 맞습니다.

개념뜻
클러스터태스크가 도는 논리적 묶음. 그 자체로는 비용이 없음
태스크 정의컨테이너 이미지, CPU와 메모리, 포트, 환경 변수, 비밀, 로그 설정, 역할을 담은 버전 문서
태스크태스크 정의로 띄운 실행 단위(컨테이너 묶음). 배치 작업은 태스크만 돌리고 끝냄
서비스원하는 태스크 수를 유지하고 ELB 에 붙이며 배포를 관리
용량 공급자태스크가 어디서 돌지(Fargate, Fargate Spot, EC2 ASG, Managed Instances)와 비율

세 가지 실행 방식

방식서버 관리요금맞는 곳
Fargate없음. 태스크마다 격리된 환경태스크의 vCPU, 메모리, 시간대부분의 웹, API, 배치. 첫 선택
EC2 (ASG 용량 공급자)AMI, 패치, 확장을 직접EC2 인스턴스 요금GPU, 특수 커널 설정, 큰 바이너리 캐시, 최대 비용 효율
ECS Managed InstancesAWS 가 프로비저닝, 패치, 확장EC2 요금 + 관리 요금EC2 의 모든 유형(GPU 포함)이 필요하지만 노드 운영은 싫을 때

ECS Managed Instances(2025-09-30)는 Fargate 처럼 편하면서 EC2 유형을 고를 수 있는 중간 지대입니다. 태스크 요구 사항에 맞는 인스턴스를 내 계정에 띄우고, 14 일마다 보안 패치를 하며, EC2 이벤트 창으로 패치 시간을 정할 수 있습니다. 인스턴스 요금에는 Savings Plans 같은 EC2 할인이 적용됩니다.

Fargate Spot 은 Fargate 를 스팟 용량으로 싸게 돌립니다. 회수 2 분 전에 SIGTERM 이 오니, 컨테이너가 신호를 받아 정리하고 끝나도록 stopTimeout 을 맞춥니다.

태스크 정의 예

{
  "family": "orders-api",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024",
  "runtimePlatform": { "cpuArchitecture": "ARM64", "operatingSystemFamily": "LINUX" },
  "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole",
  "taskRoleArn": "arn:aws:iam::111122223333:role/orders-api-task",
  "containerDefinitions": [{
    "name": "app",
    "image": "111122223333.dkr.ecr.ap-northeast-2.amazonaws.com/orders-api:1.8.2",
    "portMappings": [{ "containerPort": 8080 }],
    "secrets": [{ "name": "DB_PASSWORD", "valueFrom": "arn:aws:secretsmanager:ap-northeast-2:111122223333:secret:prod/orders/db" }],
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": { "awslogs-group": "/ecs/orders-api", "awslogs-region": "ap-northeast-2", "awslogs-stream-prefix": "app" }
    },
    "healthCheck": { "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"], "interval": 15, "retries": 3 }
  }]
}

실행 역할과 태스크 역할

헷갈리기 쉬운 두 역할입니다.

  • 실행 역할(execution role): ECS 에이전트가 쓰는 역할. ECR 에서 이미지 가져오기, CloudWatch Logs 에 쓰기, Secrets Manager 와 SSM 파라미터에서 비밀 읽어 주입하기.
  • 태스크 역할(task role): 컨테이너 안의 애플리케이션이 쓰는 역할. S3, DynamoDB, SQS 호출 권한.

이미지 풀 실패(CannotPullContainerError)나 비밀 주입 실패는 실행 역할 문제이고, 애플리케이션의 AccessDenied 는 태스크 역할 문제입니다.

네트워크

Fargate 는 awsvpc 모드만 씁니다. 태스크마다 ENI 와 프라이빗 IP 가 하나씩 붙고, 보안 그룹도 태스크 단위로 겁니다. 그래서 태스크가 많으면 서브넷 IP 가 빨리 줄어듭니다. 프라이빗 서브넷에 두고, 이미지를 받으려면 NAT Gateway 나 ECR, S3, CloudWatch Logs 용 VPC 엔드포인트가 있어야 합니다. 엔드포인트 구성은 보안 그룹과 VPC 엔드포인트 문서를 봅니다.

서비스 사이 호출은 Service Connect 로 이름 기반 디스커버리, 재시도, 지표를 붙일 수 있습니다.

배포 방식

방식동작
롤링 업데이트 (기본)minimumHealthyPercent, maximumPercent 범위 안에서 새 태스크를 띄우고 옛 태스크를 뺌. 배포 서킷 브레이커로 실패 시 자동 롤백
블루/그린 (ECS 내장)새 버전을 따로 띄우고 테스트 트래픽으로 확인한 뒤 한 번에 전환. 2025-07 부터 CodeDeploy 없이 ECS 자체 기능으로 가능
외부 배포 컨트롤러직접 만든 도구로 제어
aws ecs update-service --cluster prod --service orders-api \
  --task-definition orders-api:42 \
  --deployment-configuration '{"deploymentCircuitBreaker":{"enable":true,"rollback":true},"minimumHealthyPercent":100,"maximumPercent":200}'

ECS Express Mode (2025-11)

ECS Express Mode 는 컨테이너 이미지만 주면 서비스, ALB, 확장 설정, HTTPS 가 되는 AWS 제공 도메인까지 한 번에 만들어 주는 기능입니다. 하나의 ALB 뒤에 최대 25 개 서비스를 규칙 기반 라우팅으로 나눠 붙여 ALB 비용을 아낍니다. 기능 자체는 무료이고 만들어진 리소스 요금만 냅니다. 만들어진 리소스는 모두 내 계정에 보이니 나중에 직접 고쳐 쓸 수 있고, 2026-07 부터는 사용자 지정 태스크 정의도 쓸 수 있습니다. App Runner 가 2026-04-30 부터 신규 고객을 받지 않는 Maint 단계로 들어갔기 때문에, 간단한 웹 앱을 올릴 곳으로 Express Mode 가 자주 거론됩니다.

확장

서비스 자동 확장은 Application Auto Scaling 으로 CPU, 메모리, ALB 요청 수에 대상 추적을 겁니다. 2026-06 AWS Summit New York 에서는 20 초 단위 고해상도 지표로 확장을 더 빨리 시작하는 개선이 발표됐습니다(AWS 벤치마크 기준 확장 시작까지 363 초에서 86 초). 확장 속도가 아쉬웠다면 서비스 설정에서 해당 옵션을 확인합니다.

증상, 원인, 해결

증상원인해결
CannotPullContainerError실행 역할에 ECR 권한 없음, 프라이빗 서브넷에 NAT 나 ECR 엔드포인트 없음실행 역할 정책, ecr.api, ecr.dkr, S3 게이트웨이 엔드포인트 확인
태스크가 뜨자마자 Essential container exited애플리케이션 시작 실패, 메모리 부족(OOM, 종료 코드 137)CloudWatch Logs 확인, 메모리 상향
서비스가 계속 태스크를 교체ALB 상태 확인 실패, 유예 시간 부족healthCheckGracePeriodSeconds, 대상 그룹 헬스 경로 확인
태스크가 PENDING 에 멈춤서브넷 IP 부족, EC2 용량 부족서브넷 여유 IP 확인, 용량 공급자 상태 확인

이 문서에서