在 Lambda 创建快照之前或在 Lambda 从快照恢复函数之后,使用运行时钩子实施代码。.NET 运行时钩子作为 Amazon.Lambda.Core
-
RegisterBeforeSnapshot()
:创建快照之前运行的代码 -
RegisterAfterSnapshot()
:从快照恢复函数之后运行的代码
注意
如果您使用的是适用于.NET 的 Lambda 注释框架,则请升级到 Amazon.Lambda.Annotations
运行时钩子注册和执行
在初始化代码中注册钩子。根据 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
};
}
}