Amazon Web Services 한국 블로그
AWS에서 어떤 컨테이너 서비스를 이용해야 하나요?
“AWS에서 어떤 컨테이너 서비스를 이용해야 하나요?”는 여러분들에게 가장 많이 받는 질문 중 하나입니다. AWS는 다양한 고객의 요구를 충족하고자, 광범위하고도 폭넓은 서비스를 제공하다 보니 규모와 요구 사항에 따라 다양한 컨테이너 기반 개발 방법을 제공합니다. 외부 AWS 전문가는 17가지의 AWW 컨테이너 옵션 혹은 서비스 판단 방법을 알려주시기도 했구요.
AWS에서 컨테이너를 운영하는 기본적인 방법은 Amazon EC2를 이용하여 직접 가상 서버를 띄우고, 거기에 Docker 컨테이너를 배포하는 방식일 것입니다. 하지만, 개인의 간단한 테스트나 학습에는 도움이 되지만, 프로덕션 서비스를 운영하기 위해서는 좀 더 관리하기 쉬운 컨테이너 솔루션이 필요합니다.
이 글에서는 애플리케이션 요구 사항 또는 운영 설정에 가장 잘 맞는 AWS 컨테이너 솔루션을 선택하는 몇 가지 기준과 그에 해당하는 서비스를 소개해 드리겠습니다.
1. 규모에 따른 컨테이너 관리 서비스
처음 부터 큰 규모의 컨테이너 서비스를 이용할 필요는 없습니다. 회사 크기가관리할 인원에 따라, 다양한 컨테이너 관리 서비스를 이용하실 수 있습니다.
소규모
작은 규모의 다양한 컨테이너는 하나의 컨테이너 호스트에 넣어도 되며, 여러 컨테이너를 실행할 수 있습니다. 개인 테스트나 간단한 웹 사이트, 그리고 단일화된 컨테이너라면 아래 솔루션을 사용할 수 있습니다. 규모가 커짐에 따라 추가 컨테이너를 실행하기 위해 더 많은 컴퓨팅 노드가 필요하더라도, 일정 규모까지는 지원 가능합니다.
- Amazon Lightsail은 웹 애플리케이션을 배포하는 데 필요한 모든 항목을 제공하는 사용하기 쉬운 클라우드 서비스로 제공합니다. 개인 및 소규모 회사나 낮은 트래픽을 가진 다수의 독립 웹 사이트를 제공해야 하는 대기업에 적합합니다. Lightsail Container 기능은 소규모 컴퓨팅 노드에 예측 가능한 비용에 따라 사용 가능한 옵션입니다. 기존에 Lightsail 고객에게 추천합니다.
- AWS Elastic Beanstalk는 AWS에 익숙하지 않은 분들을 위해 주요 AWS 서비스를 결합하여 빠르게 구성한 후, Go, Java, .NET, Node.js, PHP, Python 및 Ruby 등의 웹 애플리케이션을 바로 배포할 수 있는 서비스입니다. Elastic Beanstalk 역시 Docker 컨테이너 기반 웹 애플리케이션 배포를 지원합니다. 인프라 관리에 대한 걱정 없이 단일 Docker 컨테이너를 다루는데 적합합니다. 멀티컨테이너 Docker는 Amazon Elastic Container Service (Amazon ECS)를 사용해서 배포할 수 있으나, 컨테이너 종류가 많아지면 Amazon ECS 같은 오케스트레이션 도구를 직접 사용하시길 권장합니다.
대규모
컨테이너 컴퓨팅 노드의 수가 더 많이 증가하고 다양한 종류의 애플리케이션을 컨테이너로 배포하고 싶다면, 좀 더 똑똑한 컨테이너 관리 도구가 필요합니다. 컨테이너 관리 도구를 직접 개발하는 것은 매우 어려운 일이기 때문에, AWS에서는 아래와 같은 완전 관리형 컨테이너 오케스트레이션 서비스를 제공하고 있습니다.
- Amazon ECS는 2015년에 출시된 가장 오래된 클라우드 기반 컨테이너 오케스트레이션 도구중에 하나입니다. Amazon ECS의 가장 큰 장점은 단순함입니다. 기존의 AWS 서비스를 잘 결합해서 컨테이너 배포에 맞도록 서비스를 만들었기 때문에 손쉽게 배포 및 운영이 가능합니다.예를 들어, Amazon ECS에서 기계 학습 도구를 쓰고 싶다면 Amazon SageMaker를 쉽게 연동 가능하며 배치 작업을 위해서는 AWS Batch 등과도 쉽게 연동 가능합니다. 여러분이 컨테이너 구축 및 배포에 대한 경험이 없으시다면, Amazon ECS로 시작하기를 권장합니다.
- Amazon Elastic Kubernetes Service (Amazon EKS)는 오픈 소스인 Kubernetes 기반 애플리케이션을 AWS에서 운영하는데 도움을 주는 서비스입니다. Amazon EKS는 업스트림 Kubernetes를 실행하며 완전관리형 EKS 클러스터를 실행할 수 있습니다. 여러분의 팀이 오픈 소스 생태계에서 나오는 도구에 익숙하고, 이를 잘 결합해서 운영할 노하우가 있다면 Amazon EKS를 추천합니다.
- Amazon Elastic Container Registry (Amazon ECR)는 어디서나 애플리케이션 이미지 및 아티팩트를 안정적으로 배포할 수 있도록 뛰어난 성능 호스팅을 제공하는 완전관리형 컨테이너 레지스트리입니다. Amazon ECS 또는 EKS와 함께 사용하여 애플리케이션용 컨테이너 이미지를 쉽게 저장 및 실행할 수 있습니다. Amazon ECS 또는 Amazon EKS의 태스크 또는 팟 정의에서 Amazon ECR 리포지토리를 지정하기만 하면 애플리케이션에 적합한 이미지를 검색할 수 있습니다.
2. 컨테이너의 실행 방식 및 위치
앞에서 규모에 따른 컨테이너의 관리 도구에 대해 설명을 해 드렸는데, 이것이 실행되는 위치는 여전히 컴퓨팅 노드입니다. AWS에서는 컨테이너가 실행되는 다양한 컴퓨팅 옵션을 제공합니다. 작업에 적합한 도구를 선택하여 비용, 성능 및 기능을 적절하게 조합할 수 있습니다.
서버리스
- AWS App Runner — 개발자가 사전 인프라 경험 없이도 컨테이너화된 웹 애플리케이션 및 API 서비스를 대규모로 빠르게 배포할 수 있도록 지원하는 완전관리형 서비스입니다. App Runner는 웹 애플리케이션을 자동으로 구축 및 배포하고 암호화를 통해 트래픽의 로드 밸런싱을 수행합니다. 기존에 Lightsail 혹은 Elastic Beanstalk에서 컨테이너를 수행하셨다면, 애플리케이션에만 집중하기 위해 서버리스 옵션으로 선택 가능합니다.
- AWS Fargate — Amazon ECS 및 EKS 서비스를 쓰시는 고객이 컨테이너 배포 및 운영은 AWS에 맡기고, 실행하는 데 필요한 리소스에 대해서만 비용을 지불하는 서버리스 엔진입니다. 노드 기반 클러스터를 만들고 관리할 필요가 없어 애플리케이션별로 자동으로 리소스를 지정하면 됩니다. (만약, 규정 준수 및 거버넌스 요구 사항 같은 세부적인 설정을 원한다면 을 지원하기 위해서는 Amazon ECS 및 EKS의 자체 클러스터를 구축해야 합니다.)
- AWS Lambda Container — AWS Lambda는 요청 시에만 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. 코드를 컨테이너 이미지로 만들어 업로드하면 규모와 관계 없이 요청 또는 이벤트를 기반으로 코드를 실행합니다. 기존에 Lambda 함수로 만든 서버리스 애플리케이션을 컨테이너 도구(AWS SAM 또는 Docker CLI)를 사용하여 구축, 테스트 및 배포할 수 있습니다.
가상 서버
- AWS Regions & Local Zones — 전 세계 AWS 리전 및 로컬 영역에서는 Amazon EC2를 통해 CPU 프로세서, 스토리지, 네트워킹을 포함한 가장 다양한 인스턴스 유형을 제공합니다. 기본 컴퓨팅 환경 및 호스트 운영 체제를 관리하거나 사용자 지정하려는 고객에게 이상적입니다. 40%이상의 가성비를 보이는 Arm기반의 AWS Gravition2 프로세서 역시 Amazon ECS 및 EKS에서 사용 가능합니다. (AWS Elastic Beanstalk, Amazon ECS 및 EKS 지원)
- AWS Wavelength — 5G망 같은 대기 시간이 매우 짧은 모바일 엣지 애플리케이션, 대화형 및 몰입형 경험, 자율 주행 차량 처럼 모바일 서비스는 가까운 5G망 회사에 위치한 인프라에서 컨테이너를 배포할 수 있습니다. (Amazon ECS 및 EKS 지원)
온-프레미스 위치
- AWS Outposts — 여러분의 데이터 센터 내에서 일관된 하이브리드 경험을 제공하기 위해 온프레미스에서 AWS 물리 장비를 사용하여 컨테이너를 실행할 수 있습니다. 로컬에서 대용량 데이터 처리, 기존 데이터 센터를 운영해야 하는 필요한 고객에게 적합합니다. (Amazon ECS 및 EKS 지원)
- 온-프레미스 물리 서버 — 규정 준수 및 로컬 데이터 처리 같은 이유로 기존 데이터 센터 내 장비를 그대로 활용해야 하는 경우, 기존 장비에 AWS가 제공하는 에이전트 소프트웨어를 설치하고 Amazon ECS Anywhere 및 EKS Anywhere를 통해 AWS 콘솔에서 통합적으로 클러스터로 관리할 수 있습니다.
3. 컨테이너 지원 도구
마이크로 서비스 아키텍처 지원 도구
대규모 컨테이너 서비스는 주로 마이크로서비스로 구성되어 운영합니다. 마이크로서비스로 구성하면, 작은 단위의 서비스 기능을 개별적으로 민첩하게 업데이트 가능하고, 대규모 서비스 장애를 방지하는 아키텍처를 구성할 수 있습니다.
하지만, 개발팀이 만들고 있는 수 십개에서 수 백개에 달하는 마이크로 서비스에서 계속 바뀌는 인프라 리소스와 지속적 통합/지속적 배포(CI/CD)가 끊임 없이 이루어 질때 이를 관리하기란 굉장히 어렵습니다. 아래 AWS 서비스들은 복잡한 컨테이너 기반 배포가 이루어지는 회사에서 선택할 수 있는 배포 및 운영 도구입니다.
- AWS Proton은 컨테이너 및 서버리스 애플리케이션을 위한 완전 관리형 배포 서비스입니다. 한 개의 플랫폼 엔지니어링 팀 (혹은 데브옵스팀)이 AWS Proton을 사용하여 인프라 프로비저닝, 코드 배포, 모니터링, 업데이트에 필요한 템플릿을 만들면, 개발팀들이 이 중에 적합한 도구를 선택해서 사용하여 배포할 수 있습니다. 플랫폼팀과 개발팀의 역할을 정확하게 나누어 복잡성을 관리하고 일관적으로 표준을 적용할 수 있습니다. 개발팀은 템플릿으로 간단하게 배포 가능합니다. Proton은 Fargate 및 Lambda 같은 서버리스 컨테이너 방식을 템플릿화 해서 제공 가능하므로, 개발팀이 인프라에 대해 고민없이 바로 마이크로서비스 배포를 손쉽게 할 수 있습니다.
- AWS App Mesh는 애플리케이션 수준의 네트워킹을 통해 서비스에서 여러 유형의 컴퓨팅 인프라와 원활하게 통신할 수 있도록 하는 서비스 메시 (Service Mesh) 서비스입니다. 오픈 소스 Envoy 프록시를 사용하여, 마이크로 서비스 간 통신 가시성 및 트래픽 제어, 모니터링이 가능합니다. 특히, 서비스 간에 트래픽이 라우팅되는 방식을 변경하기 위해 애플리케이션 코드를 업데이트할 필요가 없습니다. App Mesh는 Amazon ECS 및 EKS를 지원하여 대규모 컨테이너 기반 마이크로서비스를 만드는 고객들이 서비스메시를 구성하여 서비스간 트래픽을 관리하는데 유리합니다.
- AWS Cloud Map은 클라우드 리소스 검색 서비스입니다. Cloud Map을 사용하면 애플리케이션 리소스의 사용자 지정 이름을 정의할 수 있으며 동적으로 변화하는 이러한 리소스의 업데이트된 위치를 유지 관리합니다. Amazon ECS 및 EKS는 Cloud Map과 긴밀하게 통합되어 있습니다. ECS의 경우, 마이크로 서비스를 생성하고, ECS 서비스 검색을 활성화하면 확장 시 모든 작업 인스턴스가 자동으로 AWS Cloud Map에 등록되고 축소 시에는 모두 등록 해제됩니다. EKS에서 실행 중인 서비스는 Kubernates 외부 DNS를 통해 AWS Cloud Map에 자동으로 게시할 수 있습니다.
오픈 소스 지원 도구
- AWS Copilot은 AWS에서 컨테이너화된 애플리케이션을 빠르게 시작하고 쉽게 관리할 수 있도록 하는 오픈 소스 명령줄 인터페이스(CLI)입니다. Copilot은 컨테이너 레지스트리로 푸시, 작업 정의 생성 및 클러스터 생성을 포함하여 배포 수명 주기의 각 단계를 자동화합니다.
- AWS App2Container (A2C)는 Java 및 .NET 웹 애플리케이션을 컨테이너 형식으로 마이그레이션하고 현대화하는 오픈 소스 도구입니다. 컨테이너화하려는 애플리케이션을 선택하기만 하면, A2C가 애플리케이션 아티팩트와 종속성을 컨테이너 이미지로 패키징하고 네트워크 포트를 구성하며 필요한 Amazon ECS 및 Amazon EKS 배포 아티팩트를 생성합니다.
- Amazon EKS Distro는 Amazon EKS에서 사용 하는 것과 동일한 오픈 소스 Kubernetes 및 종속성의 배포판입니다. EKS Distro에는 호환성 테스트를 마친 오픈 소스 Kubernetes 바이너리 및 컨테이너, etcd(클러스터 구성 데이터베이스), 네트워킹 및 스토리지 플러그인이 포함됩니다. EKS Distro는 커뮤니티 지원이 만료된 후 이전 버전의 빌드를 최신의 중요한 보안 패치로 업데이트하여 Kubernetes 버전에 대한 지원을 계속합니다.
- Red Hat OpenShift Service on AWS (ROSA)는 OpenShift를 사용하는 통합 환경을 제공합니다. OpenShift를 사용해본 경험이 경우 익숙한 OpenShift API 및 AWS의 배포 도구를 활용하여 애플리케이션 개발 프로세스를 가속화할 수 있습니다. ROSA를 사용하면 다양한 AWS 컴퓨팅, 데이터베이스, 분석, 기계 학습, 네트워킹, 모바일 및 기타 서비스를 사용하여 안전하고 확장 가능한 애플리케이션을 더 빠르게 구축할 수 있습니다.
마무리
지금까지 규모에 따른 컨테이너 관리 서비스, 컨테이너의 실행 위치 및 방식 및 지원 도구 등을 살펴 보았습니다. AWS에서 컨테이너 서비스를 선택하는 것은 하나로 딱 정해져 있지 않습니다. 여러분의 애플리케이션의 요구 사항, 트래픽 규모, 회사 크기, 그리고 데브옵스 팀 및 개발팀의 역할 분담에 따라 다양하게 선택하고, 서비스 규모나 조직이 변화함에 따라 바꿔 나갈 수 있습니다.
-
소규모: Amazon Lightsail → AWS ElasticBeanstalk
(서버리스): AWS Lambda Container → AWS AppRunner -
대규모: Amazon ECS → Amazon EKS
(서버리스): AWS Fargate (ECS →EKS)
AWS에서는 고객들의 다양한 상황에 맞추어 컨테이너 기반 서비스를 선택하는 자유를 제공하고 있습니다. AWS에서 컨테이너 이동성은 여러분이 결정하는 것이 무엇이든 일방 통행이 아니며, 언제든지 손쉽게 변화가 가능합니다.
좀 더 자세한 사항은 아래 동영상을 참고하시면 좋습니다.
- AWS에서 시작하는 Container 생활
- 사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까?
- AWS Fargate를 사용한 서버리스 컨테이너 활용하기
- 가시성 향상을 위한 컨테이너 로깅 / 분석 최적화
아래는 AWS에서 컨테이너 실습을 할 수 있는 가이드 입니다.
- Amazon Lightsail에서 컨테이너를 손쉽게 실행하는 방법
- AWS ElasticBeanstalk에서 Docker 컨테이너 배포 방법
- AWS Lambda에서 컨테이너 이미지 배포하기
- AWS App Runner로 웹 애플리케이션 배포하기
- Amazon ECS로 웹 애플리케이션 구축하기 | Amazon ECS 워크샵 (영문)
- Amazon ECS 기반 AI 앱(DemoGo) 배포하기
- Amazon EKS로 웹 애플리케이션 구축하기 | Amazon EKS 워크샵 (영문)
- AWS CDK로 EKS 클러스터 풀스택 관리하기
- AWS App2Container 앱 현대화 이용하기
- AWS Copilot Workshop (영문)
- AWS AppMesh 워크샵 (영문)
- 기타 영문 워크샵 목록…
컨테이너 기반 워크로드에 대한 아키텍처에 대한 기술적인 질문이 있으시면, 담당 AWS 어카운트 매니저에게 문의하시거나 직접 연락주시면 담당자를 연결 시켜 드립니다.
– Channy(윤석찬)