Lambda SnapStart 활성화 및 관리 - AWS Lambda

Lambda SnapStart 활성화 및 관리

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

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. --snap-start 옵션과 함께 update-function-configuration 명령을 실행하여 함수 구성을 업데이트합니다.

    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

    응답에 OptimizationStatusOn으로, StateActive로 표시되는 경우, 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 버전 2를 사용할 때 필요합니다. 이 설정을 기본 설정으로 지정하려면 aws configure set cli-binary-format raw-in-base64-out을(를) 실행하세요. 자세한 내용은 AWS CLI 지원되는 글로벌 명령줄 옵션을 AWS Command Line Interface 사용 설명서 버전 2에서 참조하세요.

새 함수를 생성할 때 SnapStart를 활성화하려면
  1. --snap-start 옵션과 함께 create-function 명령을 실행하여 함수를 생성합니다. --role실행 역할의 Amazon 리소스 이름(ARN)을 지정합니다.

    aws lambda create-function \ --function-name my-function \ --runtime "java21" \ --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

    응답에 OptimizationStatusOn으로, StateActive로 표시되는 경우, 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 버전 2를 사용할 때 필요합니다. 이 설정을 기본 설정으로 지정하려면 aws configure set cli-binary-format raw-in-base64-out을(를) 실행하세요. 자세한 내용은 AWS CLI 지원되는 글로벌 명령줄 옵션을 AWS Command Line Interface 사용 설명서 버전 2에서 참조하세요.

SnapStart 활성화(API)

SnapStart를 활성화하려면
  1. 다음 중 하나를 수행합니다.

  2. PublishVersion 작업을 사용하여 함수 버전을 게시합니다. Lambda는 코드를 초기화하고, 초기화된 실행 환경의 스냅샷을 생성한 다음, 액세스 지연 시간이 짧아지도록 스냅샷을 캐싱합니다.

  3. GetFunctionConfiguration 작업을 사용하여 해당 함수 버전에 대해 SnapStart가 활성화되어 있는지 확인합니다. 버전 번호를 지정하여 해당 버전에 SnapStart가 활성화되어 있는지 확인합니다. 응답에 OptimizationStatusOn으로, StateActive로 표시되는 경우, SnapStart가 활성화되어 있는 것이며 지정된 함수 버전에 대한 스냅샷을 사용할 수 있습니다.

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

Lambda SnapStart와 함수 상태

SnapStart를 사용할 때 다음과 같은 함수 상태가 발생할 수 있습니다. 또한 Lambda가 실행 환경을 주기적으로 재활용하고 SnapStart로 구성된 함수의 초기화 코드를 다시 실행할 때도 이러한 상태가 발생할 수 있습니다.

  • Pending - Lambda가 코드를 초기화하고 초기화된 실행 환경의 스냅샷을 생성하고 있습니다. 해당 함수 버전에서 작동하는 호출 또는 기타 API 작업은 실패합니다.

  • Active - 스냅샷 생성이 완료되었으므로 함수를 호출할 수 있습니다. SnapStart를 사용하려면 게시되지 않은 버전($LATEST)이 아니라 게시된 함수 버전을 호출해야 합니다.

  • Inactive - 해당 함수 버전이 14일 동안 호출되지 않았습니다. 함수 버전이 Inactive 상태가 되면 Lambda가 해당 스냅샷을 삭제합니다. 14일이 지난 후에 함수 버전을 호출하면 Lambda는 SnapStartNotReadyException 응답을 반환하고 새 스냅샷을 초기화하기 시작합니다. 함수 버전이 Active 상태에 도달할 때까지 기다린 후 다시 호출하세요. Lambda가 실행 환경을 주기적으로 재활용하는 경우에도 Inactive 상태가 발생할 수 있습니다. 이 경우 함수 초기화에 실패할 경우 함수가 Inactive 상태에 들어갈 수 있습니다.

  • Failed - 초기화 코드를 실행하거나 스냅샷을 생성할 때 Lambda에서 오류가 발생했습니다.

스냅샷 업데이트

Lambda는 게시된 각 함수 버전마다 스냅샷을 생성합니다. 스냅샷을 업데이트하려면 새 함수 버전을 게시합니다. Lambda는 최신 런타임 및 보안 패치를 사용하여 스냅샷을 자동으로 업데이트합니다.

AWS SDK for Java에 SnapStart 사용

함수에서 AWS SDK를 호출하기 위해 Lambda는 함수의 실행 역할을 가정하여 휘발성 자격 증명 세트를 생성합니다. 이러한 보안 인증 정보는 함수를 호출할 때 환경 변수로 사용할 수 있습니다. 코드에서 직접 SDK의 보안 인증 정보를 제공할 필요가 없습니다. 기본적으로 보안 인증 공급자 체인은 사용자가 보안 인증 정보를 설정할 수 있는 각 위치를 순차적으로 확인하고, 일반적으로 환경 변수(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)인 사용 가능한 첫 번째 위치를 선택합니다.

참고

SnapStart가 활성화되면 Java 런타임은 자동으로 액세스 키 환경 변수 대신 컨테이너 보안 인증 정보(AWS_CONTAINER_CREDENTIALS_FULL_URIAWS_CONTAINER_AUTHORIZATION_TOKEN)를 사용합니다. 따라서 함수가 복원되기 전에 보안 인증 정보가 만료되지 않습니다.

AWS CloudFormation, AWS SAM 및 AWS CDK에 SnapStart 사용

  • AWS CloudFormation: 템플릿에서 SnapStart 엔터티를 선언합니다.

  • AWS Serverless Application Model(AWS SAM): 템플릿에서 SnapStart 속성을 선언합니다.

  • AWS Cloud Development Kit (AWS CDK): SnapStartProperty 유형을 사용합니다.

스냅샷 삭제

Lambda는 다음 경우에 스냅샷을 삭제합니다.

  • 함수 또는 함수 버전을 삭제한 경우.

  • 14일 동안 함수 버전을 호출하지 않은 경우. 호출 없이 14일이 지나면 함수 버전이 비활성 상태로 전환됩니다. 14일이 지난 후에 함수 버전을 호출하면 Lambda는 SnapStartNotReadyException 응답을 반환하고 새 스냅샷을 초기화하기 시작합니다. 함수 버전이 활성 상태에 도달할 때까지 기다린 후 다시 호출하세요.

Lambda는 일반 데이터 보호 규정(GDPR)에 따라, 삭제된 스냅샷에 연결된 모든 리소스를 제거합니다.