Puede utilizar enlaces de tiempo de ejecución para implementar el código antes de que Lambda cree una instantánea o después de que Lambda restaure una función desde una instantánea. Los enlaces de tiempo de ejecución de .NET están disponibles como parte del paquete Amazon.Lambda.Core
-
RegisterBeforeSnapshot()
: código para ejecutar antes de la creación de la instantánea -
RegisterAfterSnapshot()
: código para ejecutar después de reanudar una función a partir de una instantánea
nota
Si utiliza el marco de Lambda Annotations para .NET, actualice a Amazon.Lambda.Annotations
Registro y ejecución de enlaces en tiempo de ejecución
Registre sus enlaces en el código de inicialización. Tenga en cuenta las siguientes pautas según el modelo de ejecución de la función de Lambda:
-
Para el enfoque de ensamblaje ejecutable, registre los enlaces antes de iniciar el arranque de Lambda con
RunAsync
. -
Para el enfoque de biblioteca de clase, registre sus enlaces en el constructor de clase del controlador.
-
En el caso de las aplicaciones ASP.NET Core, registre los enlaces antes de llamar al método
WebApplications.Run
.
Para registrar los enlaces en tiempo de ejecución para SnapStart en .NET, utilice los métodos siguientes:
Amazon.Lambda.Core.SnapshotRestore.RegisterBeforeSnapshot(BeforeCheckpoint); Amazon.Lambda.Core.SnapshotRestore.RegisterAfterRestore(AfterCheckpoint);
Cuando se registran varios tipos de enlaces, el orden en el que Lambda ejecuta los enlaces en tiempo de ejecución viene determinado por el orden de registro:
-
RegisterBeforeSnapshot()
: se ejecuta en el orden inverso al de registro -
RegisterAfterSnapshot()
: se ejecuta en el orden del registro
nota
Cuando Lambda crea una instantánea, el código de inicialización puede ejecutarse durante un máximo de 15 minutos. El límite de tiempo es de 130 segundos o el tiempo de espera de la función configurado (máximo de 900 segundos), lo que sea mayor. Los enlaces en tiempo de ejecución RegisterBeforeSnapshot()
cuentan para el límite de tiempo del código de inicialización. Cuando Lambda restaura una instantánea, el tiempo de ejecución debe cargarse y los enlaces de tiempo de ejecución RegisterAfterSnapshot()
deben completarse antes de que transcurra el tiempo de espera (10 segundos). De lo contrario, obtendrá una excepción SnapStartTimeoutException.
Ejemplo
La siguiente función de ejemplo muestra cómo ejecutar el código antes de comprobar (RegisterBeforeSnapshot
) y después de restaurarlo (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
};
}
}