✔️ AWS의 컨테이너 사용/배포 서비스
AWS 서비스는 유사한 기능의 다양한 서비스를 제공해 사용자는 자신에게 적합한 서비스를 선택할 수 있다.
그래서 AWS 서비스의 특징을 잘 알아야 비용 절감과 동시에 가장 적합한 솔루션을 찾아 사용할 수 있다.
자 이제, AWS의 컨테이너 관리서비스에 대해 알아보자 !
✔️ 규모에 따른 컨테이너 관리 서비스
작은 규모의 다양한 컨테이너는 하나의 컨테이너 호스트에 넣어도 되며, 여러 컨테이너를 실행할 수 있다.
개인 테스트나 간단한 웹 사이트, 단일화된 컨테이너라면 다음의 서비스를 사용할 수 있다.
Amazon Lightsail containers
Amazon Lightsail은 웹 애플리케이션을 배포하는 데 필요한 모든 항목을 제공하는 사용하기 쉬운 클라우드 서비스로 제공한다.
개인 및 소규모 회사나 낮은 트래픽을 가진 다수의 독립 웹 사이트를 제공해야 하는 대기업에 적합하다.
Lightsail Container 기능은 소규모 컴퓨팅 노드에 예측 가능한 비용에 따라 사용 가능한 옵션이다.
기존 Lightsail 고객에게 추천한다.
AWS Elastic Beanstalk
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
Amazon ECS는 2015년에 출시된 가장 오래된 클라우드 기반 컨테이너 오케스트레이션 도구중에 하나이다.
Amazon ECS의 가장 큰 장점은 단순함이다.
기존의 AWS 서비스를 잘 결합해서 컨테이너 배포에 맞도록 서비스를 만들었기 때문에 손쉽게 배포 및 운영이 가능하다.
예를 들어, Amazon ECS에서 기계 학습 도구를 쓰고 싶다면 Amazon SageMaker를 쉽게 연동 가능하며 배치 작업을 위해서는 AWS Batch 등과도 쉽게 연동 가능합니다. 여러분이 컨테이너 구축 및 배포에 대한 경험이 없다면, Amazon ECS로 시작하기를 권장한다.
Amazon EKS
Amazon Elastic Kubernetes Service (Amazon EKS)는 오픈 소스인 Kubernetes 기반 애플리케이션을 AWS에서 운영하는데 도움을 주는 서비스이다. Amazon EKS는 업스트림 Kubernetes를 실행하며 완전관리형 EKS 클러스터를 실행할 수 있다. 팀이 오픈 소스 생태계에서 나오는 도구에 익숙하고, 이를 잘 결합해서 운영할 노하우가 있다면 Amazon EKS를 추천한다.
이제 AWS의 컨테이너 실행 방식 및 위치에 대해 알아보자 !
✔️ 컨테이너 실행 방식 및 위치
컨테이너 관리 도구 역시 실행되는 위치는 컴퓨팅 노드이다.
AWS에서는 컨테이너가 실행되는 다양한 컴퓨팅 옵션을 제공한다.
작업에 적합한 도구를 선택해 비용, 성능 및 기능을 적절하게 조합할 수 있다.
컴퓨팅 서버
AWS Regions & Local Zones
전 세계 AWS 리전 및 로컬 영역에서는 Amazon EC2를 통해 CPU 프로세서, 스토리지, 네트워킹을 포함한 가장 다양한 인스턴스 유형을 제공한다. 기본 컴퓨팅 환경 및 호스트 운영체제를 관리하거나 사용자를 지정하려는 고객에게 이상적이다. 40% 이상의 가성비를 보이는 Arm 기반의 AWS Gravition2 프로세서 역시 Amazon ECS 및 EKS에서 사용 가능하다. (AWS Elastic Beantalk, Amazon ECS 및 EKS 지원)
AWS Wavelength
5G망 같은 대기 시간이 매우 짧은 모바일 엣지 애플리케이션, 대화형 및 몰입형 경험, 자율 주행 차량 처럼 모바일 서비스는 가까운 5G망 회사에 위치한 인프라에서 컨테이너를 배포할 수 있다. (Amazon ECS 및 EKS 지원)
AWS Outposts
데이터 센터 내에서 일관된 하이브리드 경험을 제공하기 위해 온프레미스에서 AWS 물리 장비를 사용하여 컨테이너를 실행할 수 있다. 로컬에서 대용량 데이터 처리, 기존 데이터 센터를 운영해야 하는 필요한 고객에게 적합하다. (Amazon ECS 및 EKS 지원)
온-프레미스 물리 서버
규정 준수 및 로컬 데이터 처리 같은 이유로 기존 데이터 센터 내 장비를 그대로 활용해야 하는 경우, 기존 장비에 AWS가 제공하는 에이전트 소프트웨어를 설치하고 Amazon ECS Anywhere 및 EKS Anywhere를 통해 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)를 사용하여 구축, 테스트 및 배포할 수 있다.
✔️ 마이크로서비스 아키텍처 지원 도구
대규모 컨테이너 서비스는 주로 마이크로서비스로 구성되어 운영한다.
마이크로서비스로 구성하면, 작은 단위의 서비스 기능을 개별적으로 민첩하게 업데이트 가능하고, 대규모 서비스 장애를 방지하는 아키텍처를 구성할 수 있기 때문이다.
하지만, 개발팀이 만들고 있는 수 십개에서 수 백개에 달하는 마이크로 서비스에서 계속 바뀌는 인프라 리소스와 지속적 통합/지속적 배포(CI/CD)가 끊임 없이 이루어 질때 이를 관리하기란 굉장히 어렵다.
아래 AWS 서비스들은 복잡한 컨테이너 기반 배포가 이루어지는 회사에서 선택할 수 있는 배포 및 운영 도구이다.
AWS Proton
AWS Proton은 컨테이너 및 서버리스 애플리케이션을 위한 완전 관리형 배포 서비스이다.
한 개의 플랫폼 엔지니어링 팀 (혹은 데브옵스팀)이 AWS Proton을 사용하여 인프라 프로비저닝, 코드 배포, 모니터링, 업데이트에 필요한 템플릿을 만들면, 개발팀들이 이 중에 적합한 도구를 선택해서 사용하여 배포할 수 있다.
플랫폼팀과 개발팀의 역할을 정확하게 나누어 복잡성을 관리하고 일관적으로 표준을 적용할 수 있다.
개발팀은 템플릿으로 간단하게 배포 가능하다.
Proton은 Fargate 및 Lambda 같은 서버리스 컨테이너 방식을 템플릿화 해서 제공 가능하므로, 개발팀이 인프라에 대해 고민없이 바로 마이크로서비스 배포를 손쉽게 할 수 있다.
AWS App Mesh
AWS App Mesh는 애플리케이션 수준의 네트워킹을 통해 서비스에서 여러 유형의 컴퓨팅 인프라와 원활하게 통신할 수 있도록 하는 서비스 메시 (Service Mesh) 서비스이다. 오픈 소스 Envoy 프록시를 사용하여, 마이크로 서비스 간 통신 가시성 및 트래픽 제어, 모니터링이 가능하다. 특히, 서비스 간에 트래픽이 라우팅되는 방식을 변경하기 위해 애플리케이션 코드를 업데이트할 필요가 없다.
App Mesh는 Amazon ECS 및 EKS를 지원하여 대규모 컨테이너 기반 마이크로서비스를 만드는 고객들이 서비스메시를 구성하여 서비스간 트래픽을 관리하는데 유리하다.
AWS Cloud Map
AWS Cloud Map은 클라우드 리소스 검색 서비스이다. Cloud Map을 사용하면 애플리케이션 리소스의 사용자 지정 이름을 정의할 수 있으며 동적으로 변화하는 이러한 리소스의 업데이트된 위치를 유지 관리한다.
Amazon ECS 및 EKS는 Cloud Map과 긴밀하게 통합되어 있다.
ECS의 경우, 마이크로 서비스를 생성하고, ECS 서비스 검색을 활성화하면 확장 시 모든 작업 인스턴스가 자동으로 AWS Cloud Map에 등록되고 축소 시에는 모두 등록 해제된다. EKS에서 실행 중인 서비스는 Kubernates 외부 DNS를 통해 AWS Cloud Map에 자동으로 게시할 수 있다.
다음은 AWS 공식 문서에서 제공하는 몇가지 서비스 선택 가이드 라인이다.
컨테이너 이미지 저장, 암호화 및 관리 | Amazon ECR | ECR은 컨테이너 이미지를 압축하고 암호화하여 어디서든 빠르게 시작하고 사용할 수 있게 한다. |
컨테이너화된 애플리케이션 실행 또는 마이크로서비스 구축 | Amazon ECS | Amazon Elastic Container Service(Amazon ECS)는 완전관리형 컨테이너 오케스트레이션 서비스로, 컨테이너화된 애플리케이션을 실행하는 가장 안전하고 신뢰성과 확장성이 뛰어난 솔루션을 제공한다. |
Kubernetes로 컨테이너 관리 | Amazon EKS | Amazon Elastic Kubernetes Service(Amazon EKS)는 완전관리형 Kubernetes 서비스로, Kubernetes를 사용하여 컨테이너화된 애플리케이션을 실행하는 가장 안전하고 신뢰성과 확장성이 뛰어난 솔루션을 제공한다. |
서버를 관리하지 않고 컨테이너를 실행 | AWS Fargate | AWS Fargate는 컨테이너에 적합한 서버리스 컴퓨팅 엔진으로, Amazon Elastic Container Service(ECS) 및 Amazon Elastic Kubernetes Service(EKS)와 연동된다. Fargate에서는 서버를 프로비저닝하고 관리할 필요가 없으므로, 애플리케이션별로 리소스를 지정하고 관련 비용을 지불할 수 있으며, 애플리케이션을 격리하도록 설계되었기 때문에 보안 성능을 향상시킬 수 있다. |
서버 수준 제어를 통해 컨테이너 실행 | Amazon EC2 | EC2 가상 머신을 사용하면 서버 클러스터를 제어하고 다양한 사용자 지정 옵션을 적용할 수 있다. |
조금 더 간단하게 정리해보면,
1. 서버 관리 여부
• 컨테이너용 서버리스 컴퓨팅의 경우 → AWS Fargate를 선택
• 컴퓨팅 환경의 설치, 구성 및 관리를 제어해야 하는 경우 → Amazon Elastic Compute Cloud(Amazon EC2)를 선택
2. 사용할 컨테이너 오케스트레이터
• Amazon ECS는 나머지 AWS 플랫폼 기능과 긴밀하게 통합되고 AWS에 의해 완전히 제어되므로 출시되는 모든 기능이 ECS와 긴밀하게 작동하도록 보장할 수 있다.
• Amazon EKS는 관리형 Kubernetes 서비스이다. EKS는 Kubernetes 업스트림에서 실행되며 Kubernetes 인증 준수업체이므로 커뮤니티에서 제공하는 오픈 소스 툴링의 모든 이점을 활용할 수 있다.
코드를 리팩터링할 필요 없이 표준 Kubernetes 응용 프로그램을 EKS로 마이그레이션할 수 있다.
컨테이너 이미지 라이브러리의 이름은 Amazon ECR(Amazon Elastic Container Registry)이다.
AWS App Mesh는 애플리케이션 수준의 네트워킹을 제공한다.
Amazon EC2, Amazon ECS, AWS Fargate 및 Amazon EKS와 같은 여러 유형의 컴퓨팅 인프라 간에 통신할 수 있는 유일한 서비스 메시이다.
AWS는 가장 다양한 컨테이너 오케스트레이터를 제공하므로 도구 또는 API 선택에 관계없이 AWS에서 컨테이너를 실행할 수 있다.
'Public Cloud > AWS' 카테고리의 다른 글
[AWS] Ubuntu Crontab 설정을 통한 S3 버킷 자동 백업 설정하기 (s3cmd 패키지) (0) | 2022.03.30 |
---|---|
[AWS] AWS CLI를 이용한 S3 버킷 다루기 (0) | 2022.03.29 |
AWS EKS로 웹 앱을 배포해보자 ! - 2. Application 배포하기 (0) | 2022.03.16 |
AWS EKS로 웹 앱을 배포해보자 ! - 1. EKS 구성하기 (0) | 2022.03.16 |
AWS EKS로 웹 앱을 배포해보자 ! - 0. 초기 설정 (0) | 2022.03.16 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!