Lambda SnapStart 활성화 및 관리

Lambda SnapStart 활성화 및 관리

SnapStart를 사용하려면 새 또는 기존 Lambda 함수에서 SnapStart를 활성화하세요. 그런 다음 함수 버전을 게시하고 호출하면 됩니다.

출처: AWS Lambda 개발자 안내서

본문

Topics(주제)

SnapStart 활성화 (콘솔)

함수에 SnapStart 활성화하기

  1. Lambda 콘솔의 함수 페이지를 엽니다.
  2. 함수 이름을 선택합니다.
  3. Configuration(구성)을 선택한 다음 General configuration(일반 구성)을 선택합니다.
  4. General configuration 창에서 Edit(편집)을 선택합니다.
  5. Edit basic settings(기본 설정 편집) 페이지에서 SnapStart에 대해 Published versions를 선택합니다.
  6. Save(저장)를 선택합니다.
  7. 함수 버전을 게시합니다. Lambda가 코드를 초기화하고, 초기화된 실행 환경의 스냅샷을 만들고, 저지연 접근을 위해 스냅샷을 캐시해요.
  8. 함수 버전을 호출합니다.

SnapStart 활성화 (AWS CLI)

기존 함수에 SnapStart 활성화하기

  1. update-function-configuration 명령을 --snap-start 옵션으로 실행해 함수 구성을 업데이트합니다.

    aws lambda update-function-configuration \
      --function-name my-function \
      --snap-start ApplyOn=PublishedVersions
    
  2. publish-version 명령으로 함수 버전을 게시합니다.

    aws lambda publish-version \
      --function-name my-function
    
  3. get-function-configuration 명령을 버전 번호를 지정해 실행해 함수 버전에서 SnapStart가 활성화되었는지 확인합니다. 다음 예제는 버전 1을 지정해요.

    aws lambda get-function-configuration \
      --function-name my-function:{{1}}
    

    응답에 OptimizationStatus가 On이고 State가 Active로 표시되면 SnapStart가 활성화되었고 지정된 함수 버전에 스냅샷이 있다는 뜻이에요.

    "SnapStart": { 
        "ApplyOn": "PublishedVersions",
        "OptimizationStatus": "On"
     },
     "State": "Active",
    
  4. invoke 명령을 버전을 지정해 실행해 함수 버전을 호출합니다. 다음 예제는 버전 1을 호출해요.

    aws lambda invoke \
      --cli-binary-format raw-in-base64-out \
      --function-name my-function:{{1}} \
      --payload '{ "name": "Bob" }' \
      response.json
    

    cli-binary-format 옵션은 AWS CLI version 2를 사용하는 경우 필수예요. 이를 기본 설정으로 만들려면 aws configure set cli-binary-format raw-in-base64-out을 실행하세요. 자세한 내용은 AWS Command Line Interface User Guide for Version 2의 AWS CLI 지원 전역 명령줄 옵션을 참고하세요.

새 함수를 만들 때 SnapStart 활성화하기

  1. create-function 명령을 --snap-start 옵션으로 실행해 함수를 만듭니다. --role에는 실행 역할의 Amazon Resource Name(ARN)을 지정하세요. 참고
    Java(버전 11+), Python(버전 3.12+), .NET(버전 8+)용 Lambda의 AWS 기본 이미지가 아닌 기본 이미지를 사용하는 컨테이너 이미지 함수로 SnapStart를 사용한다면, 컨테이너 이미지용 SnapStart 훅 구현의 지침을 따라 이미지를 SnapStart와 호환되게 만드세요.

    aws lambda create-function \
      --function-name {{my-function}} \
      --runtime "{{java25}}" \
      --zip-file fileb://my-function.zip \
      --handler my-function.handler \
      --role {{arn:aws:iam::111122223333:role/lambda-ex}} \
      --snap-start ApplyOn=PublishedVersions
    
  2. publish-version 명령으로 버전을 만듭니다.

    aws lambda publish-version \
      --function-name {{my-function}}
    
  3. get-function-configuration 명령을 버전 번호를 지정해 실행해 함수 버전에서 SnapStart가 활성화되었는지 확인합니다. 다음 예제는 버전 1을 지정해요.

    aws lambda get-function-configuration \
      --function-name my-function:{{1}}
    

    응답에 OptimizationStatus가 On이고 State가 Active로 표시되면 SnapStart가 활성화되었고 지정된 함수 버전에 스냅샷이 있다는 뜻이에요.

    "SnapStart": { 
         "ApplyOn": "PublishedVersions",
         "OptimizationStatus": "On"
      },
      "State": "Active",
    
  4. invoke 명령을 버전을 지정해 실행해 함수 버전을 호출합니다. 다음 예제는 버전 1을 호출해요.

    aws lambda invoke \
      --cli-binary-format raw-in-base64-out \
      --function-name my-function:{{1}} \
      --payload '{ "name": "Bob" }' \
      response.json
    

    cli-binary-format 옵션은 AWS CLI version 2를 사용하는 경우 필수예요. 이를 기본 설정으로 만들려면 aws configure set cli-binary-format raw-in-base64-out을 실행하세요. 자세한 내용은 AWS Command Line Interface User Guide for Version 2의 AWS CLI 지원 전역 명령줄 옵션을 참고하세요.

SnapStart 활성화 (API)

SnapStart 활성화하기

  1. 다음 중 하나를 수행합니다:

  2. PublishVersion 작업으로 함수 버전을 게시합니다. Lambda가 코드를 초기화하고, 초기화된 실행 환경의 스냅샷을 만들고, 저지연 접근을 위해 스냅샷을 캐시해요.

  3. GetFunctionConfiguration 작업으로 함수 버전에서 SnapStart가 활성화되었는지 확인합니다. 버전 번호를 지정해 해당 버전에서 SnapStart가 활성화되었는지 확인하세요. 응답에 OptimizationStatus가 On이고 State가 Active로 표시되면 SnapStart가 활성화되었고 지정된 함수 버전에 스냅샷이 있다는 뜻이에요.

    "SnapStart": { 
            "ApplyOn": "PublishedVersions",
            "OptimizationStatus": "On"
         },
         "State": "Active",
    
  4. Invoke 작업으로 함수 버전을 호출합니다.

Lambda SnapStart와 함수 상태

SnapStart를 사용할 때 다음 함수 상태가 발생할 수 있어요.

Pending
Lambda가 코드를 초기화하고 초기화된 실행 환경의 스냅샷을 찍고 있어요. 함수 버전에서 동작하는 모든 호출이나 기타 API 작업은 실패해요.

Active
스냅샷 생성이 완료되었고 함수를 호출할 수 있어요. SnapStart를 사용하려면 게시되지 않은 버전($LATEST)이 아니라 게시된 함수 버전을 호출해야 해요.

Inactive
Lambda가 소프트웨어 업데이트를 적용하기 위해 함수 스냅샷을 주기적으로 다시 생성할 때 Inactive 상태가 발생할 수 있어요. 이 경우 함수가 초기화에 실패하면 함수가 Inactive 상태로 들어갈 수 있어요.
Java 런타임을 사용하는 함수의 경우 Lambda는 호출 없이 14일이 지나면 스냅샷을 삭제해요. 14일 후 함수 버전을 호출하면 Lambda가 SnapStartNotReadyException 응답을 반환하고 새 스냅샷 초기화를 시작해요. 함수 버전이 Active 상태에 도달할 때까지 기다린 다음 다시 호출하세요.

Failed
Lambda가 초기화 코드를 실행하거나 스냅샷을 만들 때 오류를 만났어요.

스냅샷 업데이트

Lambda는 각 게시된 함수 버전에 대해 스냅샷을 만들어요. 스냅샷을 업데이트하려면 새 함수 버전을 게시하세요.

AWS SDK와 함께 SnapStart 사용

함수에서 AWS SDK 호출을 하려면 Lambda가 함수의 실행 역할을 수임해 일시적(ephemeral) 자격 증명 세트를 생성해요. 이러한 자격 증명은 함수 호출 중 환경 변수로 사용할 수 있어요. 코드에서 SDK에 자격 증명을 직접 제공할 필요가 없죠. 기본적으로 자격 증명 공급자 체인은 자격 증명을 설정할 수 있는 각 위치를 순차적으로 확인하고 첫 번째 사용 가능한 것을 선택해요 — 보통 환경 변수(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN)예요.

참고
SnapStart가 활성화되면 Lambda 런타임은 접근 키 환경 변수 대신 컨테이너 자격 증명(AWS_CONTAINER_CREDENTIALS_FULL_URI와 AWS_CONTAINER_AUTHORIZATION_TOKEN)을 자동으로 사용해요. 이렇게 하면 함수가 복원되기 전에 자격 증명이 만료되는 것을 방지할 수 있죠.

CloudFormation, AWS SAM, AWS CDK와 함께 SnapStart 사용

  • AWS CloudFormation: 템플릿에 SnapStart 엔터티를 선언하세요.
  • AWS Serverless Application Model (AWS SAM): 템플릿에 SnapStart 속성을 선언하세요.
  • AWS Cloud Development Kit (AWS CDK): SnapStartProperty 타입을 사용하세요.

스냅샷 삭제

Lambda는 다음 경우 스냅샷을 삭제해요:

  • 함수 또는 함수 버전을 삭제할 때.
  • Java 런타임만 — 함수 버전을 14일 동안 호출하지 않을 때. 호출 없이 14일이 지나면 함수 버전이 Inactive 상태로 전환돼요. 14일 후 함수 버전을 호출하면 Lambda가 SnapStartNotReadyException 응답을 반환하고 새 스냅샷 초기화를 시작해요. 함수 버전이 Active 상태에 도달할 때까지 기다린 다음 다시 호출하세요.

Lambda는 GDPR(General Data Protection Regulation)을 준수하여 삭제된 스냅샷과 관련된 모든 리소스를 제거해요.

더 알아보기 (Learn more)

  • 콘솔·CLI·API로 SnapStart를 활성화하고, 함수 상태·스냅샷 업데이트·SDK 자격 증명·IaC 템플릿과 스냅샷 삭제까지 살펴보세요.