Platform/AWS

AWS - Lambda Warm and Cold Start

wave35 2024. 8. 25. 23:14

 

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