메뉴

이 페이지에는 기계 번역이 사용되었습니다. 일부 콘텐츠는 완벽하지 않을 수 있습니다.

피드백 공유

AWS ECS 심층 분석: 아키텍처 및 배포 옵션

목차

이 페이지 공유하기

Yifat Perry
Yifat Perry

AWS ECS란 무엇입니까?

Amazon Elastic Container Service(ECS)는 클라우드 기반의 완전 관리형 컨테이너 오케스트레이션 서비스입니다. 인프라를 구성하고 유지 관리할 필요 없이 클라우드에서 애플리케이션을 실행할 수 있습니다.

용량 수요를 최적으로 충족하고 최고 성능을 유지하기 위해 메모리 및 CPU 프로세스를 지속적으로 평가하고 모니터링하도록 ECS를 설정할 수 있습니다. 이 데이터는 각 컨테이너에 대한 최적의 배포 전략을 결정하는 데 도움이 될 수 있습니다. 또한 ECS를 활용하여 컨테이너를 확장하고 필요에 따라 업데이트를 릴리스할 수 있습니다.

ECS는 Identity and Access Management(AWS IAM) 역할, Elastic Block Store(AWS EBS) 볼륨 및 AWS Elastic Load Balancing(AWS ELB)을 비롯한 여러 유용한 AWS 서비스 및 기능과의 통합을 지원합니다.

이 글은 Kubernetes on AWS에 대한 기사 시리즈의 일부입니다.

이 문서에서는 다음 내용을 학습합니다:

ECS의 이점 및 사용 사례

ECS를 사용하면 다양한 사용 사례에 컨테이너를 쉽게 활용할 수 있습니다. ECS를 활용하여 간단한 웹사이트를 호스팅할 수 있을 뿐만 아니라 분산형 마이크로서비스 아키텍처를 관리할 수 있습니다. ECS는 컨테이너 관리를 간소화하지만, 전체 프로세스를 자동화하지는 않습니다. 여전히 프로세스를 미세 조정하고 사용자 지정할 수 있습니다.

다음은 Amazon ECS의 몇 가지 주요 이점입니다.

  • 간편하고 쉬운 배포—ECS는 이러한 작업을 책임짐으로써 Kubernetes 클러스터 인프라를 설정하고 유지 관리할 필요가 없도록 합니다.
  • 예약 기능—서비스, 애플리케이션 및 배치 프로세스를 예약할 수 있습니다.
  • 관리형 가용성—ECS는 애플리케이션 가용성을 유지 관리할 책임이 있으며 필요에 따라 확장 또는 축소하여 용량 수요를 충족할 수 있도록 지원합니다.
  • 네이티브 통합 — AWS ELB, Amazon Virtual Private Cloud(Amazon VPC), IAM, AWS EBS 등 다양한 기능과 함께 제공됩니다.
  • 기존 도구와의 통합—ECS는 CI/CD 파이프라인 및 기존 도구와 통합할 수 있는 간단한 API를 제공합니다.

가이드에서 자세히 알아보기: AWS ECS vs. KubernetesAWS ECS vs. EKS

Amazon ECS 아키텍처

아래 그림은 AWS Fargate에서 실행되는 컨테이너가 있는 Amazon ECS를 보여줍니다. 다음 섹션에서는 표시된 주요 구성 요소에 대해 설명합니다.

Amazon ECS architecture with VPC, container registry, Fargate tasks, and elastic network interfaces across availability zones.출처: AWS

컨테이너 및 이미지

Amazon ECS에 애플리케이션을 배포하려면 컨테이너에서 실행할 애플리케이션 구성 요소를 설계해야 합니다. 컨테이너는 이미지라는 읽기 전용 템플릿에서 만들어집니다.

이미지는 일반적으로 Dockerfile에서 생성됩니다. Dockerfile은 컨테이너 내에서 실행해야 하는 모든 구성 요소를 명시하는 일반 텍스트 파일입니다. 빌드된 후, 이러한 이미지들은 컨테이너 레지스트리에 저장되며 클러스터에서 다운로드 및 실행될 수 있습니다.

AWS ECS 작업 정의

Amazon ECS에서 애플리케이션을 실행하려면 작업 정의를 생성해야 합니다. 작업 정의는 애플리케이션을 구성하는 하나 이상의 컨테이너(최대 10개)를 설명하는 텍스트 파일(JSON 형식)입니다.

작업 정의는 컨테이너화된 애플리케이션에 대한 다양한 매개변수를 지정할 수 있습니다. 예를 들어, 이러한 매개변수를 사용하여 실행할 컨테이너, 열어야 할 포트, 사용해야 할 데이터 볼륨, 적용할 Docker 네트워킹 모드, 그리고 신원 및 접근 관리(IAM) 역할을 지정할 수 있습니다.

명령줄 Docker 명령어로 실행할 수 있는 거의 모든 작업은 ECS 작업 정의를 사용하여 정의할 수 있습니다. 공식 문서에서 모든 작업 정의 매개변수를 확인하십시오.

AWS ECS 작업 및 스케줄링

작업은 클러스터에서 실행 중인 작업 정의의 인스턴스입니다. Amazon ECS에서 애플리케이션에 대한 작업 정의를 생성한 후, 클러스터에서 실행할 작업 수를 지정할 수 있습니다.

Amazon ECS 작업 스케줄러는 클러스터에 작업을 배치하는 역할을 담당합니다. 두 가지 주요 스케줄러 전략이 있습니다:

  • REPLICA 전략은 클러스터에 원하는 수의 작업을 배치하고, 이 작업 수를 유지하며, 일부 작업이 실패할 경우 이를 복원합니다.
  • DAEMON 전략은 관련 기준을 충족하는 각 활성 컨테이너 인스턴스에 하나의 작업을 배치합니다.

Amazon ECS architecture showing service definition and Fargate tasks with elastic network interfaces.출처: AWS

AWS ECS 클러스터

Amazon ECS 클러스터는 각각 하나 이상의 작업으로 구성된 서비스의 논리적 그룹입니다. Amazon ECS를 처음 사용할 때 기본 클러스터가 생성됩니다. 계정에 추가 클러스터를 생성하여 서로 다른 워크로드나 프로젝트에 대한 리소스 격리를 달성할 수 있습니다.

클러스터 리소스를 실행하는 방법에는 두 가지가 있습니다—EC2 인스턴스에서 실행하거나 Amazon Fargate를 통해 실행하는 것입니다. 각 옵션의 작동 방식에 대한 자세한 내용은 다음 섹션을 참조하십시오.

컨테이너 에이전트

컨테이너 에이전트는 Amazon ECS 클러스터의 각 컨테이너 인스턴스에서 실행됩니다. 에이전트는 현재 실행 중인 작업 및 리소스 활용률에 대한 정보를 Amazon ECS로 전송합니다. Amazon ECS는 에이전트를 사용하여 필요에 따라 작업을 시작 및 중지할 수 있습니다.

Amazon ECS workflow diagram illustrating container registry integration and task scheduling.출처: AWS

AWS ECS 배포 옵션: EC2 vs Fargate

ECS는 Elastic Compute Cloud(EC2) 인스턴스를 사용하여 컨테이너를 실행할 수 있습니다. EC2 인스턴스는 Amazon EC2 서비스의 일부로 배포되며, 정의된 ECS 클러스터에 '등록'됩니다. 이는 EC2가 해당 인스턴스를 사용하여 컨테이너를 배포할 수 있음을 의미합니다. 기존 VPC 내에서 ECS 클러스터를 실행할 수 있으며, 이를 통해 해당 VPC에서 실행 중인 기존 AWS 리소스에 접근할 수 있습니다.

ECS 컨테이너를 배포하는 또 다른 방법은 Amazon Fargate를 이용하는 것입니다. Fargate는 EC2 인스턴스의 프로비저닝, 구성 및 관리에 대한 책임을 제거하여 AWS가 EC2 인스턴스를 대신 관리할 수 있도록 합니다.

Fargate를 사용하면 서버를 관리할 필요가 없지만, 작업 정의가 상태 비저장(stateless)이어야 합니다. 현재 작업에 정의된 컨테이너에는 스토리지 볼륨(예: Elastic Block Storage 볼륨)을 연결할 수 없습니다.

이는 Fargate를 영구 스토리지와 함께 사용할 경우 S3 또는 관계형 데이터 서비스(RDS)와 같은 외부 스토리지 서비스를 사용해야 함을 의미합니다.

다음과 같은 경우 ECS를 EC2와 함께 사용합니다.

  • 전체 인프라가 AWS에서 실행됩니다.
  • 이미 VPC와 서브넷을 정의했습니다.
  • EC2 인스턴스 프로비저닝 및 관리를 위한 기존 프로세스가 있습니다.
  • 애플리케이션은 직접 연결된 영구 스토리지가 필요합니다.

다음과 같은 경우 ECS Fargate를 사용합니다.

  • 기존 VPC가 없습니다.
  • 일부 리소스는 Amazon에서 실행 중이고 일부는 다른 클라우드 환경에서 실행 중입니다.
  • 애플리케이션은 상태 비저장이거나 직접 연결된 스토리지 볼륨이 필요하지 않습니다.

AWS ECS Q&A

Amazon ECS는 AWS Elastic Beanstalk와 어떻게 다릅니까?

EC2는 컨테이너 관리를 간소화하는 기능을 제공하며, 동시에 프로세스를 계속해서 미세 조정할 수 있도록 지원합니다. 반면 AWS Elastic Beanstalk는 인프라를 자동으로 관리합니다. 코드를 집중적으로 다루어야 할 경우에 Beanstalk를 사용할 수 있습니다.

AWS Elastic Beanstalk는 애플리케이션 및 서비스를 쉽게 배포하고 확장할 수 있도록 도와주는 클라우드 기반 서비스입니다. Beanstalk는 ELB, EC2, Auto Scaling, RDS, Auto Scaling과 같은 서비스를 자동으로 관리하고 애플리케이션을 배포하며 애플리케이션의 상태를 모니터링합니다.

Beanstalk를 사용할 때는 서비스가 배포할 컨테이너 이미지를 지정해야 하며, 메모리 및 CPU 요구 사항, 컨테이너 링크, 포트 매핑도 함께 설정해야 합니다. 이 정보를 정의하면 Beanstalk이 모든 관리를 자동으로 처리하기 시작합니다. ECS 클러스터를 프로비저닝하고, 자동 확장 및 모니터링을 관리하며, 로드 밸런싱을 수행하고, 클러스터에 컨테이너를 배포합니다.

Amazon ECS는 AWS Lambda와 어떻게 다릅니까?

Amazon ECS는 컨테이너 및 클러스터 관리를 간소화하는 기능을 제공하지만, 해당 프로세스를 완전히 자동화하지는 않습니다. 프로비저닝 프로세스의 작동 방식을 이해하고 리소스를 지속적으로 구성하고 확장해야 합니다. EC2는 서버를 노출하고 환경을 확장하고 최적화하는 데 필요한 정보를 제공합니다.

AWS Lambda를 사용하면 컴퓨팅 인프라를 자동화하는 이벤트 기반 작업을 코딩할 수 있습니다. Lambda를 사용하면 이벤트를 트리거하는 코드를 작성하는 것 외에는 사용자의 개입이 필요하지 않거나 허용되지 않는 서버리스 인프라를 정의할 수 있습니다. Lambda를 사용하면 데이터 변경이나 웹사이트 클릭과 같은 이벤트를 구성하고 해당 이벤트에 대한 반응을 정의할 수 있습니다.

Cloud Volumes ONTAP으로 컨테이너 스토리지 최적화

NetApp Cloud Volumes ONTAP은 업계 최고의 엔터프라이즈급 스토리지 관리 솔루션으로, AWS, Azure, Google Cloud에서 안전하고 검증된 스토리지 관리 서비스를 제공합니다. Cloud Volumes ONTAP은 최대 368TB 용량을 지원하며, 고가용성, 데이터 보호, 스토리지 효율성, Kubernetes 통합 등 강력한 기능 세트를 바탕으로 파일 서비스, 데이터베이스, DevOps 또는 기타 기업 워크로드와 같은 다양한 사용 사례를 지원합니다.

특히, Cloud Volumes ONTAP은 컨테이너화된 워크로드의 영구 볼륨 프로비저닝 및 관리 요구사항을 지원합니다.

Cloud Volumes ONTAP 사례 연구를 통해 이러한 KubernetesWorkloads에서 컨테이너화된 애플리케이션의 문제를 해결하는 데 Cloud Volumes ONTAP이 어떤 도움이 되는지 자세히 알아보십시오.

Drift chat loading