Enjoy My Posts

AWS - ECS

Posted on By Geunwon Lim

ECS를 사용하면 좋은점

개발시에는 여러 컨테이들을 하나의 호스트에 넣겠지만, 이걸 프로덕션에 적용할 땐 다음과 같은 단점이 있습니다.

  1. 한 구성 요소를 변경하면 세 가지 구성 요소 모두에 영향을 미칠 수 있으며 예상보다 변경 범위가 더 클 수 있다.
  2. 모든 컨테이너를 비례 적으로 확장해야하므로 각 구성 요소의 확장이 더 어렵습니다.

  3. 작업 정의에는 컨테이너 정의가 10 개만 포함될 수 있지만 애플리케이션 스택에는 현재 또는 향후에 더 많은 정의가 필요할 수 있습니다.

  4. 작업 정의의 모든 컨테이너는 동일한 컨테이너 인스턴스에 있어야하므로 인스턴스 선택을 가장 큰 크기로 제한 할 수 있습니다.

연관된 컨테이너(예를 들어, 함께 run하는 애들)들을 묶어서 하나의 작업을 정의할 수 있습니다.

작업 정의가 있으면 원하는 작업의 가용성을 유지하기 위해 서비스를 만들 수 있습니다. 서비스에서 컨테이너를 Elastic Load Balancing 로드 밸런서와 연결할 수 있습니다. 애플리케이션 요구 사항이 변경되면 서비스를 업데이트하여 원하는 작업 수를 늘리거나 줄이거나 작업에 최신 버전의 컨테이너를 배포 할 수 있습니다.

관련 용어

Amazon ECS에서 Docker 컨테이너를 실행하려면 먼저 작업 정의를 생성해야합니다. 단일 작업 정의에서 여러 컨테이너와 데이터 볼륨을 정의할 수 있습니다.

하나의 서비스는 하나의 작업 정의해 의해 정의된다. 하나의 서비스는 다수의 작업들을 운영할 수 있는 구성을 뜻한다.

클러스터를 실행하고 나면 작업 정의들(작업 정의는 컨테이너 이미지를 정의한다.)을 만들 수 있다. 작업 정의들은 작업들을 run 하고 서비스들을 생성하는데 사용된다. 컨테이너 이미지들은 Registry에 저장되고, pull 된다.

작업 정의는 애플리케이션을 구성하는 하나 이상의 컨테이너 (최대 10 개)를 설명하는 텍스트 파일 (JSON 형식)입니다. 작업 정의는 애플리케이션의 청사진으로 생각할 수 있습니다.

ECS 컨테이너는 ECS 에이전트를 실행하고 클러스터에 등록된 EC2 인스턴스를 뜻한다.

용량 공급자

각 클러스터에 대해 기본 용량 공급자 전략을 정의하는 것이 가장 좋습니다.

컨테이너가시작되지 않거나 멈출때 디버깅

ecs에는 디버깅을 위한 도구가 딱히 없다. 문제가 있을 때 도커 로그를 살펴보기 위해 ecs 클러스터에 ssh 접속을 해야 한다.

ssh로 들어간 후 docker logs -f [container-id]로 디버깅하자.

EIP

탄력적 IP 주소는 동적 클라우드 컴퓨팅을 위해 고안된 정적 IPv4 주소입니다. 탄력적 IP 주소를 사용하면 주소를 계정의 다른 인스턴스에 신속하게 다시 매핑하여 인스턴스나 소프트웨어의 오류를 마스킹할 수 있습니다. 탄력적 IP 주소는 AWS 계정에 할당되며 릴리스할 때까지 할당된 상태로 유지됩니다.

탄력적 IP 주소는 인터넷에서 연결 가능한 퍼블릭 IPv4 주소입니다. 인스턴스에 퍼블릭 IPv4 주소가 없는 경우 탄력적 IP 주소를 인스턴스에 연결하여 인터넷 통신을 활성화할 수 있습니다. 예를 들어 로컬 컴퓨터에서 인스턴스에 연결할 수 있습니다.