Amazon Elastic Container Service(Amazon ECS)를 사용하면 AWS에서 도커 컨테이너 애플리케이션을 쉽게 실행, 확장 및 보호할 수 있습니다. 로컬에서 컨테이너로 패키징된 애플리케이션은 Amazon ECS가 관리하는 컨테이너와 같은 방식으로 배포하고 실행합니다. Amazon ECS는 자체 컨테이너 오케스트레이션과 클러스터 관리 인프라를 설치, 운영, 확장할 필요가 없기 때문에 컨테이너화된 애플리케이션의 리소스 요구와 가용성 요구 사항에 집중할 수 있습니다.

Amazon ECS를 사용하면 단일 컨테이너에서 시작하여 수백 개의 인스턴스에서 실행되는 수천 개의 컨테이너까지 일반적으로 애플리케이션을 실행하는 것처럼 쉽게 확장할 수 있습니다. 애플리케이션, 배치 작업, 마이크로 서비스 등 어떤 애플리케이션이든 실행할 수 있습니다. Amazon ECS를 통해 인프라의 복잡성을 모두 생략함으로써 컨테이너식 애플리케이션을 설계, 구축 및 실행하는데 집중할 수 있습니다.

Amazon ECS에서 AWS Fargate를 사용하여 인프라를 완전히 관리하고 컨테이너 배포에만 집중할 수 있습니다. 또는 도커 컨테이너 생성 및 종료부터 상세한 클러스터 상태 정보 보기까지 기본 서버 클러스터에 대한 완전한 가시성과 제어를 갖추도록 선택할 수 있습니다. 자체 컨테이너 스케줄러를 통합하여 사용하거나 Amazon ECS를 기존 소프트웨어 전송 프로세스(예: 지속적인 통합 및 전송 시스템)에 연결할 수 있습니다.

AWS Fargate 지원

AWS Fargate 기술은 Amazon ECS에서 사용할 수 있습니다. AWS Fargate를 사용하면 Amazon EC2 인스턴스 유형을 선택하거나 클러스터를 프로비저닝 및 확장하거나 각 서버를 패치 및 업데이트할 필요가 없습니다. Bin packing 또는 host spread와 같은 작업 배치 전략을 고민할 필요가 없으며 태스크는 여러 가용 영역 전체에서 자동으로 밸런싱됩니다. Fargate에서 사용자를 위해 컨테이너 사용성을 관리합니다. 콘솔이나 CLI에서 애플리케이션의 요구 사항을 정의하고 Fargate를 시작 유형으로 선택하면 Fargate가 컨테이너 실행에 필요한 모든 조정 및 인프라 관리를 처리합니다.

인프라에 대한 더 세분화된 서버 수준 제어가 필요한 개발자의 경우, Amazon ECS EC2 시작 유형을 사용하여 서버 클러스터를 관리하고 서버에서의 컨테이너 배치를 예약할 수 있습니다.

개발

Docker 지원

Amazon ECS는 Docker를 지원하며, Docker 컨테이너를 실행하고 관리하도록 해 줍니다. 로컬에서 컨테이너로 패키징하는 애플리케이션은 구성을 변경할 필요 없이 Amazon ECS에 배포되어 실행됩니다.

Windows 컨테이너 호환성

Amazon ECS는 Windows 컨테이너 관리를 지원합니다. Amazon ECS에 최적화된 Windows AMI(Amazon Machine Image)는 향상된 인스턴스 및 컨테이너 시작 시간 성능과 CPU, 메모리 사용률, 예약 지표에 대한 가시성을 제공합니다.

로컬 개발

Amazon ECS CLI를 사용하여 로컬 개발 환경을 단순화할 수 있을 뿐 아니라 Amazon ECS에서 손쉽게 컨테이너를 설정하고 실행할 수 있습니다. Amazon ECS CLI는 멀티 컨테이너 애플리케이션을 정의 및 실행하기 위한 오픈 소스 도구인 Docker Compose를 지원합니다. 멀티 컨테이너 애플리케이션을 정의하는 데 사용한 것과 동일한 Compose 정의를 개발 머신뿐 아니라 프로덕션에도 적용할 수 있습니다. Amazon ECS CLI는 오픈 소스 도구입니다. Amazon ECS CLI를 다운로드합니다.

리포지토리 지원

Amazon ECS는 타사에서 호스팅한 도커 이미지 리포지토리 또는 Docker Hub 및 Amazon Elastic Container Registry(Amazon ECR)와 같은 액세스 가능한 프라이빗 도커 레지스트리와 함께 사용할 수 있습니다. 작업 정의에 리포지토리를 지정하기만 하면 Amazon ECS에서 애플리케이션에 적합한 이미지를 가져옵니다.

관리

작업 정의

Amazon ECS를 사용하면 작업 정의라고 하는 선언형 JSON 템플릿을 통해 작업을 정의할 수 있습니다. Docker 리포지토리 및 이미지, 메모리 및 CPU 요구 사항, 공유 데이터 볼륨, 컨테이너가 서로 연결되는 방식 등 작업에 필요한 하나 이상의 컨테이너를 작업 정의 내에서 지정할 수 있습니다. 서비스에 등록할 수 있는 단일 작업 정의 파일에서 원하는 만큼의 작업을 실행할 수 있습니다. 작업 정의 파일을 사용하면 애플리케이션 사양의 버전을 관리할 수도 있습니다.

프로그래밍 방식 제어

Amazon ECS는 간단한 API 세트를 제공하여 서비스를 통합하고 확장할 수 있도록 해줍니다. API 작업을 통해 클러스터를 생성 및 삭제하고, 작업을 등록 및 등록 취소하며, Docker 컨테이너를 실행 및 종료하고, 클러스터와 해당 인스턴스의 상태에 대한 자세한 정보를 제공할 수 있습니다. 또한, AWS CloudFormation을 사용하여 Amazon ECS 클러스터를 프로비저닝하고, 작업 정의를 등록하고, 컨테이너 일정을 수립할 수 있습니다.

컨테이너 배포

Amazon ECS를 사용하면 컨테이너를 새로운 버전으로 쉽게 업데이트할 수 있습니다. 새로운 버전의 애플리케이션 작업 정의를 업로드하면, Amazon ECS 스케줄러가 자동으로 업데이트된 이미지를 사용하는 새로운 컨테이너를 시작하고 이전 버전을 실행하는 컨테이너를 중지합니다. Amazon ECS는 연결된 애플리케이션 로드 밸런서에 자동으로 컨테이너를 등록하고 등록 취소합니다.

블루/그린 배포

AWS CodeDeploy의 블루/그린 배포는 애플리케이션 업데이트 중에 가동 중단 시간을 최소화하는 데 도움이 됩니다. 트래픽을 다시 라우팅하기 전에 새로운 버전의 Amazon ECS 서비스를 기존 버전과 함께 시작하고 새로운 버전을 테스트할 수 있습니다. 또한 배포 프로세스를 모니터링하고 문제가 발생할 경우 신속하게 롤백할 수 있습니다.

컨테이너 자동 복구

Amazon ECS는 비정상 컨테이너를 자동으로 복구하여 원하는 수의 컨테이너가 애플리케이션을 지원하도록 합니다.

Capacity Providers

Capacity Providers를 사용하면 여러 유형의 컴퓨팅 용량에서 컨테이너식 워크로드가 실행되는 방법에 대한 유연한 규칙을 정의하고 용량의 확장을 관리할 수 있습니다. EC2와 Fargate 모두에서 Capacity Providers를 사용할 수 있습니다. EC2에서는 EC2 Auto Scaling 그룹(ASG)과 연관된 Capacity Provider를 만들고 ECS Cluster Auto Scaling을 통해 ASG의 확장을 관리하여 태스크를 실행하는 데 필요한 용량이 아직 사용할 수 없는 경우에도 요청되도록 할 수 있습니다. 태스크와 서비스를 실행할 때 여러 Capacity Providers로 태스크와 서비스를 분할할 수 있습니다. 이를 통해 Fargate와 Fargate Spot 전체에서 사전 정의된 분할 비율로 서비스를 실행하거나 서비스를 리밸런싱할 필요 없이 여러 가용 영역에서 동일한 수의 태스크를 실행하도록 하는 등의 새로운 기능을 사용할 수 있습니다.

일정 설정

Amazon ECS에는 리소스 필요(예: CPU 또는 RAM)와 가용성 요구 사항에 따라 클러스터 전체에 컨테이너를 배치하는 여러 일정 예약 전략이 포함되어 있습니다. 사용 가능한 예약 전략을 사용하여 배치 작업, 장기 실행 애플리케이션 및 서비스, 데몬 프로세스의 일정을 예약할 수 있습니다.

작업 일정 예약
Amazon ECS 작업 일정 예약 기능을 사용하면 배치 처리 작업처럼 작업을 수행한 후 중단하는 프로세스를 실행할 수 있습니다. 작업 일정 예약 기능은 수동으로, 작업 대기열에서 자동으로 또는 사용자가 정의하는 시간 간격에 따라 작업을 시작할 수 있습니다.

서비스 일정 예약
Amazon ECS 서비스 일정 예약 기능을 사용하면 상태 비저장 서비스 및 애플리케이션을 실행할 수 있습니다. 이 일정 예약 전략을 사용하면 지정된 수의 작업이 지속적으로 실행되고 실패 시 작업을 다시 시작하도록 할 수 있습니다. Elastic Load Balancing 로드 밸런서에 작업이 등록되었는지 확인하고, 실행 작업에 대해 정의한 상태 확인을 수행할 수 있습니다.

데몬 일정 예약
Amazon ECS 데몬 일정 예약 기능은 ECS 클러스터에 있는 선택된 각 인스턴스에서 동일한 작업을 자동으로 실행합니다. 따라서 로깅, 모니터링 또는 백업과 같은 서비스에 대한 공통 관리 기능을 제공하는 작업을 손쉽게 실행할 수 있습니다.

Task Placement

Amazon ECS에서는 인스턴스 유형, 가용 영역과 같은 내장된 속성 또는 사용자가 정의하는 사용자 지정 속성을 기반으로 EC2 인스턴스 클러스터에 작업을 배치하는 방법을 사용자 지정할 수 있습니다. environment = production과 같은 속성을 사용하여 리소스에 레이블을 지정하고, 목록 API 작업을 사용하여 이러한 리소스를 찾으며, RunTask 및 CreateService API 작업을 사용하여 이러한 리소스에서 작업 일정을 예약할 수 있습니다.

Amazon ECS에서는 빈팩과 스프레드 같은 배치 전략을 사용하여 작업이 배치되는 위치를 추가 정의할 수도 있습니다. 정책을 연결하면 코드를 작성하지 않고도 정교한 배치 기능을 달성할 수 있습니다.

작업 배치 정책은 AWS Fargate 시작 유형과 함께 사용되지 않습니다.

네트워킹과 보안

서비스 검색

Amazon ECS는 AWS Cloud Map과 통합되므로 컨테이너화된 서비스가 쉽게 서로를 검색하고 서로 연결할 수 있습니다. AWS Cloud Map은 클라우드 리소스 검색 서비스입니다. Cloud Map을 사용하면 애플리케이션 리소스의 사용자 지정 이름을 정의할 수 있으며 동적으로 변화하는 이러한 리소스의 업데이트된 위치를 유지 관리합니다. 그러면 웹 서비스가 항상 해당 리소스의 가장 최신 위치를 검색하기 때문에 애플리케이션 가용성이 향상됩니다.

서비스 메시

서비스 메시를 사용하면 애플리케이션에 있는 모든 마이크로 서비스가 통신하는 방법을 표준화하여 복잡한 마이크로 서비스 애플리케이션을 쉽게 구축하고 실행할 수 있습니다. AWS App Mesh는 종단 간 가시성과 높은 가용성을 위해 애플리케이션의 일부를 쉽게 구성할 수 있는 서비스입니다. App Mesh를 사용하려면 Envoy 프록시 이미지를 ECS 작업 정의에 추가합니다. App Mesh는 Envoy 구성을 관리하여 서비스 메시 기능을 제공합니다. App Mesh는 제공된 Envoy 부트스트랩 구성에 지정된 엔드포인트로 지표, 로그 및 추적을 내보냅니다. App Mesh는 메시가 지원되는 마이크로 서비스 간에 트래픽 라우팅, 회로 차단, 재시도 및 기타 제어를 구성하기 위한 API를 제공합니다.

작업 네트워킹

Amazon Elastic Container Service에서는 Docker 네트워킹을 지원하며, Amazon VPC와 통합하여 컨테이너에 대한 격리를 제공합니다. 따라서 컨테이너를 다른 서비스 및 외부 트래픽에 연결하는 방법을 제어할 수 있습니다. Amazon ECS의 경우 서로 다른 사용 사례를 지원하는 컨테이너를 위해 4가지 네트워킹 모드 중에 선택할 수 있습니다.

작업 네트워킹/awsvpc
이 모드는 실행 중인 각 ECS 작업에 전용 탄력적 네트워킹 인터페이스를 할당함으로써 컨테이너는 VPC에서 EC2 인스턴스처럼 모든 네트워킹 기능을 사용할 수 있습니다.

브리지
이 모드는 로컬 가상 네트워크 내 호스트에서 실행되는 모든 컨테이너를 연결하는 Linux 브리지를 생성합니다. 이 브리지는 호스트의 기본 네트워크 연결을 통해 액세스할 수 있습니다.

호스트
이 모드는 컨테이너를 호스트의 네트워크 스택에 직접 추가함으로써 격리되지 않은 상태로 호스트의 네트워크 상에 컨테이너를 노출합니다.

없음
이 모드는 컨테이너의 외부 네트워킹을 비활성화합니다.

Load Balancing

Amazon ECS는 Elastic Load Balancing과 통합되어 있어 애플리케이션 로드 밸런서나 네트워크 로드 밸런서를 사용하여 컨테이너에 트래픽을 분산시킬 수 있습니다. 작업 정의와 사용할 로드 밸런서를 지정하면 Amazon ECS가 자동으로 로드 밸런서에 컨테이너를 추가하고 제거합니다. 작업 정의에서 동적 포트를 지정하면 Amazon EC2 인스턴스에서 예약된 경우, 컨테이너에 미사용 포트가 제공됩니다. 또한 경로 기반 라우팅을 사용하여 여러 서비스가 로드 밸런서를 공유할 수 있습니다.

보안

Amazon ECS에서는 ECS 작업마다 IAM 역할을 지정할 수 있습니다. 이를 통해 Amazon ECS 컨테이너 인스턴스의 역할이 최소화됨으로써 '최소 권한' 액세스 정책을 준수할 뿐만 아니라 사용자는 인스턴스 역할과 작업 역할을 따로 관리할 수 있습니다. Amazon CloudWatch logs를 사용하여 작업이 할당되는 IAM 역할에 대한 가시성을 얻을 수도 있습니다.

모니터링 및 로깅

모니터링

Amazon ECS는 Amazon CloudWatch를 통해 컨테이너와 클러스터를 모니터링하는 기능을 제공합니다. 실행 중인 작업의 평균 및 전체 CPU 사용률과 메모리 사용률을 작업 정의, 서비스 또는 클러스터별로 그룹화하여 모니터링할 수 있습니다. 또한, CloudWatch 경보를 설정하여 컨테이너 또는 클러스터를 확장하거나 축소해야 할 때 알림을 받을 수 있습니다.

로깅

Amazon ECS를 사용하여 모든 Amazon ECS API 호출을 기록할 수 있으며, AWS CloudTrail을 통해 로그 파일을 전송받을 수 있습니다. API 호출자 ID, API 호출 시간, API 호출자의 소스 IP 주소, 요청 파라미터 및 Amazon ECS가 반환한 응답 요소와 같은 정보가 기록됩니다. CloudTrail은 AWS Management Console, AWS SDK, AWS CLI에서 만들어진 API 호출 기록을 제공합니다. 이로써 보안 분석, 리소스 변경 추적, 규정 준수 감사가 가능합니다.

하이브리드 배포

AWS Outposts에서 Amazon ECS를 사용하여 온프레미스 시스템에 대한 매우 짧은 지연 시간을 필요로 하는 컨테이너식 애플리케이션을 실행할 수 있습니다. AWS Outposts는 AWS 인프라, AWS 서비스, API 및 도구를 거의 모든 연결된 사이트로 확장하는 완전관리형 서비스입니다. Outposts에서 ECS를 사용하여 클라우드의 컨테이너를 관리한 것처럼 쉽게 온프레미스의 컨테이너를 관리할 수 있습니다.

Amazon ECS 요금 알아보기

요금 페이지로 이동하기
시작할 준비가 되셨습니까?
가입하기
추가 질문이 있으십니까?
AWS에 문의