.NET용 Lambda SnapStart 런타임 후크

.NET용 Lambda SnapStart 런타임 후크

런타임 후크(runtime hooks)를 사용해 Lambda가 스냅샷을 만들기 전이나 스냅샷에서 함수를 재개한 후에 실행할 코드를 구현할 수 있습니다. .NET 런타임 후크는 Amazon.Lambda.Core 패키지(버전 2.5.0 이상)의 일부로 제공됩니다. 이 라이브러리는 런타임 후크를 정의하는 데 사용할 수 있는 두 가지 메서드를 제공합니다.

출처: AWS Lambda 개발자 안내서

본문

  • RegisterBeforeSnapshot(): 스냅샷 생성 전에 실행할 코드
  • RegisterAfterSnapshot(): 스냅샷에서 함수를 재개한 후 실행할 코드

.NET용 Lambda Annotations 프레임워크를 사용한다면 SnapStart와의 호환성을 보장하기 위해 Amazon.Lambda.Annotations 버전 1.6.0 이상으로 업그레이드하세요.

런타임 후크 등록과 실행

초기화 코드에서 후크를 등록하세요. Lambda 함수의 실행 모델에 따라 다음 지침을 고려하세요.

  • 실행 가능 어셈블리 접근 방식의 경우 RunAsync로 Lambda 부트스트랩을 시작하기 전에 후크를 등록하세요.
  • 클래스 라이브러리 접근 방식의 경우 핸들러 클래스 생성자에서 후크를 등록하세요.
  • ASP.NET Core 애플리케이션의 경우 WebApplications.Run 메서드를 호출하기 전에 후크를 등록하세요.

.NET에서 SnapStart용 런타임 후크를 등록하려면 다음 메서드를 사용하세요.

Amazon.Lambda.Core.SnapshotRestore.RegisterBeforeSnapshot(BeforeCheckpoint);
Amazon.Lambda.Core.SnapshotRestore.RegisterAfterRestore(AfterCheckpoint);

여러 후크 유형이 등록되면 Lambda가 런타임 후크를 실행하는 순서는 등록 순서에 따라 결정됩니다.

  • RegisterBeforeSnapshot(): 등록된 역순으로 실행됩니다.
  • RegisterAfterSnapshot(): 등록된 순서대로 실행됩니다.

Lambda가 스냅샷을 만들 때 초기화 코드는 최대 15분까지 실행될 수 있습니다. 시간 한도는 130초 또는 구성된 함수 타임아웃(최대 900초) 중 더 높은 값입니다. RegisterBeforeSnapshot() 런타임 후크는 초기화 코드 시간 한도에 계산됩니다. Lambda가 스냅샷을 복원할 때 런타임은 로드하고 RegisterAfterSnapshot() 런타임 후크는 타임아웃 한도(10초) 안에 완료되어야 합니다. 그렇지 않으면 SnapStartTimeoutException이 발생합니다.

예제

다음 예제 함수는 체크포인트 전(RegisterBeforeSnapshot)과 복원 후(RegisterAfterRestore)에 코드를 실행하는 방법을 보여줍니다.

public class SampleClass
{
    public SampleClass()
    {
        Amazon.Lambda.Core.SnapshotRestore.RegisterBeforeSnapshot(BeforeCheckpoint);
        Amazon.Lambda.Core.SnapshotRestore.RegisterAfterRestore(AfterCheckpoint);
    }

    private ValueTask BeforeCheckpoint()
    {
        // Add logic to be executed before taking the snapshot
        return ValueTask.CompletedTask;
    }

    private ValueTask AfterCheckpoint()
    {
        // Add logic to be executed after restoring the snapshot
        return ValueTask.CompletedTask;
    }

    public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
    {
        // Add business logic

        return new APIGatewayProxyResponse
        {
            StatusCode = 200
        };
    }
}

더 알아보기 (Learn more)