Elastic Container Service (ECS)

Bohyeon Park·2024년 8월 22일

AWS

목록 보기
1/1

ECS(Elastic Container Service)

Amazon Elastic Container Service(ECS)는 Amazon Web Services(AWS)에서 제공하는 고도로 확장 가능하고 높은 성능을 지닌 컨테이너 오케스트레이션 서비스입니다. ECS를 통해 Amazon EC2 인스턴스 클러스터 또는 컨테이너를 위한 서버리스 컴퓨팅 엔진인 AWS Fargate에서 Docker 컨테이너를 실행하고 관리할 수 있습니다.

ECS는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 단순화하여 기반 인프라 관리보다는 애플리케이션 구축 및 실행에 집중할 수 있게 해줍니다.

ECS 아키텍처

ECS는 클라이언트-서버 아키텍처를 따르며, ECS 컨트롤 플레인(서버)이 클러스터 리소스를 관리하고 각 EC2 인스턴스 또는 Fargate 작업에서 실행되는 ECS 에이전트(클라이언트)가 컨테이너를 관리합니다.

ECS 컨트롤 플레인은 다음과 같은 구성 요소로 이루어져 있습니다:

ECS API

ECS와 상호작용하기 위한 주요 인터페이스로, 클러스터, 작업, 서비스 및 기타 리소스를 생성하고 관리할 수 있습니다.

ECS 스케줄러

클러스터 내 사용 가능한 리소스에 작업과 서비스를 스케줄링합니다.

ECS 상태 관리자

클러스터 리소스의 원하는 상태와 실제 상태를 유지 관리합니다.

ECS 에이전트는 각 EC2 인스턴스 또는 Fargate 작업에서 실행되며 다음과 같은 역할을 수행합니다:

  • 컨테이너 관리
    ECS 컨트롤 플레인의 지시에 따라 컨테이너를 시작, 중지 및 모니터링합니다.
  • 리소스 모니터링
    CPU, 메모리 등의 리소스 사용량 데이터를 수집하여 ECS 컨트롤 플레인에 보고합니다.
  • 클러스터 등록
    인스턴스 또는 작업을 ECS 클러스터에 등록합니다.
    ECS 클러스터 및 작업 정의 (2분)

ECS에서는 리소스를 클러스터로 구성합니다. 클러스터는 컨테이너화된 애플리케이션을 실행하는 EC2 인스턴스 또는 Fargate 작업의 논리적 그룹입니다.

ECS에서 컨테이너를 실행하려면 작업 정의를 정의해야 합니다. 작업 정의는 실행할 컨테이너에 대한 청사진으로, Docker 이미지, 리소스 요구 사항(CPU 및 메모리), 네트워킹 구성 및 기타 설정을 설명합니다.

다음은 JSON 형식의 간단한 작업 정의 예시입니다:

{
  "family": "my-app",
  "containerDefinitions": [
    {
      "name": "my-container",
      "image": "my-docker-image:latest",
      "cpu": 256,
      "memory": 512,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80
        }
      ]
    }
  ]
}

이 작업 정의는 my-docker-image:latest Docker 이미지를 실행하는 my-container라는 단일 컨테이너를 지정합니다. 컨테이너에 256 CPU 유닛과 512MB 메모리를 할당하고, 컨테이너의 포트 80을 호스트의 포트 80에 매핑합니다.

ECS 서비스 및 배포 전략

ECS 서비스는 클러스터에서 컨테이너화된 애플리케이션을 실행하고 유지 관리하는 주요 방법입니다. 서비스는 실행해야 하는 작업 수를 정의하고, 인스턴스 장애 또는 클러스터에서 제거되더라도 원하는 작업 수를 유지하도록 보장합니다.

서비스를 업데이트할 때(예: 새 버전의 애플리케이션 배포), ECS는 새 작업이 롤아웃되고 기존 작업이 종료되는 방식을 제어하는 다양한 배포 전략을 지원합니다.
일반적인 배포 전략은 다음과 같습니다:

  • 롤링 업데이트
    ECS는 새 작업을 시작하고 일괄적으로 기존 작업을 중지하여 배포 중에도 서비스가 가용 상태를 유지하도록 합니다.
  • 블루/그린 배포
    ECS는 애플리케이션의 새 버전으로 새로운 환경(예: 새 ECS 서비스)을 생성하고, 준비되면 트래픽을 새 환경으로 라우팅합니다. 이후 기존 환경을 종료할 수 있습니다.
  • 캐너리 배포
    ECS는 소수의 새 작업을 시작하고 일부 트래픽을 새 작업으로 라우팅하여 테스트합니다. 새 작업이 테스트 단계를 통과하면 나머지 트래픽이 새 작업으로 전환됩니다.

다음은 AWS CLI를 사용하여 ECS 서비스를 생성하는 예시입니다:

aws ecs create-service \
  --cluster my-cluster \
  --service-name my-service \
  --task-definition my-task-definition:1 \
  --desired-count 3 \
  --deployment-configuration maximumPercent=200,minimumHealthyPercent=100 \
  --launch-type EC2

이 명령은 my-cluster 클러스터에 my-service라는 ECS 서비스를 생성합니다. my-task-definition:1 작업 정의를 사용하여 3개의 작업을 시작합니다. 배포 구성은 롤링 업데이트 중 ECS가 원하는 작업 수의 최대 200%(6개 작업)를 시작할 수 있고, 원하는 작업 수의 최소 100%(3개 작업)를 정상적으로 유지해야 함을 지정합니다.

ECS 네트워킹 및 서비스 발견

ECS는 컨테이너가 서로 및 외부 세계와 통신하는 방식을 제어하는 여러 네트워킹 모드를 제공합니다.
가장 일반적인 모드는 다음과 같습니다:

  • 브리지 모드
    컨테이너가 호스트 인스턴스의 가상 브리지 네트워크에 연결됩니다. 이 모드는 단순하고 격리된 애플리케이션에 적합합니다.
  • 호스트 모드
    컨테이너가 호스트 인스턴스의 네트워킹 네임스페이스를 공유하여 호스트의 네트워크 인터페이스에 직접 액세스할 수 있습니다.
  • AWS VPC 모드
    컨테이너가 Amazon Virtual Private Cloud(VPC)에 시작되어 VPC 내 다른 리소스와 통신할 수 있습니다.

ECS는 또한 AWS Cloud Map과 통합되어 있어 애플리케이션 내 서비스 간 통신을 단순화합니다. Cloud Map을 통해 서비스 인스턴스를 등록하고 발견할 수 있으므로 컨테이너화된 애플리케이션이 동적으로 서로를 찾아 통신할 수 있습니다.

결론

ECS는 AWS에서 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 단순화하는 강력한 컨테이너 오케스트레이션 서비스입니다. 작업 정의, 서비스, 배포 전략, 네트워킹 옵션 및 서비스 발견 등 풍부한 기능 세트를 통해 ECS는 컨테이너화된 워크로드를 실행하고 관리하기 위한 강력하고 유연한 플랫폼을 제공합니다.

간단한 웹 애플리케이션부터 복잡한 분산 시스템까지, ECS를 활용하면 컨테이너 관리 프로세스를 간소화하고 애플리케이션 구축 및 제공에 집중할 수 있습니다.

0개의 댓글