본문 바로가기

AWS

서버리스 serverless : AWS Lambda

728x90

서버 프로비저닝 또는 관리가 불필요한 컴퓨팅은 서버리스 컴퓨팅

 

AWS Lambda : 이벤트 중심 서버리스 컴퓨팅 서비스

- 서버를 프로비저닝하거나 관리할 필요 없이 코드 실행 가능

- 실행하려는 코드를 포함하는 AWS 리소스인 Lambda 함수를 생성한 다음 일정에 따라 또는 이벤트에 대한 응답으로 Lambda 함수가 트리거되도록 설정

- 코드는 트리거될 때만 실행됨

- 사용한 컴퓨팅 시간에 대해서만 비용을 지불함

- 코드를 실행하지 않을 때는 요금 부과X

 

장점

○ Lambda를 사용하면 새로운 언어나 도구, 프레임워크를 배울 필요가 없음

- Java, Go, PowerShell, Node.js, C#, Python, Ruby 등 여러 프로그래밍 언어 지원

○ Lambda에서 관리는 완전 자동화됨

- 가용성이 뛰어난 내결함성 인프라에서 코드를 실행할 수 있도록 모든 인프라가 관리되므로 백엔드 서비스 구축에 집중할 수 있음

○ 내결함성을 기본적으로 제공

- 각 리전에 있는 여러 가용 영역에서 컴퓨팅 파워를 유지 관리하여 개별 머신이나 데이터 센터 장애로부터 코드를 보호함

○ AWS Step Functions를 사용하여 워크플로를 구축하면 복잡하거나 장기간 실행되는 작업에 사용할 여러 Lambda 함수를 오케스트레이션 할 수 있음

- Step Functions와 Lambda를 통해 애플리케이션과 백엔드에 대해 장기간 실행되는 안정적인 프로세스 구축 가능

 Lambda에서는 처리되는 요청과 코드 실행에 필요한 컴퓨팅 시간에 대해서만 비용 지불

- 결제는 100밀리초 단위로 측정됨 -> 비용효율적인 코드 실행 가능

 

 

AWS Lambda 이벤트 소스

Lambda 함수는 이벤트 소스에 의해 트리거됨

 

이벤트 소스는 AWS Lambda 함수의 실행을 트리거하는 이벤트를 생성하는 개발자 생성 애플리케이션이나 AWS 서비스일 수 있다

S3와 CloudWatch Events와 같은 일부 서비스는 Lambda 함수를 직접 호출하여 Lambda에 이벤트 게시

다른 서비스의 경우 Lambda가 가져옴

ex. Amazon Simple Queue Service에서 레코드를 가져올 수 있음

ex. DynamoDB 데이터베이스 서비스에서 직접 이벤트를 읽을 수 있음

 

Elastic Load Balancing이나 Amazon API Gateway와 같은 일부 서비스는 Lambda함수 직접 호출 가능

API, SDK, AWS CLI를 통해 함수 호출 가능

Lambda 콘솔에서 직접 함수를 호출하거나 직접 호출도 유용할 수 있다

ex. 모바일 앱 개발 중에 앱에서 Lambda함수를 호출하려는 경우

 

Amazon CloudWatch를 사용하여 함수를 자동으로 모니터링함 -> 함수 장애를 해결하는데 도움

Lambda함수가 처리하는 모든 요청을 자동으로 기록

 

Lambda함수는 이벤트를 처리하기 위해 작성하는 사용자 지정 코드로 사용자 대신 Lambda함수를 실행함

 

 

Lambda 함수 구성 방법

AWS 콘솔을 사용해 Lambda 함수를 생성하는 경우)

1. 함수 이름 지정

2. 런타임 환경 지정

- Python이나 Node.js 환경을 런타임 환경으로 사용하기 때문에 이를 지정해야함

3. 실행 역할 : 함수에 IAM 권한을 부여하는 데 사용

4. 함수 구성

- 트리거를 추가하는 작업 포함(사용가능한 이벤트 소스 지정)

- 함수 코드 추가

- Lambda 내에서 제공되는 코드 편집기 사용 or 코드가 포함된 파일 업로드

- 함수에 할당할 메모리를 MB단위로 지정해야함(최대 3008MB)

- 필요한 경우, 제한시간, 함수를 실행할 특정 VPC, 기타 설정과 같은 환경변수 지정 가능

- 함수 코드와 종속성이 포함된 zip 아카이브인 Lambda 배포 패키지에 배치됨 -> 패키지는 콘솔에서 관리됨

 

배포 패키지를 생성해야 하거나 Lambda API를 사용하여 함수를 관리하는 경우에는 직접 관리해야함

 

 

예약 기반 Lambda 함수의 사용사례

예를 들어 EC2의 사용량을 줄여야 하는 상황이라고 가정해보자.

미리 정의된 시간에 (예를 들어 사람이 없는 야간에) 인스턴스를 중지하기로 하자.

그런 다음 작업이 시작되기 전에 아침에 인스턴스를 다시 시작하려고 한다.

 

이 상황에서 Lambda와 CloudWatch Events를 구성하여 이러한 작업을 자동으로 수행할 수 있다

 

  1. CloudWatch Events는 EC2 인스턴스를 중지하는 Lambda 함수를 실행하도록 예약된다
  2. 그 다음, Lambda 함수가 트리거되고 EC2 인스턴스를 중지할 권한이 부여된 IAM 역할을 사용하여 실행됨
  3. 마지막으로, EC2 인스턴스가 중지 상태로 전환된다
  4. 업무가 시작될 때 CloudWatch Events는 EC2 인스턴스를 시작하는 Lambda 함수가 실행되도록 예약된다
  5. 그리고, Lambda 함수가 트리거되고 실행된다.
  6. 마지막으로, EC2 인스턴스가 실행 중 상태로 전환이 된다

 

이벤트 기반 Lambda 함수 예제 : 썸네일 이미지 생성

S3 버킷에 업로드 되는 각 이미지 파일에 대한 썸네일을 생성하려고 한다

솔루션을 구축하려면 객체가 업로드될 때 S3에 액세스하고 호출을 수행하는 Lambda 함수를 생성할 수 있음

이 Lambda 함수는 소스 버킷에서 이미지 객체를 읽고 썸네일 이미지와 대상 버킷을 생성한다

 

 

AWS Lambda 제한

  • 컴퓨팅 및 스토리지 리소스 제한
  • 단일 Lambda 함수의 최대 메모리 할당량은 3008MB(변동되었을 수도 있음)
  • 한 리전의 동시 실행 수가 1000개로 제한됨
  • Lambda 함수의 제한 시간은 최대 15분까지(1초~15분 사이값으로 제한시간 설정 가능)
  • 함수 배포 패키지 크기는 250MB(라이브러리나 기타 종속성을 포함하는 zip 아카이브인 계층 포함). 계층을 사용하면 배포 패키지에 라이브러리를 포함할 필요 없이 함수에서 라이브러리 사용 가능

제한은 소프트 제한 또는 하드 제한이다. 소프트 제한은 지원 티켓을 제출하여 요청에 대한 근거를 제공하면 완화할 수 있지만 하드제한은 늘릴 수 없다

 

 

728x90

'AWS' 카테고리의 다른 글

클라우드 컴퓨팅에서의 역할  (0) 2022.08.01
AWS Elastic Beanstalk  (0) 2022.07.31
컨테이너 | 도커 | 쿠버네티스 | 가상머신  (0) 2022.07.29
Amazon EC2 요금 모델  (0) 2022.07.28
가상머신을 그냥 준다고? Amazon EC2  (0) 2022.07.27