1. 개요
2015년 4월 9일 정식 출시한 AWS의 EC2 Container 서비스는 도커(Docker) 컨테이너를 지원한다. 즉, EC2 인스턴스 클러스터에서 도커 컨테이너를 실행하고 관리할 수 있다. 별도의 비용은 들지 않는다. EC2 비용만 내면 된다.
도커에 대해서는 이 문서를 읽어보자.
핵심만 설명하면 다음과 같다.
- 이미지 기반
- 운영체제 가상화
- 프로세스 격리
- 자동화
2. 용어
주요 용어부터 살펴보자.
- 클러스터 : 컨테이너 인스턴스들의 논리적 그룹, Task에 위치하는 영역, 최소에서 시작하여 동적 확장
- 컨테이너 인스턴스 : EC2 인스턴스 그 자체 (EC2 + 도커 데몬 + ECS 에이전트), AMI 제공
- Task 정의 : (Task Definition) 한개 이상의 컨테이너 정의를 포함한 애플리케이션 실행
- Task : Task 정의를 통해 생성된 인스턴스, 컨테이너 인스턴스에서 실행
- Services : 컨테이너간 트래픽을 로드 밸런싱하고 자동 복구하고 스케일링
- 컨테이너 : Task 일부로 생성된 리눅스 컨테이너
3. 기능
그럼 본격적인 기능에 대해 알아보자.
3-1. 제어
ECS는 API를 제공한다. 이를 통해 서비스를 통합하고 확장할 수 있다.
- 클러스터 생성 및 삭제
- Task 등록 및 등록 취소
- 도커 컨테이너 실행 및 종료
- 클러스와 인스턴스에 대한 자세한 정보
- (CloudFormation 사용 시) ECS 클러스터 프로비저닝, Task 정의 등록, 컨테이너 일정 수립
3-2. 일정
리소스 필요와 가용성 요구 조건에 따라 클러스터에 컨테이너를 배치할 수 있다. 이 스케쥴러는 배치 작업, 장기 실행 애플리케이션과 서비스 일정 등을 설정할 수 있다.
- 자동 복구 : 스케쥴러는 비정상 컨테이너를 자동으로 복구한다 -> 원하는 수만큼의 컨테이너가 애플리케이션을 지원
- 배포 : 컨테이너를 새로운 버전으로 쉽게 업데이트할 수 있다. 만약 새로운 버전을 업로드하면 스케쥴러가 자동으로 신버전의 컨테이너를 실행하고 구 버전의 컨테이너를 중지한다. (ECS가 ELB에서 컨테이너를 자동 등록/등록해제함)
3-3. LB
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 설정을 할 수 있다.