Post

AWS Lambda 정리

AWS Lambda 정리

서버리스

서버리스란 서버를 관리해도 되지 않는다는 뜻이다. 없다는 뜻이 아닌, 우리는 서버를 관리하지 않고 단지 코드(함수)만 제대로 작성하면 된다. 원래 서버리스는 FaaS(Funtion as a Service)를 의미했지만 지금은 더 포괄적인 의미를 가진다고 한다. 아래는 AWS 서버리스 서비스 목록이며, 오늘은 Lambda를 자세히 알아본다.

💡 AWS 서버리스 서비스

  • AWS Lambda

  • DynamoDB

  • AWS Cognito

  • AWS API Gateway

  • Amazon S3

  • AWS SNS & SQS

  • AWS Kinesis Data Firehose

  • Aurora Serverless

  • Step Functions

  • Fargate

1
2
3
4
5
6
7
8
9
10
- AWS Lambda
- DynamoDB
- AWS Cognito
- AWS API Gateway
- Amazon S3
- AWS SNS & SQS
- AWS Kinesis Data Firehose
- Aurora Serverless
- Step Functions
- Fargate

Lambda

AWS의 서버리스 서비스 중 하나로 이벤트 핸들러 방식의 서버리스이다. 우리는 람다를 이용하면 코드만 작성하면 된다. 람다는 CloudWatch를 통해 로그와 지표를 확인할 수 잇다. 또한, 메모리 용량을 높이면 CPU 성능과 네트워크 성능이 올라간다.

람다는 단순한 컨테이너 이미지가 아닌 람다 API를 만족하는 컨테이너 이미지여야 한다. 일반 이미지는 ECS or Fargate에서 실행한다.

** 람다는 이벤트기반으로 호출되기에 별도의 캐싱이 불가능하다.

과금

여기에서 자세한 내용을 살펴볼 수 있다. 기본적으로 과금은 요청횟수와, 람다함수 실행시간을 기준으로 과금한다.

기본적으로 1,000,000개의 요청은 무료이고, 이후부터 100만 개의 요청당 0.2달러의 요금을 부과한다.

초기 400,000GB/s는 무료이며, 600,00GB/s에 대해 1달러의 요금을 부과한다.

여기서 GB는 메모리용량을 의미한다. 즉 메모리 1GB로 동작하는 람다 함수에 대해 400,000초까지는 무료이며 이후 600,000초가 경과했을 때마다 1달러를 부과한다.

내가 실제로 10월부터 썼던 람다함수는 메모리사이즈가 256MB, 100ms로 아직 과금되지도 않았다.

Untitled.png

Limit

  • 실행
    • 메모리: 128MB ~ 10GB
    • 최대실행시간: 900초(15분)
    • 환경 변수: 4KB
    • 컨테이너 디스크 용량(/tmp): 512MB ~ 10GB
    • 최대 동시에 실행할 수 있는 람다 함수의 수: 1000개
  • 배포
    • 람다 함수 배포 사이즈(압축): 50MB
    • 람다 함수 배포 사이즈(코드 + 의존성): 250MB
      • 만약 용량을 넘기면 /tmp를 로드 디렉터리로 사용할 수 있음
    • 최대 환경 변수 4KB

단점

위에서 람다의 특징과 장점을 위주로 알아봤다. 이론상으로 개발자는 인프라를 신경 쓰지 않고 코드만 작성하면 된다. 하지만 아래와 같은 단점도 있다.

  1. 리소스 제한: 최대 실행시간, 환경변수 용량 등의 제한이 있다.
  2. Stateless: 람다는 함수가 호출되면, 새로운 컨테이너를 띄우는 방식이다. 별도의 상태를 저장하지 않는다.
  3. Cold Start: 람다는 리소스를 효율적으로 사용하기 위해 오랫동안 사용하지 않을 경우 컴퓨팅파워를 잠시 꺼둔다. 즉, 요청한 기간이 길어지면 추가적인 딜레이가 걸린다.
  4. 동시성 제한: 동시에 실행할 수 있는 람다함수의 개수를 최대 1,000개로 제한된다.

물론, 여러 방법을 사용하여 위의 단점을 상쇄할 수 있다. 예를 들어 3번과 같은 경우 람다를 주기적으로 호출하거나 메모리 스펙을 올려 성능을 업그레이드하는 방식으로 해결할 수 있다.

AWS SAM

실제 람다를 사용할 때는 AWS SAM을 이용하면 매우 편리하다. AWS SAM은 Serverless Application Model으로 AWS 환경에서 제공하는 서버리스용 오픈소스 프레임워크이다. 기본적으로 CloudFormation이 확장된 형태이다. SAM 탬플릿이 배포 당시 CloudFormation 탬플릿으로 변환된다.

AWS SAM을 사용하면 아래의 애플리케이션을 구축할 때, 아주 편리하게 이용할 수 있다. SAM 명령어를 통해 Docker기반으로 로컬에서도 테스트가 가능하며, 테스트 후 sam deploy 명령어를 통해 쉽게 배포할 수 있다.

  • 가능한 서비스 목록
    • Lambda
    • API 게이트웨이
    • DynamoDB

AWS SAM 프로젝트는 GitHub에서 확인할 수 있다. 애플리케이션의 주요 설정을 template.yaml에서 관리하며 해당 yaml 파일을 통해 서비스 옵션을 설정할 수 있다.

아래는 블로그와 노션을 연동하는 용도로 제작한 Lambda + API Gateway에 대한 설정이다.

Untitled.png

This post is licensed under CC BY 4.0 by the author.