AWS - Lambda Warm and Cold Start
Cold Start(콜드 스타트)
Cold Start는 AWS Lambda 함수가 처음 호출되거나 오랜 시간 동안 호출되지 않다가
다시 호출될 때 발생하는 초기화 과정입니다.
초기화 과정
AWS Lambda는 함수가 실행될 때마다 내부적으로 새로운 컨테이너(Execution Environment)를 생성합니다.
이 과정에는 함수의 코드 및 라이브러리를 로드하고,
런타임 환경을 초기화하며, 네트워크 설정 및 보안 그룹 등을 설정하는 시간이 필요합니다.
이 초기화 단계가 다소 시간이 걸리기 때문에, 첫 호출 시 지연(latency)이 발생할 수 있습니다.
실행단계
Warm Start(웜 스타트)
Warm Start는 함수가 호출될 때 이미 생성된 컨테이너가 재사용되는 경우를 말합니다.
Warm Start를 조정하여 멀티 executor를 원활하게 실행하고 전반적인 성능을 향상시키는 데 도움을 주어
Lambda performance tuning을 가능하게 합니다.
컨테이너 재사용
Lambda는 콜드 스타트로 생성된 컨테이너를 일정 시간 동안 유지합니다.
이 컨테이너가 유지되고 있는 동안 동일한 함수가 호출되면, 초기화 과정 없이 바로 실행할 수 있습니다.
컨테이너를 재사용은 함수의 실행 속도와 응답 시간을 향상시키므로
인프라 효율성, 비용절감, 신속대응에 이점이 있습니다.
또한 Lambda가 얼마나 오랫동안 컨테이너를 유지하는지는 AWS의 내부 로직에 따라 달라집니다.
( 5분~15분 동적인 시간, 공식적이진 않음 )
프로비저닝된 동시성 구성 (Lambda Provisioned Concurrency)
AWS Lambda의 Provisioned Concurrency는 특정 수의 컨테이너를 미리 준비해 두어,
콜드 스타트를 방지하고 항상 일정한 응답 시간을 보장할 수 있도록 해주는 기능입니다.
Lambda Console 또는 AWS CLI를 통해 설정 할 수 있습니다.
Lambda Console
AWS CLI
# 프로비저닝된 동시성을 5로 설정
aws lambda put-provisioned-concurrency-config \
--function-name my-function \
--qualifier 1 \
--provisioned-concurrent-executions 5
Terraform
resource "aws_lambda_provisioned_concurrency_config" "example" {
function_name = aws_lambda_function.example.function_name
qualifier = "$LATEST"
provisioned_concurrent_executions = 5
}
실행테스트
실행 코드
WARM_VAL 전역변수를 통해 Warm or Cold Start인지 식별합니다.
WARM_VAL = False
def global_value():
print("Change Warm")
global WARM_VAL
WARM_VAL = True
def lambda_handler(event, context):
if WARM_VAL is False:
print("Status is Cold")
global_value()
else:
print("Status is Warm")
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
}),
}
결과
CloudWatch 로그를 보면 첫 실행시에는 Cold Start로 실행되고,
그 이후 N번 지속적인 실행일 때는 Warm Start로 유지되는 것을 볼 수 있습니다.
참고 :
https://medium.com/@danielmanchev/cold-warm-and-hot-start-in-aws-lambda-bc8d64f28575
https://aws.amazon.com/ko/blogs/compute/operating-lambda-performance-optimization-part-1/
Operating Lambda: Performance optimization – Part 1 | Amazon Web Services
This post is the first in a 3-part series on performance optimization in Lambda. It explains how the Lambda execution environment works and why cold starts occur.
aws.amazon.com