1. 개요
2015년 4월 9일 정식 출시된 AWS의 EC2 Container Service는 도커(Docker) 컨테이너를 지원한다. 현재는 Amazon Elastic Container Service(Amazon ECS)라는 이름으로 제공된다. 즉, EC2 인스턴스 클러스터에서 도커 컨테이너를 실행하고 관리할 수 있다. ECS 자체에 대한 별도 비용은 없으며, 사용한 EC2 인스턴스 등 실제 AWS 리소스 비용만 지불하면 된다.
![]()
도커에 대해서는 이 문서를 읽어보자.
핵심만 설명하면 다음과 같다.
- 이미지 기반
- 운영체제 수준의 가상화
- 프로세스 격리
- 배포와 실행의 자동화
2. 용어
주요 용어부터 살펴보자. ECS를 이해할 때는 “컨테이너를 어디에 배치할 것인가”와 “어떤 형태로 실행할 것인가”를 나누어 보면 쉽다.
- 클러스터: 컨테이너 인스턴스들의 논리적 그룹이다. Task가 배치되는 영역이며, 작은 규모에서 시작해 필요에 따라 확장할 수 있다.
- 컨테이너 인스턴스: EC2 인스턴스 그 자체를 의미한다. 일반적으로 EC2 인스턴스에 도커 데몬과 ECS 에이전트가 설치되어 있으며, 이를 위한 AMI가 제공된다.
- Task 정의(Task Definition): 하나 이상의 컨테이너 정의를 포함하는 애플리케이션 실행 청사진이다. 사용할 이미지, CPU/메모리, 포트 매핑, 환경 변수 등을 정의한다.
- Task: Task 정의를 바탕으로 실제 실행된 단위다. 컨테이너 인스턴스 위에서 실행된다.
- Service: 지정한 수의 Task를 유지하고, 로드 밸런싱·자동 복구·스케일링을 담당한다.
- 컨테이너: Task의 일부로 생성되어 실행되는 리눅스 컨테이너다.
예를 들어 웹 애플리케이션 컨테이너와 로그 수집 컨테이너를 하나의 Task 정의에 함께 넣을 수 있다. 이 Task를 Service로 실행하면 ECS는 지정한 개수만큼 Task가 계속 살아 있도록 관리한다.
3. 기능
그럼 본격적인 기능에 대해 알아보자.
3-1. 제어
ECS는 API를 제공한다. 이를 통해 서비스를 통합하고 확장할 수 있다.
- 클러스터 생성 및 삭제
- Task 정의 등록 및 등록 취소
- 도커 컨테이너 실행 및 종료
- 클러스터와 인스턴스에 대한 상세 정보 조회
- CloudFormation 사용 시 ECS 클러스터 프로비저닝, Task 정의 등록, 컨테이너 배치 설정
3-2. 스케줄링
리소스 요구 사항과 가용성 조건에 따라 클러스터에 컨테이너를 배치할 수 있다. 이 스케줄러는 배치 작업, 장기 실행 애플리케이션, 서비스 운영 등에 사용할 수 있다.
- 자동 복구: 스케줄러는 비정상 컨테이너를 자동으로 복구한다. 즉, 원하는 수만큼의 컨테이너가 계속 애플리케이션을 지원하도록 유지한다.
- 배포: 컨테이너를 새로운 버전으로 쉽게 업데이트할 수 있다. 새로운 버전을 올리면 스케줄러가 새 버전의 컨테이너를 실행하고, 기존 버전의 컨테이너를 중지한다. 이 과정에서 ECS가 ELB에 컨테이너를 자동으로 등록하거나 등록 해제할 수 있다.
운영 중에는 Task가 어떤 이유로 종료되었을 때 Service가 다시 Task를 띄우는지, 배포 시 구 버전과 신 버전이 기대한 순서로 교체되는지 확인해 보는 것이 좋다.
3-3. 로드 밸런싱
ECS는 ELB와 결합해 트래픽을 여러 컨테이너로 분산할 수 있다. 이를 통해 컨테이너가 늘어나거나 줄어들 때도 외부에서는 동일한 엔드포인트로 서비스를 사용할 수 있다.
3-4. CLI (https://github.com/aws/amazon-ecs-cli)
CLI를 사용하면 개발과 배포 작업을 자동화하기 쉽고, ECS 인스턴스 설정도 비교적 간단하게 처리할 수 있다.
- Docker Compose: 멀티 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구다.
3-5. 모니터링
- CloudWatch를 사용하여 실행 중인 Task의 평균/전체 CPU 사용률과 메모리 사용률을 모니터링할 수 있다. Task, 서비스, 클러스터별로 그룹화하여 모니터링할 수 있다.
- CloudWatch 경보를 사용해 컨테이너와 클러스터를 확장/축소할 때 알림을 받을 수 있다.
3-6. 로깅
- 각 컨테이너 인스턴스의 ECS 에이전트 로그와 도커 컨테이너 로그를 CloudWatch로 전송하여 진단할 수 있다.
- 모든 ECS API 호출을 기록할 수 있다.
- CloudTrail을 통해 로그 파일을 전송받을 수 있다.
3-7. 보안
- ECS는 각 ECS Task마다 IAM 역할을 설정할 수 있다. 이를 통해 애플리케이션 컨테이너가 필요한 AWS 리소스에만 접근하도록 권한을 제한할 수 있다.