본문 바로가기
AWS

[AWS] 어떤 컨테이너 서비스를 이용해야 하나요?

by yonikim 2021. 7. 30.
728x90

AWS 에서는 다양한 컨테이너 기반의 개발 방법을 제공하고 있다. AWS 에서 컨테이너를 운영하는 기본적인 방법은 EC2 를 이용하여 가상 서버를 직접 띄우고, 거기에 Docker 컨테이너를 배포하는 방식일 것이다. 하지만 이는 개인의 간단한 테스트나 학습에는 도움되지만, 프로덕션 서비스를 운영하기 위해서는 좀더 관리하기 쉬운 컨테이너 솔루션이 필요하다. 

 

 

1. 규모에 따른 컨테이너 관리 서비스

작은 규모의 다양한 컨테이너는 하나의 컨테이너 호스트에 모두 넣어 관리하거나 여러 컨테이너를 실행하여 관리할 수 있다. 개인 테스트나 간단한 웹사이트, 그리고 단일화된 컨테이너라면 아래 솔루션을 사용할 수 있다. 규모가 커짐에 따라 추가 컨테이너를 실행하기 위해 더 많은 컴퓨팅 노드가 필요하게 되겠지만, 일정 규모까지는 지원 가능하다.

 

Lightsail

웹 애플리케이션을 배포하는데 필요한 모든 항목을 사용하기 쉬운 클라우드 서비스로 제공한다. 개인 및 소규모 회사나 낮은 트래픽을 가진 다수의 독립 웹사이트를 제공해야 하는 대기업에 적합하다.

 

Elastic Beanstalk

AWS에 익숙하지 않은 사람들을 위한 서비스로, 주요 AWS 서비스를 결합하여 빠르게 구성한 후 GO, Java, .NET, Node.js, PHP, Python 및 Ruby 등으로 만든 웹 애플리케이션을 바로 배포할 수 있다. Elastic Beanstalk 역시  Docker 컨테이너 기반 웹 애플리케이션 배포를 지원한다. 인프라 관리에 대한 걱정 없이 단일 Docker 컨테이너를 다루는데 적합하다. 

 

 

컨테이너 컴퓨팅 노드의 수가 많아지고 다양한 종류의 애플리케이션을 컨테이너로 배포하고 싶다면, 오케스트레이션 서비스를 이용하는게 좋다.

 

Elastic Container Service(ECS)

ECS 의 가장 큰 단점은 단순함이다. 기존의 AWS 서비스를 잘 결합해서 컨테이너 배포에 맞도록 서비스를 만들었기 때문에 손쉽게 배포 및 운영이 가능하다. 예를 들어, 머신러닝 도구를 쓰고 싶다면 Amazon SageMaker 와 쉽게 연동 가능하고, 배치 작업을 위해서는 AWS Batch 와 쉽게 연동 가능하다. 

 

Elastic Kubernetes Service(EKS)

EKS 는 오픈소스인 Kubernetes 기반 애플리케이션을 AWS에서 운영하는데 도움을 주는 서비스이다.

 

 

2. 컨테이너의 실행 위치 및 방식

AWS 에서는 컨테이너가 실행되는 다양한 컴퓨팅 옵션을 제공한다. 작업에 적합한 도구를 선택하여 비용, 성능 및 기능을 적절하게 조합할 수 있다.

 

컴퓨팅 서버

  • AWS Regions & Local Zones - 전세계 AWS 리전 및 로컬 영역에서는 EC2 를 통해 CPU 프로세서, 스토리지, 네트워킹을 포함한 가장 다양한 인스턴스 유형을 제공한다. 기본 컴퓨팅 환경 및 호스트 운영체제를 관리하거나 사용자를 지정하려는 고객에게 이상적이다. 
  • AWS Wavelength - 5G망 같이 대기시간이 매우 짧은 모바일 엣지 애플리케이션, 대화형 및 몰입형 경험, 자율 주행 차량 처럼 모바일 서비스는 가까운 5G망 회사에 위치한 인프라에서 컨테이너를 배포할 수 있다.
  • AWS Outposts - 데이터 센터 내에서 일관된 하이브리드 경험을 제공하기 위해 온프레미스에서 AWS 물리 장비를 사용하여 컨테이너를 실행할 수 있다. 로컬에서 대용량 데이터 처리, 기존 데이터센터를 운영해야 할 때 적합하다.
  • 온-프레미스 물리 서버 - 규정 준수 및 로컬 데이터 처리 같은 이유로 기존 데이터센터 내 장비를 그대로 활용해야 하는 경우, 기존 장비에 AWS가 제공하는 에이전트 소프트웨어를 설치하고 ECS Anywhere 및 EKS Anywhere 를 통해 AWS 콘솔에서 통합적으로 클러스터로 관리할 수 있다.

 

서버리스

  • AWS App Runner - 개발자가 사전 인프라 경험 없이도 컨테이너화된 웹 애플리케이션 및 API 서비스를 대규모로 빠르게 배포할 수 있도록 지원하는 완전관리형 서비스이다. App Runner 는 웹 애플리케이션을 자동으로 구축 및 배포하고 암호화를 통해 트래픽의 로드밸런싱을 수행한다. 기존에 Lightsail 혹은 Elastic Beanstalk 에서 컨테이너를 수행했다면, 애플리케이션에만 집중하기 위해 서버리스 옵션으로 선택 가능하다.
  • AWS Fargate - ECS 및 EKS 서비스를 사용하는 경우, 컨테이너 배포 및 운영은 AWS에 맡기고 실행하는데 필요한 리소스에 대해서만 비용을 지불하는 서버리스 엔진이다. 노드 기반 클러스터를 만들고 관리할 필요가 없어 애플리케이션 별로 자동으로 리소스를 지정하면 된다. (만약 규정 및 거버넌스 요구사항 같은 세부적인 설정을 원한다면 ECS 및 EKS 와 같은 자체 클러스터를 구축해야 한다.)
  • AWS Lambda Container - Lambda 는 요청시에만 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스이다. 코드를 컨테이너 이미지로 만들어 업로드하면 규모와 관계없이 요청 또는 이벤트를 기반으로 코드를 실행한다. 기존에 Lambda 함수로 만든 서버리스 애플리케이션을 컨테이너 도구(AWS SAM 또는 Docker CLI) 를 이용하여 구축, 테스트 및 배포할 수 있다.

 

 

3. 마이크로서비스 아키텍처 지원 도구

대규모 컨테이너 서비스를 주로 마이크로서비스로 구성하여 운영한다. 마이크로서비스로 구성하면 작은 단위의 서비스 기능을 개별적으로 민첩하게 업데이트할 수 있게 되고, 대규모 서비스 장애를 방지하는 아키텍처를 구성할 수 있다.

하지만 개발팀이 만들고 있는 수십개에서 수백개에 달하는 마이크로서비스에서 계속 바뀌는 인프라 리소스와 지속적 통합/지속적 배포(CI/CD)가 끊임없이 이뤄질때 이를 관리하기란 굉장히 어렵다. 

 

AWS Proton

컨테이너 및 서버리스 애플리케이션을 위한 완전관리형 배포 서비스이다. 한개의 플랫폼 엔지니어링팀(혹은 DevOps팀)이 AWS Proton 을 사용하여 인프라 프로비저닝, 코드 배포, 모니터링, 업데이트에 필요한 템플릿을 만들면, 개발팀이 이 중에 적합한 도구를 선택해서 배포할 수 있다. 플랫폼팀과 개발팀의 역할을 정확하게 나눠서 복잡성을 관리하고 표준사항을 일관적으로 적용할 수 있다.

Proton 은 Fargate 및 Lambda 같은 서버리스 컨테이너 방식을 템플릿화 해서 제공 가능하므로, 개발팀은 인프라에 대한 고민없이 템플릿으로 간단하게 배포 가능하다.

 

AWS App Mesh

애플리케이션 수준의 네트워킹을 통해 서비스에서 여러 유형의 컴퓨팅 인프라와 원활하게 통신할 수 있도록 하는 Service Mesh 서비스이다. 오픈 소스 Envoy 프록시를 사용하여 마이크로서비스 간 통신 가시성 및 트래픽 제어, 모니터링이 가능하다. 특히 서비스 간에 트래픽이 라우팅되는 방식을 변경하기 위해 애플리케이션 코드를 수정할 필요가 없다. App Mesh 는 ECS 및 EKS 를 지원하여 대규모 컨테이너 기반 마이크로서비스를 만드는 고객들이 Service Mesh 를 구성하여 서비스간 트래픽을 관리하는데 유리하다. 

 

AWS Cloud Map 

클라우드 리소스 검색 서비스이다. Cloud Map 을 사용하면 애플리케이션 리소스의 사용자 지정 이름을 정의할 수 있으며 동적으로 변화하는 이러한 리소스의 업데이트된 위치를 유지 관리한다. ECS 및 EKS 는 Cloud Map 과 긴밀하게 통합되어 있다. ECS 의 경우 마이크로서비스를 생성하고 ECS 서비스 검색을 활성화하면 확장시 모든 작업 인스턴스가 자동으로 AWS Cloud Map 에 등록되고 축소시에는 모두 등록 해제된다. EKS 에서 실행 중인 서비스는 Kubernetes 외부 DNS 를 통해 AWS Cloud Map 에 자동으로 게시할 수 있다.

 

 

(출처: https://aws.amazon.com/ko/blogs/korea/how-to-choose-aws-container-services/)

728x90