프로덕션 환경을 위한 AWS Lambda 구성

AWS에서 애플리케이션 배포하기

Dunieski Otano

Amazon Web Services Solutions Architect

테스트에서는 작동했는데

  • 함수가 모든 테스트를 통과했어요
  • 하지만 프로덕션에서는 시간 초과와 스로틀링이 발생해요
  • 코드는 문제없었지만 구성이 문제였어요

테스트는 통과했지만 프로덕션에서 어려움을 겪는 서버리스 함수와 조정 중인 메모리·시간 초과 다이얼

AWS에서 애플리케이션 배포하기

프로덕션에서 중요한 Lambda 구성

중앙의 Lambda 로고와 사방으로 뻗은 네 가지 프로덕션 구성 상자: CPU 스케일링 다이얼이 있는 메모리, 시계가 있는 시간 초과, 임시 스토리지, 병렬 함수 인스턴스를 보여주는 동시성

  • 메모리: CPU와 네트워크도 함께 확장돼요
  • 시간 초과: 함수가 종료되기까지의 최대 시간(초)
  • 임시 스토리지: /tmp의 임시 공간
  • 동시성: 동시에 실행되는 함수 수
AWS에서 애플리케이션 배포하기

메모리 크기와 CPU의 관계

  • 메모리가 늘어나면 CPU도 비례해서 늘어나요
  • CPU 바운드 함수는 메모리가 높을수록 더 빠르게 실행돼요
  • 실행 시간이 짧아지면 비용도 낮아질 수 있어요
  • 추측이 아닌 테스트로 적정 크기를 찾으세요

메모리 대 비용 곡선: 메모리가 증가하면 실행 시간이 급격히 줄다가 완만해지고, 총비용은 U자형을 이루며 중간에 가장 저렴한 최적점이 강조 표시됨

AWS에서 애플리케이션 배포하기

동시성: 예약형 vs 프로비저닝형


예약된 동시성

  • 최대 동시 실행 수를 제한해요
  • 다운스트림 시스템과 다른 함수를 보호해요

프로비저닝된 동시성

  • 인스턴스를 미리 준비해서 콜드 스타트가 없어요
  • 지연 시간에 민감한 사용자 대상 함수에 적합해요
AWS에서 애플리케이션 배포하기

구성 패키징과 코드 공유

  • 환경 변수: 환경별 구성
  • 레이어: 함수 간 코드와 종속성을 공유
  • 확장 기능: 함수와 함께 실행되는 도구
  • 구성 정보는 배포 패키지 밖에 두세요

Lambda 패키징 옵션: 외부 구성을 담는 환경 변수, 함수 간 공통 라이브러리를 공유하는 레이어, 모니터링이나 비밀 정보 처리를 위해 핸들러와 함께 실행되는 확장 기능

AWS에서 애플리케이션 배포하기

Lambda를 VPC에 연결하기

프라이빗 서브넷의 ENI를 통해 프라이빗 VPC에 연결된 Lambda, 아웃바운드 액세스를 제어하는 보안 그룹, 인터넷 연결을 제공하는 NAT 게이트웨이

  • 내부 리소스에 접근하려면 Lambda를 프라이빗 서브넷에 연결하세요
  • Lambda가 VPC 내에 ENI를 생성해요
  • 보안 그룹이 접근 가능한 대상을 제어해요
  • 외부 접근에는 NAT 또는 VPC 엔드포인트가 필요해요
AWS에서 애플리케이션 배포하기

대상과 DLQ로 실패 처리하기

  • 비동기 호출은 실패 시 자동으로 재시도돼요
  • Lambda Destinations: onSuccess와 onFailure를 라우팅해요
  • 데드레터 큐: 끝내 성공하지 못한 이벤트를 포착해요
  • 실패한 이벤트를 조용히 버리지 마세요

Lambda 비동기 실패 처리: onSuccess와 onFailure 분기가 있는 Lambda Destinations로 이어지는 재시도 루프, 재시도를 모두 소진한 이벤트를 포착하는 데드레터 큐

AWS에서 애플리케이션 배포하기

연습해 봅시다!

AWS에서 애플리케이션 배포하기

Preparing Video For Download...