-
[AWS] Lambda Cold Start 해결방법AWS 2023. 7. 5. 00:01728x90
Lambda Cold Start란?
람다 함수를 실행하면 바로 함수가 실행되지 않습니다.
컨테이너 환경이 필요한데 함수를 실행한 직후 컨테이너가 유지됩니다.
하지만 함수를 처음 실행하거나 마지막으로 실행한 지 오래되었다면 컴퓨터 전원이 꺼진 것처럼 컨테이너도 존재하지 않습니다.
이에 따라 람다 함수는 경우에 따라 초기 응답이 늦을 수 있고 이를 콜드 스타트라 합니다.
언어별로도 Coldstart time이 다르게 나타납니다.
Python, Node 같은 경우 상당히 빠르지만 c#, java는 느립니다
해결방법
0. 빠른언어를 사용한다. (node, python)
1. 자체적인 Warm Start로 만들기
2. Lambda의 사양(메모리)을 올린다
3. Provisioned Concurrency를 사용한다.
4. 트레픽이 꾸준하게 들어오는 것
Step1 - Warn Start로 만들기
다양한 방법들이 존재하지만 우선 자체적인 5분마다 요청을 보내 Warn Start로 만들어보고자 합니다.
이벤트 브리지를 활용하여 해결하고자 합니다.
이벤트 브릿지는 이벤트버스로, AWS에서 발생한 이벤트를 전달해서 연결하는 용도로 사용합니다.
주기적으로 이벤트를 발행하고, 해당 이벤트를 람다로 연결하면 람다가 주기적으로 실행됩니다.
일정 패턴 정의
이제 5분마다 람다가 실행됩니다.
Lambda 호출할 때 걸리는 시간이 들쭉날쭉하다가 일정해진 모습을 볼 수 있습니다.
Event Bridge 적용 전
Event Bridge 적용 후
하지만 여전히 개선되지 않은 모습을 보입니다..
Duration Average(700ms -> 100ms)은 많이 줄었지만 Maximum Average(900ms)는 여전히 비슷합니다.
Step 2 - Lambda의 사양 올리기
설정한 메모리에 따라 Cold Start Time이 다르며 1024로 설정하였을 때 최적의 퍼포먼스가 보입니다.
람다의 메모리를 1024MB로 올려보았습니다.
Lambda 메모리 128 -> 1024로 수정
평균 60ms대로 현저하게 떨어졌습니다.
Lambda 메모리 1024 -> 512로 내려보기
내렸을 때 어느정도 비용을 절감시키면서 어느정도 퍼포먼스를 기대할 수 있지 않을까?란 생각으로 512MB로 메모리를 내려보았습니다.
평균적으로 60ms로 실행되며 가끔 200ms정도까지 소요됩니다.
나쁘지 않은 것 같습니다.
Lambda 메모리 512 -> 256으로 내려보기
가끔 400ms까지 소요됩니다.
256MB 까지가 양보할 수 있는 적정선으로 보입니다.
Provisioned Concurrency를 사용
서버리스의 Cold start는 꺼져있는 상태여서 발생하는 문제입니다.
그러면 EC2처럼 미리 켜두면 되기 때문에 추가된 기능이 프로비저닝 동시성입니다.
다만 요청이 없더라도 비용이 계속 발생하는 단점이 있습니다.
Lambda의 메모리 증가와 EventBridge를 활용하여 해결하였기 때문에 해당사항은 적용하지 않았습니다.
참고자료
https://jeonghwan-kim.github.io/dev/2021/04/01/aws-lambda-cold-start.html#%EC%A0%95%EB%A6%AC
https://repost.aws/ko/knowledge-center/lambda-cold-start
'AWS' 카테고리의 다른 글
[AWS] SQS 가시성제한 0초 설정 (0) 2023.08.02 Amazon MSK란? (0) 2023.07.27 [AWS] Lambda + API Gateway (0) 2023.07.04 [AWS] Lambda란? (0) 2023.07.03 [AWS] Amazon API Gateway란? (0) 2023.06.17