AWS DVA 컨테이너 — ECS·ECR·Fargate·EKS

2026-05-03확률과 통계 마스터 노트

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 메시)

시리즈 다른 편

공식 문서: Amazon ECS Developer Guide / Amazon EKS User Guide 에서 더 깊이.

다음 글(12편 완결)에서는 개발자 도구 — AWS CLI·SDK·CDK·CloudFormation까지 시리즈 마무리.

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

답글 남기기

error: Content is protected !!