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 설정을 할 수 있다.