AWS DVA-C02 마스터 노트 시리즈 11편. ECS Cluster·Task Definition·Service의 3계층, EC2 Launch Type vs Fargate 서버리스, Task Role과 Execution Role의 결정적 차이, ECR Docker 레지스트리 인증·라이프사이클, EKS Kubernetes 매니지드까지 — 컨테이너 영역의 자격증 핵심을 한 흐름으로.
이 글은 AWS DVA-C02 마스터 노트 시리즈의 열한 번째 편입니다. 2편에서 컨테이너 짧게 봤다면, 이번엔 본격 — ECS·ECR·Fargate·EKS 4가지.
회사 비유 — 표준 화물 박스(Docker Container) 안에서 일하는 방식. 박스에는 일하는 데 필요한 모든 도구·환경 포함. 박스 단위로 옮기면 어디서든 같은 결과.
컨테이너 vs VM
| 구분 | VM (EC2) | Container |
|---|---|---|
| 격리 | 완전 (OS 포함) | 프로세스 격리 |
| 시작 시간 | 분 | 초 |
| 크기 | GB | MB |
| 적합 | 다른 OS·풀 격리 | 마이크로서비스·표준 환경 |
ECS — Elastic Container Service
AWS의 컨테이너 오케스트레이션. 3계층.
Cluster (인프라 그룹)
└── Service (Task의 운영 집합)
└── Task Definition (이미지·포트·환경 정의)
└── Task (실제 실행되는 컨테이너 모음)
Cluster
EC2 인스턴스 또는 Fargate 캐퍼시티 그룹. Task가 실행되는 인프라.
Task Definition
JSON으로 컨테이너 사양 정의.
{
"family": "my-app",
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "web",
"image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/web:latest",
"portMappings": [{ "containerPort": 80 }],
"essential": true,
"environment": [
{ "name": "ENV", "value": "production" }
],
"secrets": [
{ "name": "DB_PASSWORD", "valueFrom": "arn:aws:secretsmanager:..." }
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/my-app",
"awslogs-region": "us-east-1"
}
}
}
]
}
여기서 시험 함정이 하나 있어요. essential: true 컨테이너가 죽으면 Task 전체 종료. 보조 컨테이너(사이드카)는 essential: false로 격리.
Service
Task의 원하는 개수·로드 밸런싱·자동 재시작.
Desired Count: 3
실제 Running: 2 → ECS가 자동으로 1개 추가 시작
Task 종료 → ECS가 자동 재시작
Launch Type — EC2 vs Fargate
| 구분 | EC2 Launch Type | Fargate |
|---|---|---|
| 인프라 | 사용자 (EC2 직접 관리) | AWS (서버리스) |
| 패치 | 사용자 | AWS |
| 비용 | EC2 시간 | vCPU·메모리 단위 |
| 적합 | 큰 워크로드·세밀 제어 | 단순·서버리스 |
여기서 정말 중요한 시험 함정 — Fargate = 서버리스 컨테이너. EC2 관리 안 함. 대부분 시나리오에서 추천.
Task Role vs Execution Role — 결정적 차이
Task Role (애플리케이션 코드 권한)
- 컨테이너 안 코드가 AWS 서비스 호출
- 예: S3 GetObject, DynamoDB Query
Task Execution Role (ECS 에이전트 권한)
- 컨테이너 시작에 필요한 권한
- ECR 이미지 풀
- CloudWatch 로그 송출
- Secrets Manager 비밀 가져오기
여기서 정말 중요한 시험 함정 — 두 역할의 용도가 완전히 다릅니다. Task Role = 앱 권한, Execution Role = 컨테이너 실행 인프라 권한. 시험 단골.
"내 Lambda가 S3에 못 접근" → Lambda 실행 역할
"내 ECS 컨테이너가 S3에 못 접근" → Task Role
"ECR에서 이미지 풀 실패" → Task Execution Role
Auto Scaling
Service Auto Scaling
Task 수 자동 조절.
| 정책 | 기준 |
|---|---|
| Target Tracking | 평균 CPU·메모리 유지 |
| Step Scaling | CloudWatch Alarm 단계별 |
| Scheduled | 시간 기반 |
Cluster Capacity Provider
Fargate·Spot·EC2 혼합. 비용 최적화.
네트워킹 모드
| 모드 | 설명 |
|---|---|
| awsvpc | Task에 ENI 직접 (Fargate 강제) |
| bridge | Docker 기본 (EC2만) |
| host | 호스트 네트워크 (포트 충돌 위험) |
| none | 네트워크 없음 |
awsvpc가 표준 — Task에 자체 IP·SG.
ECR — Elastic Container Registry
AWS Managed Docker 레지스트리. ECS·EKS 이미지 저장.
인증
IAM 통합. ECR API에 임시 인증 토큰 받음.
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin \
123456789012.dkr.ecr.us-east-1.amazonaws.com
토큰 12시간 유효.
이미지 푸시·풀
# 빌드
docker build -t my-app .
# 태그
docker tag my-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
# 푸시
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
# 풀 (다른 환경에서)
docker pull 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
라이프사이클 정책
오래된 이미지 자동 삭제 — 비용 절감.
{
"rules": [
{
"rulePriority": 1,
"selection": {
"tagStatus": "untagged",
"countType": "sinceImagePushed",
"countUnit": "days",
"countNumber": 14
},
"action": { "type": "expire" }
}
]
}
이미지 스캔
취약점 자동 검사.
| 종류 | 설명 |
|---|---|
| Basic Scanning | 무료, 푸시 시 기본 |
| Enhanced Scanning | Inspector 통합, 지속 스캔 |
EKS — Elastic Kubernetes Service
AWS Managed Kubernetes. ECS와 다르게 표준 K8s API.
언제 EKS?
- 멀티 클라우드·온프렘 호환
- 기존 Kubernetes 자산 활용
- Helm·Istio 같은 K8s 생태계
EKS vs ECS
| 구분 | ECS | EKS |
|---|---|---|
| 표준 | AWS 자체 | Kubernetes |
| 학습 곡선 | 낮음 | 높음 |
| 멀티 클라우드 | X | ◯ |
| AWS 통합 | 깊음 | 보통 |
| 비용 | 무료 (인프라만) | 클러스터당 $0.10/시간 + 인프라 |
여기서 시험 함정이 하나 있어서 — AWS만 쓰면 ECS, 멀티 클라우드면 EKS. 시험 시나리오에서 키워드로 분기.
EKS 노드 종류
| 종류 | 설명 |
|---|---|
| Managed Node Groups | EC2 자동 관리 |
| Self-Managed | 사용자가 EC2 직접 |
| Fargate | 서버리스 |
App Runner
가장 단순한 컨테이너 실행. Docker 이미지 또는 GitHub 코드 직접 → 자동 배포·HTTPS·스케일.
ECS·EKS보다 더 추상화된 PaaS.
ECS·Fargate·EKS·App Runner 비교
| 서비스 | 추상화 | 적합 |
|---|---|---|
| ECS (EC2) | 중간 | EC2 세밀 제어 |
| ECS (Fargate) | 높음 | AWS-native 서버리스 |
| EKS | 낮음 (K8s) | 멀티 클라우드 |
| App Runner | 매우 높음 | 간단 웹 앱 |
Service Discovery
ECS 서비스 간 통신.
Cloud Map
DNS 기반 서비스 디스커버리.
Service A → my-service.local (DNS) → Service B
서비스 자동 등록·헬스 체크.
App Mesh
서비스 메시 (Envoy 기반). 트래픽 제어·관찰성·암호화.
시험 직전 한 번 더 — 자주 헷갈리는 함정 모음
여기까지가 11편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.
- 컨테이너 = 표준 화물 박스, VM보다 가벼움·빠름
- ECS 3계층 — Cluster / Service / Task Definition
- Task Definition = JSON, 컨테이너 사양
essential: true컨테이너 죽으면 Task 종료- Service = Desired Count·로드 밸런싱·자동 재시작
- Launch Type — EC2 vs Fargate
- Fargate = 서버리스, AWS가 인프라 관리
- Task Role (앱 코드 권한) ≠ Execution Role (컨테이너 시작 권한)
- Execution Role — ECR 풀·CloudWatch 로그·Secrets 가져오기
- 시험 단골 — Task vs Execution Role 구분
- Service Auto Scaling — Target / Step / Scheduled
- Capacity Provider — Fargate·Spot·EC2 혼합
- 네트워킹 모드 4종 — awsvpc (Fargate 강제) / bridge / host / none
- ECR = AWS Managed Docker 레지스트리
- IAM 통합 인증, 토큰 12시간 유효
aws ecr get-login-password | docker login- 라이프사이클 = 오래된 이미지 자동 삭제
- 이미지 스캔 — Basic (무료) / Enhanced (Inspector)
- EKS = Managed Kubernetes
- 멀티 클라우드·기존 K8s 자산
- AWS만 = ECS / 멀티 클라우드 = EKS
- EKS 노드 — Managed / Self-Managed / Fargate
- 클러스터당 $0.10/시간 + 인프라
- App Runner = 가장 단순, GitHub 직접
- Service Discovery — Cloud Map (DNS) / App Mesh (Envoy 메시)
시리즈 다른 편
- 1편 — IAM
- 2편 — 컴퓨팅
- 3편 — 스토리지
- 4편 — 데이터베이스
- 5편 — 네트워킹
- 6편 — 메시징
- 7편 — 서버리스
- 8편 — CI/CD
- 9편 — 모니터링
- 10편 — 보안·암호화
- 11편 — 컨테이너 (현재 글)
- 12편 — 개발자 도구
공식 문서: Amazon ECS Developer Guide / Amazon EKS User Guide 에서 더 깊이.
다음 글(12편 완결)에서는 개발자 도구 — AWS CLI·SDK·CDK·CloudFormation까지 시리즈 마무리.