Amazon Elastic Container Service(ECS)는 Amazon Web Services(AWS)에서 제공하는 고도로 확장 가능하고 높은 성능을 지닌 컨테이너 오케스트레이션 서비스입니다. ECS를 통해 Amazon EC2 인스턴스 클러스터 또는 컨테이너를 위한 서버리스 컴퓨팅 엔진인 AWS Fargate에서 Docker 컨테이너를 실행하고 관리할 수 있습니다.
ECS는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 단순화하여 기반 인프라 관리보다는 애플리케이션 구축 및 실행에 집중할 수 있게 해줍니다.
ECS는 클라이언트-서버 아키텍처를 따르며, ECS 컨트롤 플레인(서버)이 클러스터 리소스를 관리하고 각 EC2 인스턴스 또는 Fargate 작업에서 실행되는 ECS 에이전트(클라이언트)가 컨테이너를 관리합니다.
ECS 컨트롤 플레인은 다음과 같은 구성 요소로 이루어져 있습니다:
ECS와 상호작용하기 위한 주요 인터페이스로, 클러스터, 작업, 서비스 및 기타 리소스를 생성하고 관리할 수 있습니다.
클러스터 내 사용 가능한 리소스에 작업과 서비스를 스케줄링합니다.
클러스터 리소스의 원하는 상태와 실제 상태를 유지 관리합니다.
ECS 에이전트는 각 EC2 인스턴스 또는 Fargate 작업에서 실행되며 다음과 같은 역할을 수행합니다:
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는 새 작업이 롤아웃되고 기존 작업이 종료되는 방식을 제어하는 다양한 배포 전략을 지원합니다.
일반적인 배포 전략은 다음과 같습니다:
다음은 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 Cloud Map과 통합되어 있어 애플리케이션 내 서비스 간 통신을 단순화합니다. Cloud Map을 통해 서비스 인스턴스를 등록하고 발견할 수 있으므로 컨테이너화된 애플리케이션이 동적으로 서로를 찾아 통신할 수 있습니다.
ECS는 AWS에서 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 단순화하는 강력한 컨테이너 오케스트레이션 서비스입니다. 작업 정의, 서비스, 배포 전략, 네트워킹 옵션 및 서비스 발견 등 풍부한 기능 세트를 통해 ECS는 컨테이너화된 워크로드를 실행하고 관리하기 위한 강력하고 유연한 플랫폼을 제공합니다.
간단한 웹 애플리케이션부터 복잡한 분산 시스템까지, ECS를 활용하면 컨테이너 관리 프로세스를 간소화하고 애플리케이션 구축 및 제공에 집중할 수 있습니다.