Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Gli hook di runtime possono essere utilizzati per implementare il codice prima che Lambda crei uno snapshot o dopo che ha ripristinato una funzione da uno snapshot. Gli hook di runtime .NET sono disponibili come parte del pacchetto Amazon.Lambda.Core
-
RegisterBeforeSnapshot()
: codice da eseguire prima della creazione dello snapshot -
RegisterAfterSnapshot()
: codice da eseguire dopo la ripresa di una funzione da uno snapshot
Nota
Se utilizzi il framework Lambda Annotations per.NET, esegui l'upgrade alla versione Amazon.Lambda.Annotations 1.6.0 o successiva per garantire la compatibilità con. SnapStart
Registrazione ed esecuzione di hook di runtime
Registra i tuoi hook nel codice di inizializzazione. Prendi in considerazione le seguenti linee guida basate sul modello di esecuzione della tua funzione Lambda:
-
Per l'approccio all'assembly eseguibile, registra i tuoi hook prima di avviare il bootstrap Lambda con
RunAsync
. -
Per l'approccio basato sulle librerie di classi, registra i tuoi hook nel costruttore della classe handler.
-
Per le applicazioni ASP.NET Core, registra gli hook prima di chiamare il metodo
WebApplications.Run
.
Per registrare gli hook di runtime in .NET, usa i seguenti metodi: SnapStart
Amazon.Lambda.Core.SnapshotRestore.RegisterBeforeSnapshot(BeforeCheckpoint); Amazon.Lambda.Core.SnapshotRestore.RegisterAfterRestore(AfterCheckpoint);
Quando vengono registrati più tipi di hook, l'ordine in cui Lambda esegue gli hook di runtime è determinato dall'ordine di registrazione:
-
RegisterBeforeSnapshot()
: eseguito nell'ordine di registrazione inverso -
RegisterAfterSnapshot()
: eseguito nell'ordine di registrazione
Nota
Quando Lambda crea uno snapshot, il codice di inizializzazione può essere eseguito per un massimo di 15 minuti. Il limite di tempo è 130 secondi o il timeout della funzione configurato (massimo 900 secondi), a seconda di quale dei due valori sia più elevato. I tuoi hook di runtime RegisterBeforeSnapshot()
contano ai fini del limite di tempo del codice di inizializzazione. Quando Lambda ripristina uno snapshot, il runtime deve essere caricato e gli hook di runtime RegisterAfterSnapshot()
devono essere completati entro il limite di timeout (10 secondi). Altrimenti, otterrai un SnapStartTimeoutException.
Esempio
La seguente funzione di esempio mostra come eseguire il codice prima del checkpoint (RegisterBeforeSnapshot
) e dopo il ripristino (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
};
}
}