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. 기능 비교 표
| 항목 | EC2 | Fargate |
|---|---|---|
| 노드 관리 | 본인 | 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. 이 장의 핵심 정리
- EC2와 Fargate는 “노드를 누가 관리하는가” 가 가장 큰 차이다.
- 작은 ~ 중간 규모는 운영 비용까지 합쳐 Fargate가 유리하다.
- GPU · Privileged · 데몬셋 같은 요건은 EC2가 필요하다.
- 같은 Cluster에 두 종류를 섞어 쓸 수 있다.
- Fargate Spot은 상태 비저장 서비스에서 큰 절감 효과를 낸다.