Amazon ECS
Amazon ECS(Elastic Container Service)는 AWS에서 제공하는 완전 관리형(Fully Managed) 컨테이너 오케스트레이션 서비스로, 컨테이너 기반 애플리케이션을 쉽게 배포, 관리, 확장할 수 있도록 도와준다.
컨테이너 실행/종료 외에도 로드 밸런싱, 클러스터링, 장애 복구, 스케줄링 등의 기능을 제공한다.
💡 완전 관리형(Fully Managed)이란?
- 사용자가 서버, 네트워크, OS 등 인프라를 직접 관리하지 않고, 서비스 제공자(AWS)가 대신 관리해주는 것을 의미한다.
- 인프라 관리 부담 없이 애플리케이션 실행에 집중할 수 있다.
💡 컨테이너 오케스트레이션(Container Orchestration)이란?
- 컨테이너의 배포, 확장, 네트워킹, 모니터링을 자동화하는 것을 의미한다.
ECS 모드
ECS는 두 가지 Launch Type을 제공하는데, '서버를 누가 관리하는지'에 대한 차이가 있다.

- ECS on EC2
- EC2 인스턴스를 직접 띄워서 클러스터를 구성해야 한다.
- EC2 안에 Docker(or containerd)와 ECS Agent가 설치되어 있다.
- 컨테이너 배포/실행/모니터링/스케일링을 ECS가 관리해준다.
(EC2 인스턴스 관리와 Auto Scaling Group(ASG) 구성은 직접 해야 한다)
- ECS Fargate
- 컨테이너를 정의하면 AWS가 필요한 인프라를 자동으로 준비해 실행해준다. (Serverless 방식)
- 내부적으로 containerd 기반이다.
- 서버 관리 + 컨테이너 배포/실행/모니터링/스케일링을 ECS가 관리해준다.
EC2와 ECS
AWS에서 서버를 운영할 때는 EC2로 직접 관리할지, ECS 서비스를 활용할지 선택해야 한다.
- EC2 : 집(서버)을 직접 짓고 전기, 수도 관리까지 스스로 해야 하는 것
- ECS(Fargate) : 풀옵션 아파트에 입주해서 생활하는 것, 고장이 나면 관리사무소에서 해결해준다.
- EC2가 적합한 경우
- 오케스트레이션이 불필요할 때 (단일 앱, 간단한 웹 서버)
- 세밀한 설정이 필요할 때 (OS, 네트워킹, 스토리지 등)
- 기존 환경이 이미 EC2 기반일 때
- ECS(Fargate)가 적합한 경우
- 빠른 배포와 확장이 중요한 경우 (MSA, 트래픽 급등 이벤트 서비스)
- 운영 부담을 최소화하고 싶은 경우 (소규모 팀, 인프라 전담 없음)
- 컨테이너 중심 아키텍처 도입 시 (자동 배포/자동 롤백 필요 시)
EC2로 운영하면 트래픽이 급증했을 때 Auto Scaling과 로드 밸런싱을 직접 구성해야 한다.
반면, ECS로 운영하면 트래픽 증가 시 자동으로 Task를 확장해주고, 장애 발생 시 자동으로 재시작 해준다.
ECS 구성 요소
ECS에는 크게 Cluster, Task Definition, Task, Service가 있다.

- Task Definition (태스크 정의) : 컨테이너를 실행하기 위해 Task를 정의한 설정 (컨테이너 이미지, CPU, 메모리, 네트워크 설정 등)
- Task (태스크) : Task Definition에 의해 실행되는 컨테이너 집합
- Cluster (클러스터) : Task와 Service가 실행되는 논리적 그룹, 컨테이너 실행 환경을 모아놓은 단위
- Service (서비스) : Cluster 배포할 Task 수 지정 및 실행/관리, 로드 밸런싱 연결, Auto Scaling 설정 등 Task의 LifeCycle 관리
ECS 아키텍처 흐름
ECS의 기본 흐름은 다음과 같다.
1. Docker 컨테이너 이미지 푸시 : 애플리케이션 코드를 Docker로 빌드하고, ECR에 푸시한다.
2. Task Definition 작성 : CPU, 메모리, 포트, 환경 변수, IAM 역할 등을 설정한다.
3. Cluster 생성 : ECS on EC2 / Fargate 모드 중 하나를 선택하여 생성한다.
4. Service 생성 : Task를 몇 개 유지할 지 지정하고, 로드밸런서에 연결한다. 그리고 Health Check를 설정한다.
5. 컨테이너 실행 및 모니터링 : ECS가 컨테이너를 실행하고 Task를 스케줄링한다. 이때, Task 상태, 로그, CPU/메모리 사용량을 모니터링 할 수 있다.
6. Auto Scaling 및 업데이트 : 트래픽이 증가하면 Service Auto Scaling으로 Task 개수를 늘린다. 또한, 새 버전으로 배포하고 Task 실패 시 자동으로 재시작한다.
출처
긴 글 읽어주셔서 감사합니다 🍀
잘못 작성된 내용은 피드백 주시면 반영하겠습니다 😎
'Infra' 카테고리의 다른 글
| [INFRA] 무중단 배포 전략 (Rolling, Blue/Green, Canary) (1) | 2024.05.15 |
|---|