

# Amazon ECS에 대한 EC2 용량 아키텍트
<a name="launch-type-ec2"></a>

요금 최적화가 필요한 대규모 워크로드에 대해 EC2 용량을 사용합니다.

EC2를 사용하여 태스크 정의 및 서비스를 모델링하는 방법을 고려할 경우 어떤 프로세스를 함께 실행해야 하는지와 각 구성 요소의 규모를 어떻게 조정할지를 고려하는 것이 좋습니다.

예를 들어 다음 구성 요소로 이루어진 애플리케이션을 가정해 보겠습니다.
+ 웹 페이지에 정보를 표시하는 프런트엔드 서비스
+ 프런트엔드 서비스에 API를 제공하는 백엔드 서비스
+ 데이터 스토어

이 예에서는 공통 용도로 사용되는 컨테이너를 그룹화하는 태스크 정의를 만듭니다. 여러 구성 요소를 여러 태스크 정의로 구분합니다. 다음 예제 클러스터에는 3개의 프런트 엔드 서비스 컨테이너, 2개의 백엔드 서비스 컨테이너 및 1개의 데이터 스토어 서비스 컨테이너를 실행하는 3개의 컨테이너 인스턴스가 있습니다.

동일한 태스크 정의의 관련된 컨테이너를 그룹화할 수 있습니다(예: 반드시 함께 실행해야 하는 연결된 컨테이너). 예를 들어 로그 스트리밍 컨테이너를 프런트 엔드 서비스에 추가하고 동일한 태스크 정의에 추가합니다.

태스크 정의로부터 서비스를 생성하여 원하는 태스크의 가용성을 유지할 수 있습니다. 자세한 내용은 [Amazon ECS 롤링 업데이트 배포 생성](create-service-console-v2.md) 섹션을 참조하세요. 서비스에서 컨테이너를 Elastic Load Balancing 로드 밸런서와 연결할 수 있습니다. 자세한 정보는 [로드 밸런싱을 사용하여 Amazon ECS 서비스 트래픽 분산](service-load-balancing.md)을 참조하세요. 애플리케이션 요구 사항이 변경될 경우 서비스를 업데이트하여 원하는 태스크의 개수를 조정할 수 있습니다. 또는 태스크에 새 버전의 컨테이너를 배포하도록 서비스를 업데이트할 수 있습니다. 자세한 내용은 [Amazon ECS 서비스 업데이트](update-service-console-v2.md) 섹션을 참조하세요.

![\[세 개의 인스턴스가 있는 애플리케이션 아키텍처 예제. 인스턴스 1에는 프런트 엔드 서비스 컨테이너와 데이터베이스 서비스 컨테이너가 있습니다. 인스턴스 2와 인스턴스 3에는 프론트엔드 서비스 컨테이너와 백엔드 서비스 컨테이너가 있습니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/images/application.png)


# Amazon ECS의 EC2 및 외부 인스턴스에 대한 컨테이너 이미지 가져오기 동작
<a name="pull-behavior"></a>

컨테이너를 시작하는 데 걸리는 시간은 기본 컨테이너 이미지에 따라 다릅니다. 예를 들어, 더 큰 이미지(Debian, Ubuntu, Amazon1/2의 전체 버전)는 시작 시간이 더 오래 걸릴 수 있습니다. 상대적으로 슬림한 버전(Debian-slim, Ubuntu-slim, Amazon-slim) 또는 더 작은 기본 이미지(Alpine)에 비해 컨테이너에서 실행되는 서비스가 더 많기 때문입니다.

Amazon ECS 에이전트에서 작업을 시작하면 원격 레지스트리에서 Docker 이미지를 가져온 다음, 로컬 복사본을 캐싱합니다. 애플리케이션의 각 릴리스에 새 이미지 태그를 사용하는 경우 이 동작은 필요하지 않습니다.

`ECS_IMAGE_PULL_BEHAVIOR` 에이전트 파라미터는 이미지 가져오기 동작을 결정합니다. 다음과 같은 옵션을 사용할 수 있습니다.
+ `ECS_IMAGE_PULL_BEHAVIOR`: `default`

  이미지는 원격에서 가져옵니다. 가져오지 못하면 인스턴스의 캐싱된 이미지가 사용됩니다.
+ `ECS_IMAGE_PULL_BEHAVIOR`: `always`

  이미지는 원격에서 가져옵니다. 가져오기에 실패하면 작업에 실패합니다.

배포 속도를 높이려면 Amazon ECS 에이전트 파라미터를 다음 값 중 하나로 설정합니다.
+ `ECS_IMAGE_PULL_BEHAVIOR`: `once`

  이전에 동일 컨테이너 인스턴스의 작업에서 가져온 적이 없거나 이미지가 자동 이미지 정리 프로세스에 의해 제거된 경우에만 이미지를 원격에서 가져옵니다. 그렇지 않으면 인스턴스에 캐시된 이미지가 사용됩니다. 이 옵션은 불필요한 이미지 가져오기 시도를 방지합니다.
+ `ECS_IMAGE_PULL_BEHAVIOR`: `prefer-cached`

  캐시된 이미지가 없으면 이미지를 원격에서 가져옵니다. 그렇지 않으면 인스턴스에 캐시된 이미지가 사용됩니다. 캐시된 이미지가 제거되지 않도록 컨테이너에서 자동 이미지 정리는 꺼져 있습니다.

`ECS_IMAGE_PULL_BEHAVIOR` 파라미터를 위의 값 중 하나로 설정하면 Amazon ECS 에이전트가 다운로드한 기존 이미지를 사용하기 때문에 시간을 절약할 수 있습니다. 더 큰 Docker 이미지의 경우 네트워크를 통해 가져오는 데 다운로드 시간이 10\$120초가 걸릴 수 있습니다.