Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

46장. EC2 vs Fargate — 어느 쪽에서 돌릴까

이 장에서 말하고자 하는 것

ECS는 컨테이너를 두 종류의 인프라 위에서 돌릴 수 있다.

  • EC2 — 본인이 만든 EC2 인스턴스 위
  • Fargate — 서버리스. 노드 관리 없음

이 선택이 운영의 무게를 크게 바꾼다.


1. 가장 큰 차이 — 노드를 누가 관리하는가

EC2 (자체 노드)

[ECS Cluster]
  ├─ EC2 instance 1   ← 본인이 띄움
  ├─ EC2 instance 2
  └─ EC2 instance 3
       ↑ Task들이 흩어져 돌아감
  • OS 패치
  • 보안 업데이트
  • 디스크 관리
  • 노드 ASG 운영

→ 모두 본인 책임

Fargate

[ECS Cluster]
  ├─ Task 1 (어떤 호스트에 있는지 모름)
  ├─ Task 2
  └─ Task 3
  • AWS가 호스트 관리
  • 사용자는 Task만 본다

2. 비용 — 어느 쪽이 싼가

상황마다 다르다.

Fargate가 유리

  • 트래픽이 들쭉날쭉
  • 컨테이너 수가 적거나 중간
  • 운영 인력이 적다
  • 한가한 노드를 계속 띄우고 싶지 않다

EC2가 유리

  • 일정한 대규모 트래픽
  • 노드 활용률을 90% 이상 끌어올릴 수 있다
  • Spot 인스턴스를 적극 활용한다
  • GPU 등 Fargate가 지원하지 않는 자원이 필요하다

작은 ~ 중간 규모는 거의 항상 운영 비용까지 합쳐 Fargate가 유리


3. 기능 비교 표

항목EC2Fargate
노드 관리본인AWS
Spot 사용자유Fargate Spot 일부 가능
GPU가능불가
Privileged 컨테이너가능불가
데몬셋 패턴가능불가
시작 속도빠름약간 느림
자원 활용률본인 책임Task 단위 과금이라 자동

4. 보안

Fargate는 호스트가 격리돼 있어
커널 공유로 인한 위험이 낮다.

EC2 기반 ECS는 한 EC2에 여러 Task가 같은 커널을 공유한다.

규제 산업 · 멀티 테넌트 환경에서 Fargate를 선호하는 이유 중 하나다.


5. 우리 서비스에서

이 책의 척추 구조는 Fargate 기본.

이유:

  • 운영 부담 최소
  • 학습 곡선 낮음
  • 작은 ~ 중간 규모 MSA에 비용도 합리적

GPU나 데몬셋이 필요해지면 일부 서비스만 EC2로 옮긴다.


6. 같은 클러스터에서 섞어 쓰기

[Cluster: msa]
 ├─ Service "orders"   (Fargate)
 ├─ Service "users"    (Fargate)
 └─ Service "ml-infer" (EC2 GPU)

서비스마다 Capacity Provider를 다르게 지정한다.


7. 직접 확인해보기 — CLI

# Fargate
aws ecs create-service \
  --cluster msa --service-name orders \
  --task-definition orders:1 --desired-count 2 \
  --launch-type FARGATE \
  --network-configuration "awsvpcConfiguration={subnets=[...],securityGroups=[...]}"

# EC2
aws ecs create-service \
  --cluster msa --service-name ml-infer \
  --task-definition ml:1 --desired-count 1 \
  --launch-type EC2

8. 코드로는 이렇게 생겼다 — Terraform (Fargate + Spot 혼합)

resource "aws_ecs_service" "orders" {
  name            = "orders"
  cluster         = aws_ecs_cluster.main.id
  task_definition = aws_ecs_task_definition.orders.arn
  desired_count   = 2

  capacity_provider_strategy {
    capacity_provider = "FARGATE"
    weight            = 1
  }

  capacity_provider_strategy {
    capacity_provider = "FARGATE_SPOT"
    weight            = 4
  }

  network_configuration {
    subnets         = [aws_subnet.private_a.id, aws_subnet.private_b.id]
    security_groups = [aws_security_group.task.id]
  }
}

위 예시는 Fargate Spot을 80% 섞은 구성 이다.

  • 80% Fargate Spot — 싸지만 잠깐 끊김 가능
  • 20% Fargate — 안정

상태 비저장 서비스라면 큰 절감이 된다.


9. 이렇게 쓰면 망한다 — 안티패턴

안티패턴 1. “비싸 보여서” Fargate를 안 쓴다

운영 인력 시간까지 합치면 보통 손해. 실측 청구서로 판단한다.

안티패턴 2. 상태 있는 서비스에 Fargate Spot 비율을 높게 잡는다

Spot은 언제든 회수될 수 있다.

안티패턴 3. EC2 기반 ECS에서 노드 활용률을 안 본다

노드가 늘 한가하면 비용 낭비.

안티패턴 4. Privileged · GPU 같은 요건을 Fargate에 띄우려 한다

지원되지 않는다. 시작부터 EC2 · EKS 노드그룹으로.


10. 한 줄로 정리

Fargate는 노드 관리를 없애고, EC2는 더 자유로운 제어와 비용 최적화를 제공한다


11. 이 장의 핵심 정리

  1. EC2와 Fargate는 “노드를 누가 관리하는가” 가 가장 큰 차이다.
  2. 작은 ~ 중간 규모는 운영 비용까지 합쳐 Fargate가 유리하다.
  3. GPU · Privileged · 데몬셋 같은 요건은 EC2가 필요하다.
  4. 같은 Cluster에 두 종류를 섞어 쓸 수 있다.
  5. Fargate Spot은 상태 비저장 서비스에서 큰 절감 효과를 낸다.