클라우드

AWS Serverless Lambda

realtrynna 2022. 10. 7. 00:23

 

Serverless Lambda

서버를 관리하지 않고 모든 유형의 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행할 수 있는 이벤트 중심의 컴퓨팅 서비스를 의미한다. 특정 이벤트 발생 시 사용자가 작성한 코드를 실행하는 함수로 이해하면 될 거 같다.

 

구성

Deployment Package 즉 배포 관련 런타임과 Lambda가 실행되는 실행 환경(컴퓨터 스펙) 2가지로 구성되어 있다.

1. Deployment Package

  • 함수의 코드와 코드를 실행하기 위한 런타임
  • 코드 용량 제한 존재 알집 파일은 50mb 압축 해제 후 250mb까지 가능
  • S3와 컨테이너 이미지 또는 Lambda Layer 등으로 배포 가능

 

2. 일반 구성

  • 다른 AWS와 연결하기 위해 IAM 존재
  • 메모리는 128~10.240mb까지 선택 가능하며 기능 하나에 최대 15분까지 실행 가능
  • 임시 저장용 디스크(tmp) 공간 사용 가능(512mb)
  • 트리거(Trigger) 방식으로 다른 서비스를 호출(API Gateway SQS S3)

 

특징

Lambda는 특정 이벤트(Trigger)가 발생되면 호출되고 다음과 같은 특징이 있다.

  • 운영체제와 런타임에 구애받지 않음
  • 다양한 프로그래밍 언어 지원
  • 함수가 실행되는 동안에만 요금을 지불(True OnDemand)
  • 서비스에 필요한 코드를 별도로 관리할 필요 없이 실행할 수 있음

 

장점 단점
비용 절감(True OnDemand) 리소스 제한(메모리와 처리 시간)
별도의 서버 관리 불필요(Auto Scaling) 무상태성(컨테이너 기반의 실행 환경)
생산성 향상(함수 코드만 작성 후 배포) Cold Start
(특정 시간 동안 요청이 없으면 파워 오프)

 

작동 원리

Lambda의 함수 이름(별도 설정 가능)은 handler라고 부르며 Lambda의 handler는 총 4단계로 구성되어 있다.

1단계 Download your code

개발자가 업로드 한 Deployment Package를 다운로드 하는 단계

 

2단계 Start new execution environment

Lambda 코드가 실행될 환경(런타임 메모리 등)을 생성하는 단계

 

3단계 Execute initialization code

handler 바깥의 전역 코드를 실행하는 단계

 

4단계 Execute handler code

handler 내부 코드(Business logic)를 실행하는 단계

 

 

다음 이미지와 같이 handler 내부의 코드를 실행시키기 위해 1~3단계(Cold start) 과정을 거친다.

 

 

Cold start

매 요청 시 Lambda 함수가 실행되기 위해 Cold start가 발생하는데 짧게는 100ms 길게는 1초 이상 소요된다. 이를 개선하기 위한 방법으로 Warm start가 있다. Cold start를 거쳐 생성된 실행 환경(Execution environment)을 일정 시간 유지하며 유지되는 시간 내에 들어온 요청은 동일한 실행 환경에서 실행되는 방식이다.

 

동시성

일정 시간 요청이 없을 경우 발생하는 Cold start의 문제를 개선하기 위해 Lambda에는 동시성 처리 방식이 존재한다.

  1. 예약된 동시성(Reserved Concurrency)
    동시에 몇 개의 요청을 처리할지 예약해두는 방식으로 요청이 없을 경우 인스턴스를 사용하지 않으며 요청이 들어오면 실행되는 방식
  2. 프로비저닝된 동시성(Provisioned Concurrency)
    동시에 몇 개의 요청을 Cold start 없이 즉시 실행할 수 있도록 설정하는 방식이며 설정한 요청 수만큼의 인스턴스를 초기화하고 대기한다. 예약된 동시성과 다르게 요청이 없더라도 요금이 발생한다.

 

hanlder

Lambda의 기본 handler 함수는 event, content 2개의 매개 변수를 받는다. event 타입을 미리 정의해두고 단위 테스트에 사용하거나 event 타입에 따른 분기 처리 또는 로깅 등에 활용될 수 있다.

exports.handler = async (event, context) => {
    // business logic here
};

 

1. event 

Lambda가 Invoke될 경우 다른 AWS의 다른 서비스에서 이벤트(데이터)를 수신 받는다. Invoke는 RequestResponse와 event 크게 2가지 방식이 있다. RequestResponse Invoke는 API Gateway를 통해 Lambda가 실행되면 동기적으로 요청에 대한 응답을 처리하는 방식이고 event Invoke는 S3를 통해 Lambda가 실행되면 비동기적으로 이벤트만 발생되고 종료되는 방식이다. event 방식으로 Invoke 되었을 경우 Lambda 함수에 리턴 값은 요청된 클라이언트에게 전달될 수 없다.

  • 어떤 서비스로부터 Invoke되었는지에 따라 event의 구조는 달라짐
  • object string number 등 일반적인 타입의 데이터도 가능하며 반드시 JSON 형식이어야 할 필요는 없음

 

RequestResponse Invoke 방식

  • S3, SNS, EventBridge, CloudWatch 등

 

Event Invoke 방식

  • Kinesis, DynamoDB, SQS, ALB, API Gateway 등

 

2. context

로깅 등의 용도로 사용할 수 있는 메타데이터가 수신된다.

  • function_name / aws_request_id / log_group_name 등

 

 

참고 자료

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html

https://blog.hoseung.me/2022-02-27-lambda-global-variables/

https://dev.classmethod.jp/articles/devio-korea-online-aws-lambda/

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/invocation-scaling.html

'클라우드' 카테고리의 다른 글

AWS IAM  (0) 2022.11.10
Serverless  (0) 2022.10.05