Category: EC2 Container Service


EC2 Container Service 신규 측정 기능: Clusters 및 Services 용

Amazon EC2 Container Service는 Docker 기반 응용 프로그램을 실행하고 관리하는 것을 도와주는 서비스입니다. EC2 Container Service – 최신 기능, 사례 및 관련 자료 총정리에서 보여 드린 대로 손쉬운 클러스터 관리 및 높은 성능, 유연한 스케줄링, 확장성, 이동성과 아울러 안전하고 효율적인 환경에서 AWS와의 연계가 가능한 장점을 가지고 있습니다.

콘테이너 기반 응용 프로그램은 Task에서 만들어집니다. Task는 같은 EC2 인스턴스에서 함께 실행되는 한 개 이상의 Docker 콘테이너입니다.각 인스턴스는 클러스터로 그룹이 됩니다. 그래서 인스턴스는 Task를 수행하기 위해 이용되는 리소스 풀과 같은 형태를 취합니다.

이러한 모델은 모니터링 및 측정에 대한 여러가지 이슈가 발생합니다. 클러스터를 너무 크지도 작지도 않은 적절한 크기로 유지하기 위해 별도의 인스턴스 보다는 클러스터 전체의 메모리와 CPU 사용율을 봐야 하기 때문입니다. 특히, 다양한 CPU와 메모리의 크기를 가진 EC2 인스턴스가 포함 된 클러스터에서 쉽지 않은 일입니다.

신규 Cluster 측정 기능
이를 위해서 클러스터의 자원을 제대로 측정하고 이를 기반으로 확장할 수 있도록 각 인스턴스의 크기 및 콘테이너의 설정을 기준으로 만들어진 Amazon CloudWatch 측정 기준과 모니터링을 시작합니다. AWS ECS 관리 콘솔에서 측정치를 볼 수 있으며 이를 기반으로 Auto Scaling을 할 수 있습니다.

각 인스턴스에는 ECS Container Agent가 실행되고 있습니다. 이를 통해 인스턴스 및 Task의 CPU 및 메모리 측정값을 수집하고 정규화를 위해 데이터를 보냅니다. 정규화 작업은 클러스터 전체의 CPU 및 메모리 사용을 표현하기 위한 통계가 생성됩니다. 이러한 통계치에 따라 전체 클러스터의 활용 상황을 파악할 수 있습니다.

간단하게 살펴보겠습니다. default라는 이름의 클러스터 아래 하나의 t2.medium 인스턴스를 가지고 있습니다.

이 시점에서 Task가 실행되지 않고 클러스터는 유휴(idle) 상태입니다.

전체 CPU를 소비하게 끔 2개의 Task를 실행했습니다.:

Task가 CPU를 소비하기 까지조금 시간이 조금 걸립니다. 이제 CPU 사용율은 아래와 같이 되었습니다.

그래서 또 다른 t2.medium 인스턴스를 클러스터에 집어 넣고 활용도를 다시 확인 보았습니다. 추가된 용량에 따라 전체 이용률은 50 %로 감소했습니다.

새로운 측정치(CPUUtilizationMemoryUtilization)는 CloudWatch를 통해 이용 가능하며, 알림을 만드는 데 사용할 수 있습니다.

신규 Service 측정치
올해 초반에 EC2 Container Service를 부하 분산을 통한 애플리케이션 본격 사용에 대해 발표하였습니다. Service 스케줄러를 통해 우리가 원하는 수준에 맞게 확장 가능하고 높은 품질의 유지 관리가 가능합니다. CPU 및 메모리 사용률 통계가 서비스마다 수집 되어 콘솔에서 볼 수 있습니다.

오늘부터 새로운 Cluster와 Service의 통계 모니터링은 바로 활용해 보실 수 있습니다.

Jeff;

이 글은 New Metrics for EC2 Container Service: Clusters & Services의 한국어 번역본입니다.

AWS OpsWorks 업데이트- ECS Container 인스턴스 및 RHEL 7 지원

AWS OpsWorks는 다양한 형태 및 크기의 응용 프로그램을 쉽게 배포 할 수 있습니다. AWS OpsWorks를 사용하면 리소스 프로비저닝, EBS 볼륨 설정, 구성 관리, 애플리케이션 배포, 모니터링 및 접근 제어를 포함한 전체 애플리케이션 라이프 사이클에 대한 통합 관리가 가능합니다. (자세한 내용은 AWS OpsWorks – Flexible Application Management in the Cloud Using Chef를 참조하십시오.)

Amazon EC2 Container Service 는 Docker 콘테이너를 지원하고 Amazon Elastic Compute Cloud (EC2) 관리 클러스터에서 응용 프로그램을 쉽게 작동시킬 수 있는 확장성 높은 콘테이너 관리 서비스입니다. (자세한 내용은 AWS OpsWorks – Flexible Application Management in the Cloud Using Chef를 참조하십시오.)

ECS 및 RHEL 지원

AWS OpsWorks는 ECS Container 인스턴스에 대한 지원을 추가합니다. Ubuntu 14.04 LTS 또는 Amazon Linux 2015.03 AMI에서 작동되는 ECS Container 인스턴스를 프로비저닝하고 관리 할 수 있습니다.

또한, Red Hat Enterprise Linux (RHEL) 7.1 지원을 추가했습니다.

이 기능을 더 자세히 살펴 보겠습니다!

ECS Container 인스턴스 지원
새로운 ECS Cluster레이어를 사용하면 쉽게 ECS Container 인스턴스를 프로비저닝하고 구성 할 수 있습니다. 간단하게 레이어를 생성하고 (기존에 만든) 클러스터 이름과 인스턴스 유형을 지정하여 EBS 볼륨을 연결하면 준비가 완료됩니다. 인스턴스는 Docker, ECS 에이전트 OpsWOrks 에이전트와 함께 프로비저닝되고 ECS 클러스터 레이어와 관련된 ECS 클러스터에 함께 등록됩니다.

아래와 같이 간단히 시작할 수 있습니다. 새 레이어를 추가하여 ECS Cluster Layer 유형을 선택합니다:

클러스터 및 프로파일을 선택합니다.

다음 단계는 클러스터에 인스턴스를 추가하는 것입니다. 인스턴스마다 몇 번 클릭하기만 하면 됩니다.

일반적으로 OpsWorks에서 사용하는 경우와 마찬가지로 인스턴스는 처음에는 stopped 상태가 되어 있습니다, 그리고 Start All Instances를 클릭하여 시작할 수 있습니다.(혹은 개별 인스턴스를 시작할 수 있습니다.)

인스턴스가 시작되면 그 위에 Chef 레시피를 실행할 수 있습니다. 또한 클러스터의 인스턴스에서 운영 체제 (Linux 전용)을 설치 및 패키지 업데이트 할 수 있습니다. (자세한 내용은 Run AWS OpsWorks Stack Commands을 참조하십시오.) 마지막으로, 간단한 JSON 래퍼(Wrapper)에 쉘 명령을 넣어 실행하는 방법은 Using OpsWorks to Perform Operational Tasks를 참조하십시오.

더 자세한 내용은 OpsWorks User Guide를 참조하십시오. OpsWorks에서 프로비저닝되는 콘테이너 인스턴스에 대한 ECS 작업을 수행하는 방법은 ECS Getting Started Guide를 참조하십시오.

RHEL 7.1 지원
OpsWorks는 RedHat Enterprise Linux (RHEL) 7.1을 지원합니다. 올해 OpsWorks 윈도우 지원을 알려드렸을 때처럼 많은 AWS 고객들이 레드햇 OS를 지원하해달라는 요청이 있었고, 이를 지원하게 되었습니다. 이제 RHEL 7을 실행하는 EC2 인스턴스를 시작 및 관리 할 수​​ 있습니다. 또한, 기존의 RHEL 7을 실행하는 온-프레미스 인스턴스를 관리 할 수 있습니다.

여기 가지 부팅 옵션이 있습니다. 새로운 스택을 만들 때 기본적으로 RHEL 7을 선택 할 수 있고 기존 스택에 기본으로 설정할 수 있습니다. 또한, 기본 설정은 그대로 보존하여 새 인스턴스를 시작할 때 RHEL 7을 선택할 수 있습니다. 여기에서는 새로운 스택을 만들 때 기본적으로 RHEL 7을 선택하는 방법을 소개합니다.

이미 알고 계시겠지만, 적은 금액으로 OpsWorks에서 실행하지 않은 인스턴스를 관리할 수 있습니다. OpsWorks를 사용하면 다양한 모니터링 및 관리 도구를 사용할 수 있는 혜택을 누릴 수 있으며, 간편한 사용자 인터페이스를 사용하여 모든 인스턴스를 관리 할 수​​ 있습니다. 이를 위해, 새 인스턴스를 시작하는 것이 아니라 기존 인스턴스를 등록하여 레이어에 인스턴스를 추가 할 수 있습니다.

마법사를 사용하여 마지막 단계에 OpsWorks 에이전트를 설치하는 방법과 OpsWorks에 등록하는 방법이 표시됩니다.

위의 명령어를 실행하면 에이전트를 다운로드하여 필요한 패키지를 설치하고 에이전트를 시작합니다. 에이전트가 자신을 OpsWorks에 등록하고, 인스턴스가 명령 라인에서 지정한 스택에 포함 됩니다. 이 시점에서 그 인스턴스는 스택 내 일부로 등록되지만 레이어는 아직 할당되지 않고, 또한 아직 어떤 설정도 구성되어 있지 않습니다. OpsWorks 사용자 관리 기능을 사용하여 사용자를 생성, 권한 관리, 필요한 경우 SSH 액세스를 제공 할 수 있습니다.

에이전트를 설치하면 1분 간격으로 CloudWatch 메트릭이 설정됩니다.

인스턴스를 설정하고 모니터링하고 있는지 확인 후, 레이어에 할당 할 수 있습니다.

바로 사용 가능
오늘 부터 위의 설명한 기능을 사용할 수 있습니다.

Jeff;

PS – Special thanks are due to my colleagues Mark Rambow and Cyrus Amiri for their help with this post.

이 글은 AWS OpsWorks Update – Provision & Manage ECS Container Instances; Run RHEL 7의 한국어 번역입니다.

EC2 Container Service – 최신 기능, 사례 및 관련 자료 총정리

작년 가을 re:Invent에서 처음 소개한 Amazon EC2 Container Service는 올해 4월에 정식 출시하였습니다. 그동안 많은 개선을 해왔기 때문에 이를 돌아보는 시점이 된 것 같습니다. 많은 AWS 고객은 이미 EC2 Container Service를 이미 잘 사용하고 있고, 그 속에서 어떤 이야기가 있었는지 공유하고 싶습니다. 고객들은 직접 클러스터를 구축해서 확장성이나 성능 및 관리를 하지 않아도 유연한 콘테이너 서비스를 만들 수 있게 되었다는 피드백이 많았습니다.

최신 기능

우리는 매우 많은 피드백 및 기능 요청을 받아 왔고 트윗, 이메일, Amazon ECS 포럼 및 블로그 글과 개발자 모임 등에서 무엇을 필요로 하고 계신지를 계속 전해 받았습니다. 여러분의 피드백과 의견 모두가 훌륭한 것이라고 생각하고 최대한 이해한 후, 로드맵에 반영 해 나가고 있습니다. 다음은 2015 상반기 로드맵으로 발표 해 온 것입니다.

고객 사례

Amaxon EC2 Container Service 사용하고 있는 많은 고객들은 규모 있는 클러스터에서 실전 애플리케이션을 직접 운영하고 있습니다. 아래는 몇 가지 사례들입니다.

  • Coursera는 ECS를 통해 대규모 일괄 작업을 실행하고 있습니다. 2 개월 만에 프로토 타입을 만들어 가동 하여 몇 시간씩 걸리던 소프트웨어 변경을 지금은 몇 분 안에 배포하고, 동적 부하에 맞게 확장 할 수 있게 되었습니다 . 더 자세한 정보는 Coursera Case Study를 참고하시기 바랍니다.
  • Remind는 EC2 Container Service를 사용하여 Empire PaaS를 AWS에서 구동하고 있습니다. Docker 컨테이너를 사용하여 종속성을 격리하여, 개발 환경 생산성을 향상 시키고 운영 부분의 수를 제한 할 수 있으며, 전체 자원 활용도를 높이고 있습니다. 더 자세한 정보는 Introducing Empire : A Self-hosted PaaS Build on Docker and Amazon ECS를 참고하시기 바랍니다.
  • Hailo는 Hailo 택시 호출 스마트 폰 앱을 AWS에서 서비스하고 있으며, 마이크로서비스(microservice) 기반 아키텍처를 위한 클러스터 관리의 방식으로 EC2 Container Service를 이용하고 있습니다. 서비스의 우선 순위 및 리스소 풀의 높은 자원 활용을 유지하기 위한 통계 수치를 기반한 맞춤형 스케줄링에 활용하고 있습니다. 더 자세한 정보는 Microservices and Elastic Resource Pools with Amazon EC2 Container Service를 참고하시기 바랍니다.

개발자 커뮤니티
아래는 몇 가지 개발자 커뮤니티 활동 및 이벤트에 대한 정보입니다.

  • DockerCon – Deepak Singh는 Docker ComposeDocker Swarm를 이용하여 응용 프로그램의 클러스터를 데스크톱에서 AWS 클라우드에 확장시키는 기능을 발표하였습니다.
  • 오픈 소스 – 소프트웨어 컨테이너에 대한 공통 사양을 만들기 위한 Open Container Project 참여하기로 하였습니다. ECS Container Agent 는 GitHub에서 여러분의 참여(pull request)를 언제나 기다리고 있습니다.

더 자세한 정보
Amazon ECS와 함께 Docker에 대해 더 자세히 알고 싶은 경우 참고하시기 바랍니다.

여러분의 피드백을 언제나 기다립니다.

– Jeff;

이 글은 의 한국어 번역입니다. 아래는 한국어 Docker 추천 자료입니다.

EC2 Container Service 따라하기

지난 AWS re:Invent 에서 Amazon EC2 Container Service(ECS) ‘미리 보기’를 처음 소개하면서 다양한 고객의 소리를 들었습니다. ‘미리 보기’ 신청에 많은 분들이 요청해 주신 점도 감사드립니다.  지금까지 ‘미리 보기’ 신청을 준 모든 고객 분들이 사용하실 수 있으며, 신규 신청에 경우도 24시간내에 사용 가능하십니다.

ECS는 Docker기반의 애플리케이션 빌드 및 실행 및 확장성(Scaling)을 돕기 위한 서비스입니다. 간단한 클러스터 관리 및 높은 성능과 유연한 스케줄링, 확장성 및 이동성 그리고 AWS외 서비스 기능과 원활한 통합을 할 수 있습니다.  기존 AWS에서 실행 환경 처럼  안전하고 효율적입니다.

ECS의 기본 사항
먼저 ECS의 용어와 기본 컨셉에 대해 알아보도록 하겠습니다.

  • Cluster -Task를 실행하기 위한 Container Instance의 논리적 그룹입니다
  • Container Instance -ECS가 가동되고 있는 EC2 인스턴스 즉, Cluster에 등록된 것입니다. Cluster내에서 움직이고 있는 인스턴스 집합은 Task를 실행하기 위한 리소스 풀(Resource Pool)을 만듭니다.
  • Task Definition– Task Definition은 Container 모음을 정합니다. 여기에는 Task Description이 포함되며, 한 개 이상의 Container를 정의합니다. 어떤 Task Definition에서 정의된 모든 Container는 동일한 Container Instance에서 가동합니다.
  • Task -Task Definition를 인스턴스화 합니다.
  • Container -Task의 일부로 생성된 Docker 컨테이너입니다.

ECS Container Agent는 Container 인스턴스에서 움직이는 에이전트입니다.  Container를 시작하는 역할 및 에이전트 자신도 Docker 컨테이너에서 실행 되며(Docker Hub에서 이용 가능), 인스턴스 내에 있는 Docker 데몬과 통신을 합니다.

우리가 클러스터 및 컨테이너 서비스를 언급할 때, “스케줄링”은 인스턴스에 작업을 할당하는 과정입니다. ECS는 다음의 3가지 스케줄링 옵션을 제공합니다.

  1. 자동(Automated)RunTask 함수는 Cluster에서 Task(Task Definition에서 정의)을 자동으로 진행합니다.
  2. 매뉴얼(Manual)StartTask 함수는 특정 Container Instance(또는 인스턴스)에서 Task(Task Definition에서 정의)을 진행합니다.
  3. 맞춤(Custom)ListContainerInstancesDescribeContainerInstances을  사용하면 Cluster내의 이용 가능한 자원의 정보를 수집할 수 있고, 스케줄링의 핵심을 구현하는 것입니다. (다시 말해 최적의 Container Instance를 뽑기 위한  정보로 할용 가능합니다.) 그 이후 StartTask를 실행하고 인스턴스에서 작업을 실행합니다. 이를 실행하는 것은 자체 RunTask 구현하는 것과 같은 의미가 됩니다.

EC2 Container Service 직접 해보기
ECS를 실제로 테스트해 보기 위해 미리 보기 등록을 하신 후, AWS CLI의 프리뷰 버전을 다운로드 후 설치합니다. 그 다음, IAM Role와 VPC를 작성해 클러스터를 만들기 위한 준비를 합니다. (ECS는 현재 US East 지역에서만 가능하나 점차로 지원 리전을 확대할 예정입니다.). 아래 명령어를 실행해 MyCluster라는 이름의 Cluster를 작성해 봅시다.

$ aws ecs create-cluster --cluster-name MyCluster --profile jbarr-cli

아래는 JSON 형식으로 신규 생성한 Clouster 정보입니다.

{
    "cluster": {
        "clusterName": "MyCluster", 
        "status": "ACTIVE", 
        "clusterArn": "arn:aws:ecs:us-east-1:348414629041:cluster/MyCluster"
    }
}

다음 단계로  ECS용 AMI(Amazon Linux AMI ECS용 미리보기 버전)를 이용하여,  자신의 VPC 중에 여러개의 EC2인스턴스를 만듭니다. EC2를 만들때, ECS용으로 만든 IAM Role(ecs라는 이름)를 선택합니다.

EC2 사용자 데이터 설정에서 자신의 Cluster(MyCluster)내에서 실행하도록 ECS 설정을 적습니다.(default클러스터 경우, 필요 없음)

인스턴스가 시작된 이후 자신의 Cluster에 포함되었는지 list-container-instances 명령으로 확인할 수 있습니다. 등록된 Container Instance은 각자 ARN가 할당됩니다.

$ aws ecs list-container-instances --cluster MyCluster --profile jbarr-cli
{
    "containerInstanceArns": [
        "arn:aws:ecs:us-east-1:348414629041:container-instance/4cf62484-da62-49a5-ad32-2015286a6d39", 
        "arn:aws:ecs:us-east-1:348414629041:container-instance/be672053-0ff8-4478-b136-7fae9225e493"
    ]
}

Cluster내 인스턴스를 선택한 후, 이용 가능한 CPU와 메모리 자원에 대해 질의를 실행하고 찾아낼 수 있습니다.

$ aws ecs describe-container-instances --cluster MyCluster \
  --container-instances arn:aws:ecs:us-east-1:348414629041:container-instance/4cf62484-da62-49a5-ad32-2015286a6d39 \
  --profile jbarr-cli

아래가 결과 데이터 샘플입니다.

{
            "registeredResources": [
                {
                    "integerValue": 1024, 
                    "longValue": 0, 
                    "type": "INTEGER", 
                    "name": "CPU", 
                    "doubleValue": 0.0
                }, 
                {
                    "integerValue": 3768, 
                    "longValue": 0, 
                    "type": "INTEGER", 
                    "name": "MEMORY", 
                    "doubleValue": 0.0
                }
            ]
}

ECS의 미리보기 개발자 가이드에 따라 아래와 같이 간단한 Task Definition을 작성하고 등록해 보겠습니다.

$ aws ecs register-task-definition --family sleep360 \
  --container-definitions file://$HOME/tmp/task.json \
  --profile jbarr-cli

그리고 10개를 실행해 보도록 하죠.

aws ecs run-task --cluster MyCluster --task-definition sleep360:1 --count 10 --profile jbarr-cli

실행 중인 작업은 다음과 같이 list-tasks 명령으로 볼 수 있습니다.

$ aws ecs list-tasks --cluster MyCluster --profile jbarr-cli

아래와 같이 실행 중인 컨테이너 목록이 반환됩니다.

{
    "taskArns": [
        "arn:aws:ecs:us-east-1:348414629041:task/0c949733-862c-4979-b5bd-d4f8b474c58e", 
        "arn:aws:ecs:us-east-1:348414629041:task/3ababde9-08dc-4fc9-b005-be5723d1d495", 
        "arn:aws:ecs:us-east-1:348414629041:task/602e13d2-681e-4c87-a1d9-74c139f7335e", 
        "arn:aws:ecs:us-east-1:348414629041:task/6d072f42-75da-4a84-8b68-4841fdfe600d", 
        "arn:aws:ecs:us-east-1:348414629041:task/6da6c947-8071-4111-9d31-b87b8b93cc53", 
        "arn:aws:ecs:us-east-1:348414629041:task/6ec9828a-cbfb-4a39-b491-7b7705113ad2", 
        "arn:aws:ecs:us-east-1:348414629041:task/87e29ab2-34be-4495-988b-c93ac1f8b77c", 
        "arn:aws:ecs:us-east-1:348414629041:task/ad4fc3cc-7e80-4681-b858-68ff46716fe5", 
        "arn:aws:ecs:us-east-1:348414629041:task/cdd221ea-837c-4108-9577-2e4f53376c12", 
        "arn:aws:ecs:us-east-1:348414629041:task/eab79263-087f-43d3-ae4c-1a89678c7101"
    ]
}

여기까지 작업을 실행하고 인스턴스를 정지시킨후 정리해 보겠습니다. 직접 실행해 본 결과, 다음의 세가지 점만 약간의 Tips으로 적어봅니다.

  1. VPC가 외부 연결이 있는지 확인해 두세요
  2. ECS가 이용 가능한 적절한 AMI을 사용하세요(미리 보기 단계)
  3. IAM Role이 필요하므로, AMI을 띄울 때 설정해 주세요

ECS 빠른 실행 템플릿
빠르게 ECS를 실행해 볼 수 있도록 CloudFormation을 사용한 ECS 실행 템플릿을 활용해 보세요. 이 템플릿은 IAM Role과 그 역할을 위한 Instance Profile을 생성합니다. 이 역할은 ECS 에이전트가 ECS와 커뮤니케이션을 할 수 있도록 허용하기 위한 것입니다. 템플릿에서는 이 Role을 통해 인스턴스를 시작하고, 그 결과 인스턴스에 접근할 수 있는 SSH 명령을 생성해서 돌려줍니다. 기존 클러스터로 인스턴스를 시작 및 등록하는 것도 가능하며, “default”라는 이름의 기본 클러스터를 이용하기도 합니다. 이 템플릿을 사용한 경우, 인스턴스는 Default VPC을 사용하게 됩니다.

지금 시작 하기
ECS를 하기 위해서는 먼저 미리 보기 등록을 하시기 바랍니다. 즉시 이용 가능합니다.

ECS에 대해 더욱 알고 싶은 경우, re:Invent의 다음 세션을 보시면 좋습니다. 대략 30분 정도 됩니다(주의하실 점은 현재 ECS 기능이 크게 변해있을 수 있으므로, 참고만 하시면 좋겠습니다.)

또한, 내년 Amazon EC2 Container Service Deep Dive(2015 년 1월 14일 미국 시간)라는 웨비나를 진행합니다. 이번 웨비나에서는 ECS 선임 매니저인 Deepak Singh가 왜 우리가 ECS을 만들었는가, 핵심 개념 및 고객 애플리케이션에서 ECS를 어떻게 사용하면 좋은지 등을 발표합니다..

또 한 가지는 CoreOS라는 현대적인 인프라 구조의 요구 사항을 만족하도록 설계한 운영 체제를 기반으로 CoreOS AMI의 ECS 지원이 가능해졌습니다! 자세한 것은 Amazon ECS on CoreOS를 참고하십시오.

마지막으로 AWS는 우리는 항상 고객 피드백을 받고 있습니다. ECS는 아직 미리보기 모드이므로 고객의 요구나 요청을 듣고 새로운 기능을 개선할 수 있습니다. 피드백은 ECS 포럼에 해 주시기 바랍니다.

– Jeff;

본 글은 EC2 Container Service In Action의 한국어 번역입니다.