Amazon Web Services 한국 블로그

EC2 Container Service 신규 기능 – 콘테이너 레지스트리, ECS CLI, AZ-인식 스케줄링 등

최근 도커(Docker)를 기반한 콘테이너 기반 배포 모델이 빠르게 자리잡아 가면서 더 빠른 앱 빌드, 실행 및 업데이트 및 확장을 선호해 가고 있다는 점은 고무적입니다. 작년에 Amazon EC2 Container Service(ECS)를 공개한 이후 많은 고객들이 이를 실제로 적용하여 마이크로서비스(Microservices) 기반 웹 애플리케이션 개발과 일괄 처리 업무 등에 활용 중입니다.

많은 개발자들은 콘테이너를 통해 개발, 테스트 및 배포에 드는 작업 속도를 높힐 수 있다고 이야기합니다. 특히 개별 콘테이터들이 “표준” 개발 환경을 가지고 있기에 다양한 프로그래밍 언어, 프레임웍 및 미들웨어의 조합을 만들 수 있으며, 이러한 자유도 높은 격리 방식을 통해 전체 시스템을 하나로 만들어 큰 변경에 따른 위험 부담을 줄여 더욱 혁신을 이룰 수 있게 되기 때문입니다.

그동안 Amazon ECS와 도커 사용자로 부터 받은 다양한 피드백을 바탕으로 오늘 새로운 기능 몇 가지를 공개합니다. 바로 Amazon EC2 Container Registry(콘테이너 레지스트리), Amazon EC2 Container Service CLI(ECS CLI)입니다. 또한 Amazon ECS 스케줄러를 통해 가용 영역(Availablity Zones) 인식 및 신규 콘테이너 옵션 몇 가지를 추가 합니다.

한번 같이 살펴 보도록 하겠습니다.

Amazon EC2 Container Registry(콘테이너 레지스트리)
도커 또는 ECS 역시 가상 이미지라는 개념에서 시작합니다. 콘테이너를 실행할 때, 이러한 가상 이미지를 참고하고 이를 Docker Registry라는 저장소에서 가져옵니다. 레지스트리는 배포 과정에서 매우 중요한 부분입니다. 고객들과의 대화를 통해 우리는 레지스트리 자체가 매우 높은 가용성과 확장성 및 여러 리전을 지원하는 글로벌 접근 가능한 시스템으로 만들어져야할 필요가 있다고 배웠습니다. 또한, AWS Indentity and Access Management(IAM) 서비스와 연동하여 보다 세부적인 제어를 위한 인증도 필요합니다.

고객들의 이러한 요구사항에 맞추어 직접 레지스트리를 운영하다 보니 피해도 되는 관리 부담이 들게 되었습니다.

이에 저희는 Amazon EC2 Container Registry(Amazon ECR)를 공개합니다. 이전의 콘테이너 이미지의 저장 및 관리 배포 등의 운영 부담을 줄일 수 있는 관리형 서비스입니다.

Amazon ECR은 ECS를 통해 여러분의 프로덕션 워크플로와 쉽게 통합할 수 있습니다. 여러분의 개발 PC에서 도커 CLI를 통해 Amazon ECR로 콘테이너 이미지를 등록할 수 있고, Amazon ECS에서 배포 과정에서 가져올 수도 있습니다.

콘테이너 이미지를 S3에 저장하고, IAM 사용자의 역할을 기반으로 접근 제어와 함께 전환 과정에서 암호화도 지원 합니다. 여러분은 인터넷을 통해 전송되는 데이터와 저장하는 데이터에만 신경 쓰시면 됩니다.

아래는 관리 콘솔에서의 몇 가지 스크린샷입니다.

등록 페이지에서 방문하여 초기 접근을 위해 등록을 하실 수 있습니다. 이 프로그램에 관심이 있으시면 오늘 바로 하실 수 있습니다.

이를 함께 작업한 여러 파트너도 있습니다. Shippable, CloudBees, CodeShipWercker 등의 협력사와 Amazon ECS와 ECR의 통합 및 자동 빌드, 도커 이미지 배포 등을 제공합니다. 더 자세한 사항은 콘테이너 파트너 페이지를 참고하세요.

Amazon ECS CLI
ECS 커맨드라인 인터페이스(CLI)는 Amazon ECS를 위해 만들어진 것으로 로컬 개발 환경에서 클러스터, 태스크를 생성하거나 업데이트 및 모니터링 할 수 있도록 하는 간편한 명령어입니다.

Amazon ECS CLI는 Docker Compose를 지원하는데, 이 프로그램은 멀티 콘테이너 애플리케이션을 정의하고 실행하는 인기 높은 오픈 소스 도구입니다. 매일 일어나는 개발 및 테스트 주기에서 AWS 관리 콘솔이 아닌 새로운 간편한 방식입니다.

ECS CLI를 몇 분안에 사용해 보실 수 있습니다. 사용 가이드를 기반으로 다운로드 해서 설치만 하면 되며, 클러스터 설정의 경우 아래와 같이 간단한 샘플 명령어를 사용할 수 있습니다.

$ ecs-cli configure --region us-east-1 --cluster my-cluster

클러스터 실행을 다음과 같습니다.

$ ecs-cli up --keypair my-keys --capability-iam --size 2

Docker Compose는 설정 파일이 필요합니다. 아래는 간단한 docker-compose.yml 파일입니다.

web:
  image: amazon/amazon-ecs-sample
  ports:
  - "80:80"

이제 클러스터를 실행해 봅니다.

$ ecs-cli compose up
INFO[0000] Found task definition TaskDefinition=arn:aws:ecs:us-east-1:980116778723:task-definition/ecscompose-bin:1
INFO[0000] Started task with id:arn:aws:ecs:us-east-1:9801167:task/fd8d5a69-87c5-46a4-80b6-51918092e600

실행 중인 태스크가 있는지도 한번 살펴봅니다.

$ ecs-cli compose ps
Name                                      State    Ports
fd8d5a69-87c5-46a4-80b6-51918092e600/web  RUNNING  54.209.244.64:80->80/tcp

위에 지정된 주소에서 여러분의 샘플 앱이 돌아가고 있는지 확인해 보시면 됩니다.

ECS CLI는 여러 옵션을 지원합니다. (전체를 보시려면 -help를 해보세요.) 예를 들어, 장기 실행 서비스도 만들어 관리 가능합니다. 아래는 옵션 목록입니다.

ECS CLI는 Apache 2.0 라이선스 기반의 오픈 소스로 https://github.com/aws/amazon-ecs-cli에서 받을 수 있으며, 여러분의 풀 리퀘스트(Pull Request)도 기다립니다.

도커 콘테이너 신규 설정 옵션
태스크 정의(task definition)은 애플리케이션 정보입니다. 이를 통해 콘테이너를 정의하고 언제 어떤 EC2 인스턴스에 배포할 것인가를 정의할 수 있습니다. 몇 가지 파리미터를 통해 이러한 태스크 정의를 할 수 있는데, 사용할 도커 이미지, 각 콘테이너가 사용할 CPU 및 메모리 용량 및 호스트 콘테이너와 매핑할 포트 등입니다.

뿐만 아니라 도커 라벨, 작업 디렉토리, 네트워크 사용 여부, 실행 권한, 읽기 전용 루트 파일 시스템, DNS 서버 및 DNS 검색 도메인, 로그 설정 및 (/etc/hosts에 넣을) 추가 호스트, SELinux 등에서 지원하는 멀티 레벨 보안(Multi-Level Security) 등 보안 옵션도 있습니다.

ECS 콘솔 내부에 이러한 태스크 정의 편집기를를 통해 업데이트하거나 새로운 설정을 입력할 수 있습니다.

더 자세한 사항은 태스크 정의 파라미터 문서를 참고하시기 바랍니다.

가용 영역 인식 스케줄링 지원
장기 실행 서비스 및 애플리케이션을 위한 콘테이너의 스케줄링을 위해 올해 초 Amazon ECS Service Scheduler를 소개하였습니다. 서비스 스케줄러는 Elastic Load Balacing과 선택저그로 통합할 수 있습니다. 이를 통해 특정 숫자의 태스크를 항상 실행할 수 있고, 이게 실패하면 태스크를 재시작합니다. 고객들이 ECS를 프로덕션 환경에서 서비스를 할 수 있는 주요한 기능이고, 계속적으로 좀 더 쉽게 지원을 계속하려고 합니다.

오늘 부터 서비스 스케줄러는 가용영역을 인식합니다. 즉, 새 태스크를 실행하면 서비스 스케줄러가 태스크를 AWS의 다중 가용영역 기반으로 서비스 부하 분산을 하게 됩니다.

re:Invent Amazon ECS 배우기
여러분이 re:Invent 현장에 계시다면 여러분의 (경쟁자가 아닌) 동료들이 어떻게 콘테이너 기반 컴퓨팅 서비스를 만들고 운영하는지 그 노하우를 배우실 수 있습니다. 아래 세션들을 참고해 보시기 바랍니다.

  • CMP302 – Amazon EC2 Container Service: Distributed Applications at Scale (생중계 예정)
  • CMP406 – Amazon ECS at Coursera.
  • DVO305 – Turbocharge Your Continuous Deployment Pipeline with Containers.
  • DVO308 – Docker & ECS in Production: How We Migrated Our Infrastructure from Heroku to AWS.
  • DVO313 – Building Next-Generation Applications with Amazon ECS.
  • DVO317 – From Local Docker Development to Production Deployments.

— Jeff;

이 글은 EC2 Container Service Update – Container Registry, ECS CLI, AZ-Aware Scheduling, and More의 한국어 번역이며, re:Invent 2015의 신규 서비스 소식입니다.