다양한 컴퓨팅 서비스

2021. 8. 17. 14:42카공리스트/AWS Cloud Practitioner Essentials

본 글의 내용은 AWS Cloud Practitioner Essentials (Korean)에서 발췌함  

 

EC2 인스턴스는 최소한의 손실로 프로비저닝해 AWS에서의 가동 및 실행할 수 있는 가상머신이다.

EC2는 기본 웹 서버 실행에서 고성능 컴퓨팅 클러스터에 이르는 다양한 사용 사례에 적합하다.

 

 

프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.

(출처: https://ko.wikipedia.org/wiki/프로비저닝)

 

 

EC2가 유연하고 안정적이며 확장 가능하지만, 사용 사례에 따라 컴퓨팅 용량과 관련해 대안이 필요할 수 있다.

 

EC2를 사용하면 사용자가 시간에 따라 인스턴스 플릿을 직접 설정하고 관리해야 한다.

 

EC2를 사용할 때는 새로운 소프트웨어 패키지를 출시하면, 사용자는 인스턴스 패치, 인스턴스 규모 조정, 솔루션이 가용성이 높은 방식으로 호스팅되도록 아키텍처를 설계했는지 확인하는 작업에 신경써야 한다. 

 

물론 온프레미스에서 호스팅할 때만큰 많은 관리가 필요하진 않지만 관리 프로세스는 여전히 필요하다.

 

 

서버리스 컴퓨팅

 

Amazon EC2에서 실행하려는 애플리케이션이 있는 경우 다음과 같은 과정을 수행한다.

 

1. 인스턴스(가상 서버)를 프로비저닝한다.

 

2. 사용자 코드를 업로드한다.

 

3. 애플리케이션이 실행되는 동안 계속해서 인스턴스를 관리한다.

 

 

서버리스라는 용어는 코드가 서버에서 실행되지만 이러한 서버를 프로비저닝하거나 관리할 필요가 없다는 뜻이다.서버리스 컴퓨팅을 사용하면 서버를 유지 관리하는 대신 새로운 제품과 기능에만 더 집중할 수 있다.

 

서버리스 컴퓨팅의 또 다른 장점은 서버리스 애플리케이션을 자동으로 확장할 수 있는 유연성이다.

서버리스 컴퓨팅은 처리량 및 메모리와 같은 소비 단위를 수정하며 애플리케이션 용량을 조정할 수 있다.

 

서버리스 컴퓨팅용 AWS 서비스는 AWS Lambda가 있다.

 

 

AWS Lambda

 

AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있는 서비스다.

 

AWS Lambda를 사용하는 경우 사용한 컴퓨팅 시간에 대해서만 비용이 발생한다.

코드를 실행하는 동안에만 요금이 부과된다.

사실상 모든 유형의 애플리케이션 or 백엔드 서비스 코드를 실행할 수 있으며 이를 관리할 필요가 전혀 없다.

 

Lambda는 코드를 15분 미만으로 실행하도록 설계되어 딥러닝 같은 장기 실행 프로세스에 적합하지 않다.

웹 벡엔드, 요청 처리나 백엔드 비용 보고 처리 서비스처럼 각 초대를 완료하는데 15분이 걸리지 않는 빠른 처리에 적합하다.

 

 

AWS Lambda 작동 방식

 

1. 코드를 Lambda에 업로드한다.

 

2. AWS 서비스, 모바일 애플리케이션 or HTTP 엔드포인트와 같은 이벤트 소스에서 트리거되도록 코드를 설정한다.

 

3. Lambda는 트리거된 경우에만 코드를 실행한다.

 

4. 사용한 컴퓨팅 시간에 대한 요금만 지불한다. 

   (ex) Lambda 함수로 업로드되는 이미지의 크기를 AWS 클라우드에 맞춰 자동으로 조정하는 함수가 있다고 가정.

         새 이미지를 업로드할 때 사용한 컴퓨팅 시간에 대해서만 비용 지불.

         이미지를 업로드하면 Lambda가 트리거되어 이미지 크기 조정 기능을 위한 코드 실행.

 

 

 

아직 서버리스를 이용할 준비가 되지 않았거나 기본 환경에 액세스해야 하지만 여전히 효율성과 휴대성을 원한다면 Amazon Elastic Container Service나 Amazon Elastic Kubernetes Service를 고려해야 한다.

 

두 서비스 모두 컨테이너 오케스트레이션 도구이고 여기서 컨테이너는 Docker 컨테이너다.

 

컨테이너

 

AWS에서는 컨테이너식 애플리케이션을 빌드하고 실행할 수 있다.

컨테이너는 애플리케이션의 코드와 종속성을 하나의 객체로 패키징하는 표준 방식을 제공한다.

보안성, 안정성, 확장성 요구 사항이 매우 중요한 프로세스 및 워크플로에도 컨테이너를 사용한다.

 

 

여러 컨테이너가 있는 단일 호스트 (Docker)

 

회사의 애플리케이션 개발자의 컴퓨터 환경이 IT 운영 직원이 사용하는 컴퓨터의 환경과 다르다고 가정해보자.

 

개발자는 애플리케이션 환경이 배포와 상관없이 일관되게 유지되기를 원한다.

따라서 컨테이너식 접근 방식을 사용한다.

 

이를 통해 애플리케이션을 디버깅하고 컴퓨팅 환경의 차이를 진단하는데 드는 시간을 줄일 수 있다.

 

 

이러한 컨테이너는 EC2 인스턴스에서 실행되며 가상 머신 작동 방식과 비슷하게 서로 격리되어 실행된다.

하지만 이 경우 호스트는 EC2 인스턴스이다.

 

AWS에서 Docker 컨테이너를 사용할 때는 단일 EC2 인스턴스뿐만 아니라 클러스터라고 하는 인스턴스 모음에서 실행되는 컨테이너도 시작, 중지, 재시작, 모니터링하는 프로세스가 필요하다.

 

 

 

수백 개의 컨테이너가 있는 수십 개의 호스트를 생각해보자.

 

컨테이너식 애플리케이션을 실행할 때는 확장성을 고려하는 것이 중요하다.

컨테이너와 호스트의 규모가 커질수록 메모리 사용량, 보안, 로깅 등을 모니터링하는데 시간이 엄청나게 소요될 것이다.

 

이러한 작업을 수행하는 프로세스를 컨테이너 오케스트레이션이라고 하는데 직접하기에는 어려운 작업이다.

오케스트레이션 도구는 컨테이너 관리를 지원할 목적으로 제작되었다.

 

ECS는 자체 컨테이너 오케스트레이션 소프트웨어를 관리하는 번거로움 없이 컨테이너화된 애플리케이션을 대규모로 실행하는 데 도움이 되도록 설계되었다.

 

EKS는 비슷한 작업을 수행하지만 다른 도구와 다른 기능을 사용한다. 

 

 

Amazon Elastic Container Service (Amazon ECS)

 

Amazon ECS는 AWS에서 컨테이너식 애플리케이션을 실행하고 확장할 수 있는 확장성이 뛰어난 고성능 컨테이너 관리 시스템이다.

 

ECS는 Docker 컨테이너를 지원한다.

Docker는 애플리케이션을 신속하게 구축, 테스트, 배포할 수 있는 소프트웨어 플랫폼이다.

 

AWS는 오픈소스 Docker Community Edition 및 구독 시반 Docker Enterprise Edition 모두 지원한다.

ECS에서는 API 호출을 사용하여 Docker 지원 애플리케이션을 시작 및 중지할 수 있다.

 

 

Amazon Elastic Kubernetes Service (Amazon EKS)

 

EKS는 AWS에서 Kubernetes를 실행하는데 사용할 수 잇는 완전 관리형 서비스다.

Kubernetes는 컨테이너식 애플리케이션을 대규모로 배포, 관리하는데 사용할 수 있는 오픈 소스 소프트웨어다.

 

AWS는 Kubernetes 커뮤니티와 적극적으로 협력한다.

Kubernetes 애플리케이션의 새로운 기능이 릴리즈되면 EKS로 관리되는 애플리케이션에 이러한 업데이트를 손쉽게 적용할 수 있다.

 

 

AWS Fargate

 

ECS와 EKS는 모두 EC2에서 실행할 수 있다.

 

하지만 기본 OS에 액세스할  필요가 없거나 EC2 인스턴스를 관리할 필요가 없기 때문에 EC2를 사용하여 컨테이너를 호스팅하지 않을 경우 AWS Fargate라는 컴퓨팅 플랫폼을 사용한다.

 

AWS Fargate는 컨테이너용 서버리스 컴퓨팅 엔진으로, ECS와 EKS에서 작동한다.

(ECS, EKS용 서버리스 컴퓨팅 플랫폼)

 

AWS Fargate를 사용하는 경우 서버를 프로비저닝하거나 관리할 필요가 없다.

AWS Fargate는 자동으로 서버 인프라를 관리한다.

 

애플리케이션 혁신과 개발에 더 집중할 수 있으며, 컨테이너를 실행하는데 필요한 리소스에 대해서만 비용을 지불하면 된다.

 

 

요약 정리

 

1. EC2를 사용하는 경우:

   

   기존 방식의 애플리케이션을 호스팅하려고 하며 Linux나 Windows 같은 기본 운영 체제에 대한 완전한 액세스를 원할 경우 

 

 

2. 서버리스 AWS Lambda를 사용하는 경우:

   

   단기 실행 함수나 서비스 지향 또는 이벤트 기반 애플리케이션을 호스팅하고 싶으며 기본 환경을 전혀 관리하고 싶지 않은 경우

 

 

3. ECS나 EKS를 사용하는 경우 (+ AWS Fargat ):

 

   AWS에서 Docker 기반 워크로드를 실행하고 싶다면 먼저 오케스트레이션 도구를 선택해야 한다.

   필요에 따라 ECS와 EKS를 선택하면 된다.

 

   도구를 선택한 후에는 플랫폼을 선택해야 한다.

   컨테이너를 자신이 관리하는 EC2 인스턴스에서 실행할지,

   사용자 대신 관리해주는 AWS Fargate 같은 서버리스 환경에서 실행하고 싶은지 결정해야 한다.