본문 바로가기
AWS/Cloud Practitioner

[AWS]서버리스 AWS Lambda, Container, ECS, EKS, Fargate

by kiimy 2022. 4. 23.
728x90
728x90

EC2 인스턴스는 최소한의 손실로 프로비저닝해 AWS에서의 가동 및 실행할 수 있는 가상 머신입니다. EC2는 기본 웹 서버 실행에서 고성능 컴퓨팅 클러스터에 이르는 다양한 사용 사례에 적합합니다.

Amazon EC2에서 실행하려는 애플리케이션이 있는 경우 다음과 같이 해야 합니다.
1. 인스턴스(가상 서버)를 프로비저닝합니다.
2. 사용자 코드를 업로드합니다.
3. 애플리케이션이 실행되는 동안 계속해서 인스턴스를 관리합니다.

따라서 EC2는 놀라울 정도로 유연하고 안정적이며 확장 가능하지만 사용 사례에 따라 컴퓨팅 용량과 관련해 대안을 찾아야 할 수도 있습니다. EC2를 사용하면 사용자가 시간에 따라 인스턴스 플릿을 직접 설정 및 관리해야 합니다. EC2를 사용할 때는 사용자가 새 소프트웨어 패키지가 출시되면 인스턴스 패치를 책임지고, 인스턴스의 규모 조정을 설정하고, 솔루션이 가용성이 높은 방식으로 호스팅되도록 아키텍처를 설계했는지 확인해야 합니다. 온프레미스에서 호스팅할 때만큼 많은 관리가 필요하진 않지만 관리 프로세스는 여전히 필요합니다. 

 

<AWS가 제공하는 관리하기 편리한 다른 컴퓨팅 관련 서비스>

AWS는 다양한 서버리스 컴퓨팅 옵션을 제공합니다. 서버리스는 곧 애플리케이션을 호스팅하는 기본 인프라나 인스턴스를 보거나 이용할 수 없다는 뜻입니다. 대신 프로비저닝, 규모 조정, 고가용성 및 유지 관리와 관련한 모든 기본 환경 관리를 대신 처리해 줍니다.

서버리스란?

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

서버리스 컴퓨팅의 또 다른 이점은 서버리스 애플리케이션을 자동으로 확장할 수 있는 유연성입니다. 서버리스 컴퓨팅은 처리량 및 메모리와 같은 소비 단위를 수정하여 애플리케이션의 용량을 조정할 수 있습니다. 

 

AWS Lambda

Lambda는 사용자가 코드를 Lambda 함수라는 곳에 업로드하게 하는 서비스입니다. 트리거를 구성하면 Lambda 함수에서 서비스가 트리거를 기다립니다. 트리거가 감지되면 코드는 관리형 환경에서 자동으로 실행됩니다. 자동으로 규모가 조절되고 가용성이 높으며 환경 내 모든 유지관리를 AWS가 수행하기 때문에 사용자가 걱정할 거리가 별로 없는 환경이죠. 수신 트리거가 하나만 있든 1,000개가 있든 Lambda는 수요에 맞게 함수의 규모를 조정합니다. Lambda는 코드를 15분 미만으로 실행하도록 설계되었으며 따라서 딥 러닝 같은 장기 실행 프로세스에는 적합하지 않습니다.

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

<예시>

S3에 이미지 업로드시 해당 이미지를 '리사이징' 하는 코드를 넣어두면 항상 서버를 운영하면서 그 서버를 리사이징할 필요 없이 실제 이미지가 스토리지(S3)에 업로드 되었을 때만 컴퓨팅 자원이 실행되서 리사이징됨 ==> 비용절감

AWS 컨테이너 서비스

- 아직 서버리스를 이용할 준비가 되지 않았거나 기본 환경에 액세스해야 하지만 여전히 효율성과 휴대성을 원할때

- 컨테이너 오케스트레이션 도구(= Docker 컨테이너)

Docker란?

플랫폼으로 운영 체제 수준 가상화를 사용하여 컨테이너에 소프트웨어를 제공합니다. 컨테이너는 애플리케이션과 관련 종속성 및 애플리케이션에서 실행해야 하는 모든 구성을 모아 놓은 코드 패키지입니다.

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

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

이러한 작업을 수행하는 프로세스를 컨테이너 오케스트레이션이라고 하는데 직접하기에는 정말 어려운 작업입니다. 오케스트레이션 도구는 컨테이너 관리를 지원할 목적으로 제작되었습니다.( =Amazon ECS와 Amazon EKS는 모두 EC2에서 실행할 수 있습니다.)

Amazon Elastic Container Service, ECS

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

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

Amazon Elastic Kubernetes Service, EKS

- AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 완전 관리형 서비스

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

 

AWS Fargate

 

- 기본 OS에 액세스할 필요가 없거나 EC2 인스턴스를 관리할 필요가 없기 때문에 EC2를 사용하여 컨테이너를 호스팅하지 않을 경우

- Fargate는 ECS 또는 EKS용 서버리스 컴퓨팅 플랫폼입니다.

- 컨테이너를 서버리스 컴퓨팅 플랫폼에서 실행할 수 있습니다 AWS Lambda를 사용하면 코드를 업로드하고 트리거를 기반으로 실행되도록 구성할 수 있습니다. 

- 컨테이너를 실행하는 데 필요한 리소스에 대해서만 비용을 지불하면 됩니다.

- 컨테이너와 가상 머신이 없습니다. 코드 및 구성만 존재

 

<정리>

기존 방식의 애플리케이션을 호스팅하려 하며 Linux나 Windows 같은 기본 운영 체제에 대한 완전한 액세스를 원한다면 EC2를 사용해야 합니다.

 

단기 실행 함수나 서비스 지향 또는 이벤트 기반 애플리케이션을 호스팅하고 싶으며 기본 환경을 전혀 관리하고 싶지 않다면 서버리스 AWS Lambda를 사용해야 합니다.

 

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

2. Amazon ECS나 Amazon EKS 중 무엇을 사용하고 싶나요?  플랫폼을 선택해야 합니다.

3. 컨테이너를 자신이 관리하는 EC2 인스턴스에서 실행하고 싶나요? 아니면 사용자 대신 관리해 주는 AWS Fargate 같은 서버리스 환경에서 실행하고 싶나요? 

728x90

댓글