AWS Lambda 개념 정리

AWS Lambda 개념 정리

Tags
AWS
Published
February 2, 2025
Author
Seongbin Kim
작성 중
작성 중
 
출처:
 

1. 개념

  • AWS Lambda는 서버리스 컴퓨팅에 속하는 AWS의 비공개 기술입니다.
  • 서버리스 컴퓨팅은 수요에 대응되는 컴퓨팅 자원을 개발자의 작업 없이 알아서 제공합니다.
  • AWS Lambda는 AWS 상에서 인프라 구성 없이도 자동으로 확장, 축소되는 인프라를 활용하기 위해 사용합니다.
 

2. 동작

  • Lambda는 함수 한 개 단위로 등록, 실행되며 이를 Lambda Function이라고 합니다.
    • 개발자가 handler 코드를 작성해 Lambda에 등록한 것이 Lambda Function입니다.
    • handler는 event를 입력 받으며, event는 JSON 타입으로 전달됩니다.
      • export const handler = async (event, context) => { // some business logic const response = { statusCode: 200, body: JSON.stringify(/* ... */), }; return response; };
      notion image
      notion image
      notion image
  • Lambda Function을 실행하려면 타 AWS 서비스에서 이벤트를 발행해야 합니다.
    • (ex) API Gateway에서 HTTP Request 전달
    • 각 람다 별 HTTP URL을 생성해서 인터넷에서 직접 호출할 수도 있습니다.
  • Lambda Function을 실행할 때 필요한 실행 환경은 실행 환경(Execution Environment)라고 합니다.
    • 실행 환경은 Lambda Function 호출 시 생성되며, 핸들러 종료 시 제거됩니다.
    • 실행 환경은 일정 기간 동안 실행 환경이 제거되지 않을 수 있으며, 이 경우 재호출 시 재사용합니다.
    • 실행 환경을 생성하는 시간이 실행 시간에 영향을 미치므로, 최소한의 코드만으로 Lambda Function을 구성하는 게 좋습니다.
  • Lambda Function 호출 시 재사용할 수 있는 실행 환경이 없으면 새로 생성하며, 이를 동시성(Concurrency)라고 합니다.
    • 계정마다 동시성에 한도가 있으며 이는 AWS 문의를 통해 조절할 수 있습니다.
    • (ex) 깡통 계정의 서울 리전 동시성 한도는 400.
      • notion image
  • Lambda Function 호출 전에도 미리 실행 환경을 띄워놓을 수 있으며 이를 Provisioned Concurrency라고 합니다.
    • 다만 EC2와 같이 계속 띄워놓는 방식으로 비용이 비쌉니다.
  • Lambda Function은 사양에 따라 응답 속도의 편차가 큽니다.
    • Main Memory에 비례해 vCPU의 스펙이 결정되기 때문입니다.
      • 512MB = 0.5 vCPU
      • 1,769MB = 1 vCPU
    • Main memory에 거의 비례하는 속도 개선을 확인할 수 있습니다. (128MB vs 1024MB - 8배 차이)
    • Main Memory = 1GB일 때의 응답 시간. 1s에서 180ms 정도로 줄었습니다.
      Main Memory = 1GB일 때의 응답 시간. 1s에서 180ms 정도로 줄었습니다.
      AWS Lambda Monitor 탭에서 제공하는 그래프. Duration(실행 시간)이 최소 1s ~ 1.69s인 것에서 130ms대로 떨어진 모습
      AWS Lambda Monitor 탭에서 제공하는 그래프. Duration(실행 시간)이 최소 1s ~ 1.69s인 것에서 130ms대로 떨어진 모습
       
    • 따라서 성능 요건을 만족하는 최소 사양을 확인하고 선택해야 합니다.
 

3. 비용

출처:
  • 요금 = 컴퓨팅 시간 + 실행 횟수 + 프로비저닝된 동시성 요금 + (기타 요금)
    • 컴퓨팅 시간 = GB-s 단위(인스턴스 사양 * 실행 시간)
    • 프로비저닝된 동시성 요금 = (컴퓨팅 시간 비용의 약 1/3 정도)
    • (기타 요금은 비중이 크지 않아서 생략)
      • 임시 스토리지 요금
      • SnapStart 요금
      • 데이터 전송 요금
      • Lambda@Edge 요금
  • 프리 티어 (언제나 무료)
    • 400,000 Gb-s
      • (ex) 1GB * 200ms 이면 400,000 * 1,000 / 200 = 2백만 초 = 555Hr 정도 (약 23일 정도)
    • 1,000,000만 회 호출
 
 

4. 제약

출처:
  • 실행 환경 인프라를 제어할 수 없습니다.
  • 한 번에 15분까지만 실행 가능합니다.
    • (ex) 실행에 20분이 걸리는 SQL은 실행 불가
    • 단, 작업을 15분 이내의 작업으로 나눌 수 있는 경우 AWS Step Function을 활용해 실행할 수 있습니다.
  • request/response payload 크기에 제한이 있습니다.
    • (sync) request, response 각각 6MB 제한 (streaming 시 20MB)
    • (async) 256KB
  • 속도 제한이 있습니다.
    • streaming response 시 6MB 이후부터 2Mbps 상한 적용
  • 네트워크 연결이 제한됩니다.
    • Inbound 연결이 차단됩니다.
    • Outbound 전용 TCP, UDP 소켓으로만 통신이 가능합니다.
  • 소스 코드 용량 제한이 있습니다.
    • ZIP 파일 방식 = 압축 전 50MB, 압축 후 250MB
    • 컨테이너 이미지 방식 = 10GB
  • 실행 환경 용량 제한이 있습니다.
    • /tmp 폴더만 제공
    • 10GB (512MB까지 무료)
 

5. 적합한 경우 (vs EC2)

서버리스 특성
적합한 서비스 특성
적합한 예시 시나리오
응답의 크기, 길이 등이 작음
HTTP API 서버로 운영할 때
-
무상태임
HTTP API 서버로 운영할 때
-
자동 확장/축소됨
거의 사용량이 없다가 가끔 사용
혼자만 사용할 때, 가끔씩만 방문하는 Demo일 때
사용량이 가끔 피크
시즌성 이벤트 시
서비스 기능이 일회성 실행
프로필 이미지 리사이즈 작업
외부 Web Hook을 입력으로 어떤 작업을 할 때
동기화 작업, CI/CD 작업
실행 시간이 최대 15분 이내
작업이 15분 이내의 배치성
매일 자정에 간단한 집계 실행
인스턴스가 꺼져있을 때에도 요청이 발생할 수 있음 (a.k.a. Cold Start)
서비스 시작 시간이 짧음
NodeJS를 사용할 때
확장이 빠르지만 상한선이 있고, 단위 비용이 높음
서비스 규모가 작음
사이드 프로젝트를 운영할 때
 

6. 추가 참고 자료

  • 핵심 개념
  • 프로비저닝된 동시성
  • 사양 설정 가이드라인
  • 코드 예제