[AWS SAA-C03] AWS ECS 정리

ECS (EC2 Container Service)

ECS(AWS EC2 Container Service)

  • ECS는 확장성이 뛰어난 고성능 컨테이너 관리 서비스로, Docker 컨테이너를 지원하며 관리형 EC2 인스턴스 클러스터에서 애플리케이션을 실행할 수 있다.
  • ECS는 지역 내 여러 AZ에서 애플리케이션 컨테이너를 고가용성 방식으로 실행하는 것을 간소화하는 리전 서비스이다.
  • 클러스터 관리 인프라를 설치, 운영 및 확장할 필요가 없다.
  • 자체 사용자 정의 스케쥴러 또는 타사 스케쥴러를 통합하여 비즈니스 또는 애플리케이션별 요구 사항을 충족할 수 있다.
  • AWS Fargate와 함께 서버리스 옵션을 제공한다.

ECS 실행 유형

  • 컨테이너를 실행하기 위해 클러스터에서 EC2 인스턴스를 구성 및 배포한다.
  • 예제
    = 지속적으로 높은 CPU 코어 및 메모리 사용량이 필요한 워크로드
    = 가격 최적화가 필요한 대규모 워크로드
    = 애플리케이션이 퍼시스턴트 스토리지에 액세스해야 하는 경우
    = 인프라를 직접 관리해야 하는 경우

AWS Fargate 실행 유형

  • AWS Fargate는 서버나 Amazon EC2 인스턴스 클러스터를 관리할 필요 없이 컨테이너를 실행할 수 있는 서버리스 종량제 옵션을 Amazon ECS와 함께 제공한다.
  • AWS Fargate를 사용하면 컨테이너를 실행하기 위해 가상 머신 클러스터를 프로비저닝, 구성 또는 확장할 필요가 없으며 서버 유형을 선택하거나 클러스터 확장 시기를 결정하거나 클러스터 패킹을 최적화할 필요가 없다.
  • Fargate 시작 유형은 다음과 같은 워크로드에 적합하다.
    = 오버헤드를 낮추기 위해 최적화해야 하는 대규모 워크로드
    = 가끔 버스트가 발생하는 소규모 워크로드
    = 소규모 워크로드
    = 배치 워크로드

ECS 구성 요소

  • 컨테이너 및 이미지
    = ECS에 배포된 애플리케이션은 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 소프트웨어 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 표준화된 소프트웨어 개발 단위인 Docker 컨테이너에서 실행되도록 아키텍처를 설계해야 한다.
    = 컨테이너는 이미지라는 읽기 전용 템플릿에서 생성된다.
    = 이미지는 일반적으로 Docker 파일에서 빌드되며 레지스트리에 저장되어 컨테이너 인스턴스에서 다운로드 및 실행할 수 있다.
    = ECS는 VPC, Docker Hub 내의 프라이빗 Docker 이미지 레지스트리에 접근하거나 EC2 컨테이너 레지스트리(ECR)와 통합되도록 구성할 수 있다.

Cluster

  • ECS 클러스터는 작업 또는 서비스를 실행하기 위한 EC2 컨테이너 인스턴스의 논리적 그룹이다.
  • ECS는 지정된 레지스트리에서 컨테이너 이미지를 다운로드하고 클러스터 내의 컨테이너 인스턴스에서 해당 이미지를 실행한다.Task Definition
  • 작업 정의는 하나 이상의 도커 컨테이너를 포함하는 애플리케이션에 대한 설명이다.
  • 작업 정의는 애플리케이션이 ECS에서 실행되도록 준비하는 데 필요하다.
  • 작업 정의는 애플리케이션을 구성하는 하나 이상의 컨테이너를 설명하는 JSON 형식의 텍스트 파일이다.
  • 작업 정의는 사용할 컨테이너, 해당 리포지토리, 개방할 포트, 데이터 볼륨 등 애플리케이션에 대한 다양한 파라미터를 지정한다.
  • 태스크 실행 역할은 ECS 에이전트 및 컨테이너 런타임 환경에서 컨테이너를 실행할 준비를 하는 데 사용된다.(예: ECR에서 이미지 가져오기, 로그 관리 등). 테스크 자체에서는 사용되지 않는다.
  • 태스크 역할은 태스크에서 실행 중인 컨테이너가 가정하는 추가 AWS 권한을 부여한다.
  • 네트워크 모드는 태스크 컨테이너에 사용할 Docker 네트워킹 모드를 지정한다. 유효한 값은 none, bridge, awsvpc, host이다.

Task & Scheduling

  • 작업은 클러스터 내의 컨테이너 인스턴스에 대한 작업 정의의 인스턴스화이다.
  • ECS 내에서 애플리케이션에 대한 작업 정의가 생성된 후 클러스터에서 실행할 작업 수를 지정할 수 있다.
  • ECS 작업 스케줄러는 컨테이너 인스턴스에 작업을 배치하는 역할을 하며, 다음과 같은 여러 가지 스케쥴링 옵션을 사용할 수 있다.

Service

  • ECS 서비스는 지정된 수의 작업 정의 인스턴스를 동시에 실행하고 유지 관리하는 데 도움이 된다.
  • 선택적으로 서비스에서 트래픽을 서비스 내 작업 간에 균등하게 분산하기 위해, Elastic Load Balancing을 사용하도록 서비스를 구성할 수 있다.
  • EC2 시작 유형은 ALB, NLB, 클래식 로드 밸런서를 지원한다.
  • Fargate Launch Type은 ALB와 NLB만 지원한다.
  • ALB는 다음과 같은 여러 기능을 제공하므로 권장된다.
  • 각 서비스는 여러 로드 밸런서에서 트래픽을 처리하고 여러 대상 그룹을 지정하여 여러 로드 밸런싱 포트를 노출할 수 있다.
  • Fargate와 EC2 인스턴스 모두에서 호스팅되는 작업에서 지원된다.
  • 컨테이너가 동적 호스트 포트 매핑을 사용할 수 있도록 허용한다.(컨테이너 인스턴스당 동일한 서비스의 여러 작업이 허용되도록)

Container Agent

  • 컨테이너 에이전트는 ECS 클러스터 내의 각 인스턴스에서 실행된다.
  • 컨테이너 에이전트는 인스턴스의 현재 실행 중인 작업과 리소스 사용률에 대한 정보를 ECS로 전송하고, ECS로부터 요청을 받을 때마다 작업을 시작 및 중지한다.

ECS와 Elastic Beanstalk 비교

  • ECS는 사용자 정의 애플리케이션 아키택처를 보다 세밀하게 제어할 수 있도록 도와준다.
  • 컨테이너의 이점을 활용하되 컨테이너 이미지를 업로드하여 개발부터 프로덕션까지 애플리케이션을 배포하는 단순성을 원하는 경우 Elastic Beanstalk가 이상적이다.
  • Elastic Beanstalk는 고객이 웹 애플리케이션과 서비스를 쉽게 배포하고 확장할 수 있도록 도와주는 애플리케이션 관리 플랫폼에 가깝다.
  • Elastic Beanstalk을 사용하면 CPU 및 메모리 요구 사항, 포트 매핑, 컨테이너 링크와 함께 배포할 컨테이너 이미지를 지정할 수 있다.
  • Elastic Beanstalk는 세부적인 사항을 추상화하여 ECS 클러스터 프로비저닝, 부하 분산, 자동 확장, 모니터링 클러스터 전체에 컨테이너 배치와 같은 모든 세부 사항을 자동으로 처리한다.

ECS와 Lambda 비교

  • EC2 컨테이너 서비스는 확장성이 뛰어난 Docker 컨테이너 관리 서비스로, Docker 컨테이너에서 분산 애플리케이션을 실행하고 관리할 수 있다.
  • AWS Lambda는 이벤트 기반 작업 컴퓨팅 서비스로, SES, SNS, DynamoDB & Kinesis 스트림, CloudWatch 등과 같은 이벤트 소스의 "이벤트"에 대한 응답으로 코드(Lambda 함수)를 실행하는 서비스이다.
반응형