Enlaces de tiempo de ejecución de Lambda SnapStart para Python - AWS Lambda

Enlaces de tiempo de ejecución de Lambda SnapStart para Python

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 Python están disponibles como parte de la biblioteca Snapshot Restore for Python de código abierto que se incluye en los tiempos de ejecución administrados por Python. Esta biblioteca proporciona dos decoradores que puede usar para definir sus enlaces de tiempo de ejecución:

  • @register_before_snapshot: para las funciones que desee ejecutar antes de que Lambda cree una instantánea.

  • @register_after_restore: para las funciones que desee ejecutar cuando Lambda reanude una función desde una instantánea.

Alternativamente, puede utilizar los siguientes métodos para registrar los elementos invocables para los enlaces de tiempo de ejecución:

  • register_before_snapshot(func, *args, **kwargs)

  • register_after_restore(func, *args, **kwargs)

Registro y ejecución de enlaces en tiempo de ejecución

El orden en que Lambda ejecuta los enlaces de tiempo de ejecución viene determinado por el orden de registro:

  • Antes de la instantánea: se ejecuta en el orden inverso al de registro

  • Después de la instantánea: se ejecuta en el orden de registro

El orden de registro de los enlaces de tiempo de ejecución depende de cómo se definan los enlaces. Cuando se utilizan decoradores (@register_before_snapshot y @register_after_restore), el orden de registro sigue el orden de importación, definición o ejecución del código. Si necesita tener más control sobre el orden de registro, utilice los métodos register_before_snapshot() y register_after_restore() en lugar de los decoradores.

Asegúrese de que todos los enlaces registrados se hayan importado e incluido correctamente en el código de la función. Si registra los enlaces de tiempo de ejecución en un archivo o módulo independiente, debe asegurarse de que el módulo se importe, directamente o como parte de un paquete más grande, al archivo controlador de la función. Si el archivo o el módulo no se importa en el controlador de funciones, Lambda ignora los enlaces del tiempo de ejecución.

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 @register_before_snapshot 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 @register_after_restore deben completarse antes de que transcurra el tiempo de espera (10 segundos). De lo contrario, obtendrá una excepción SnapStartTimeoutException.

Ejemplo

El siguiente controlador de ejemplo muestra cómo ejecutar el código antes de comprobar (@register_before_snapshot) y después de restaurarlo (@register_after_restore).

from snapshot_restore_py import register_before_snapshot, register_after_restore def lambda_handler(event, context): # Handler code @register_before_snapshot def before_checkpoint(): # Logic to be executed before taking snapshots @register_after_restore def after_restore(): # Logic to be executed after restore

Para ver más ejemplos, consulte Snapshot Restore for Python en el repositorio de GitHub de AWS.