[Lambda] Cold Start 개선하기

Nicky·2024년 6월 11일
post-thumbnail

에러 발생

세팅한 lambda 함수에서 간혈적으로 에러가 발생하였다.

lambda의 모니터 화면을 보면 현재 실행 시간이 들쭉날쭉 한것을 확인할 수 있는데..

API Gateway의 제한 시간이 29초로 한정되어 있어, lambda의 실행시간이 이를 넘기게 되면 에러가 발생하는 것이었다.

검색을 통해 Lambda를 사용할 때는 Cold Start가 발생하고, 이것이 전체 실행시간이 길어지게 되는 주요 요인임을 파악했다.

Cold Start

Cold Start에 대해 알아보기 전에 먼저 람다의 실행 사이클을 살펴보자.

Cold Start 시간은 위의 그림의 INIT 단계를 의미하는데 다음과 같은 작업이 실행된다.

  1. 컨테이너 생성
  2. 실행 환경 구성
  3. 런타임 초기화
  4. 코드 초기화

INIT 단계가 완료된 이후 Lambda 호출이 발생하면 INIT 단계는 제외하고 바로 INVOKE 단계를 실행하게 된다.

즉, lambda 함수의 준비 상태가 보장이 된다면, Cold Start를 개선할 수 있다!

Cold Start 개선하기

lambda의 Cold Start 시간을 줄이기 위한 방법에는 다음과 같은 것들이 있다.

  1. 프로비저닝된 동시성 활성화 하기
  2. 프로비저닝 오토스케일
  3. 함수 크기 최적화
  4. 함수 호출 빈도 증가

이 중에서 EventBridge를 사용한 스케줄링 설정을 통해 주기적으로 함수를 호출하고자 한다.

AWS EventBridge: 특정 이벤트에 반응하여 AWS Lambda와 같은 타겟을 자동으로 실행할 수 있게 해준다.

스케줄링 설정하기

트리거 추가

트리거 구성: EventBridge 선택
이때 예약 표현식을 통해 스케줄링 설정을 할 수 있는데,
나의 경우 10분마다 함수를 호출하게 하였다.
예약 표현식: cron(0/10***?*)

테스트

이제 Spring Application에서 사진 추론을 진행하여 함수의 실행시간을 체크해보자.

평균 10~11초대의 시간이 소요됨을 확인할 수 있었다.

또한 lambda 함수가 10분 이내로 호출된 경우, 따로 트리거가 발동하지 않는 것을 확인할 수 있다.

profile
코딩 연구소

0개의 댓글