Amazon Web Services

AWS EC2 Container란 무엇인가?

sstdio.h·2016년 12월 13일·조회 7,023

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 리소스에만 접근하도록 권한을 제한할 수 있다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.