Entorno de ejecución de Lambda
Lambda invoca la función en un entorno de ejecución, que proporciona un entorno en tiempo de ejecución seguro y aislado. El entorno de ejecución administra los recursos necesarios para ejecutar la función. El entorno de ejecución también proporciona compatibilidad del ciclo de vida para el tiempo de ejecución de la función y cualquier extensión externa asociada a la función.
El tiempo de ejecución de la función de Lambda se comunica con mediante la API de tiempo de ejecución. Las extensiones se comunican con Lambda mediante la API de extensiones. Las extensiones también pueden recibir mensajes de registro y otros datos de telemetría de la función mediante la API de telemetría.

Al crear una función de Lambda, se debe especificar información de configuración, como la cantidad de memoria y el tiempo máximo de ejecución asignados a su función. Lambda utiliza esta información para configurar el entorno de ejecución.
El tiempo de ejecución de la función y cada extensión externa son procesos que se ejecutan dentro del entorno de ejecución. Los permisos, recursos, credenciales y variables de entorno se comparten entre la función y las extensiones.
Ciclo de vida del entorno de ejecución de Lambda

Cada fase comienza con un evento que Lambda envía al tiempo de ejecución y a todas las extensiones registradas. El tiempo de ejecución y cada extensión registrada indica la finalización mediante el envío de una solicitud API Next
. Lambda congela el entorno de ejecución cuando el tiempo de ejecución y cada extensión se han completado y no hay eventos pendientes.
Fase "init"
En la fase Init
, Lambda realiza tres tareas:
-
Comenzar todas las extensiones (
Extension init
) -
Bootstrap del tiempo de ejecución (
Runtime init
) -
Ejecutar el código estático de la función (
Function init
) -
Ejecute cualquier enlace en tiempo de ejecución
beforeCheckpoint
(solo Lambda SnapStart)
La fase Init
finaliza cuando el tiempo de ejecución y todas las extensiones señalan que están listas mediante el envío de una solicitud Next
a la API. La fase Init
está limitada a 10 segundos. Si las tres tareas no se completan en 10 segundos, Lambda vuelve a intentar la fase Init
en el momento de la primera invocación de la función.
Si Lambda SnapStart está activada, la fase Init
ocurre cuando publica una versión de la función. Lambda guarda una instantánea del estado de la memoria y del disco del entorno de ejecución iniciado, conserva la instantánea cifrada y la almacena en caché para acceder a ella con baja latencia. Si tiene un enlace de tiempo de ejecución beforeCheckpoint
, el código se ejecuta al final de la fase Init
.
El tiempo de espera de 10 segundos no se aplica a las funciones de SnapStart. 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.
Fase de restauración (solo Lambda SnapStart)
Cuando se invoca por primera vez una función SnapStart y, a medida que la función escala, Lambda vuelve a activar los nuevos entornos de ejecución a partir de la instantánea conservada, en lugar de activar la función desde cero. Si tiene un enlace de tiempo de ejecución afterRestore()
, el código se ejecuta al final de la fase Restore
. Se le cobrará por la duración de los enlaces de tiempo de ejecución afterRestore()
. El tiempo de ejecución (JVM) debe cargarse, y los enlaces de tiempo de ejecución afterRestore()
deben completarse antes de que transcurra el tiempo de espera (2 segundos). De lo contrario, obtendrá una excepción SnapStartTimeoutException. Cuando se completa la fase Restore
, Lambda invoca el controlador de funciones (la fase Invoke
).
Fase "invoke"
Cuando se invoca una función de Lambda en respuesta a una solicitud API Next
, Lambda envía un evento Invoke
al tiempo de ejecución y a cada extensión.
La configuración de tiempo de espera de la función limita la duración de toda la fase Invoke
. Por ejemplo, si establece el tiempo de espera de la función en 360 segundos, la función y todas las extensiones deben completarse en 360 segundos. Tenga en cuenta que no hay una fase posterior a "invoke" independiente. La duración es la suma de todo el tiempo de invocación (tiempo de ejecución + extensiones) y no se calcula hasta que la función y todas las extensiones han terminado la ejecución.
La fase "invoke" finaliza después de que el tiempo de ejecución y todas las extensiones indiquen que se han terminado mediante el envío de una solicitud Next
a la API.
Si la función Lambda se bloquea o agota el tiempo de espera durante la fase Invoke
, Lambda restablece el entorno de ejecución. El restablecimiento se comporta como un evento Shutdown
. Primero, Lambda apaga el tiempo de ejecución. Después Lambda envía un evento Shutdown
a cada extensión externa registrada. El evento incluye el motivo del apagado. Si otro evento Invoke
da como resultado la reutilización de este entorno de ejecución, Lambda inicializa el tiempo de ejecución y las extensiones como parte de la siguiente invocación.
El restablecimiento de Lambda no borra el contenido del directorio /tmp
antes de la siguiente fase de inicio. Este comportamiento es coherente con la fase de apagado regular.

Fase "shutdown"
Cuando Lambda está a punto de cerrar el tiempo de ejecución, envía un evento Shutdown
a cada extensión externa registrada. Las extensiones pueden utilizar este tiempo para las tareas de limpieza finales. El evento Shutdown
es una respuesta a una solicitud Next
a la API.
Duración: toda la fase Shutdown
está limitada a 2 segundos. Si el tiempo de ejecución o cualquier extensión no responde, Lambda lo termina a través de una señal (SIGKILL
).
Después de que la función y todas las extensiones se hayan completado, Lambda mantiene el entorno de ejecución durante algún tiempo en previsión de otra invocación de función. En efecto, Lambda congela el entorno de ejecución. Cuando se invoca de nuevo la función, Lambda descongela el entorno para su reutilización. La reutilización del entorno de ejecución tiene las siguientes implicaciones:
-
Los objetos declarados fuera del método del controlador de la función permanecen inicializados, lo que proporciona una optimización adicional cuando la función se invoca de nuevo. Por ejemplo, si la función de Lambda establece una conexión con una base de datos, en lugar de volver a establecer la conexión, se utiliza la conexión original en posteriores invocaciones. Le recomendamos que agregue lógica al código para comprobar si existe una conexión antes de crear una nueva.
-
Cada entorno de ejecución proporciona entre 512 MB y 10 240 MB en incrementos de 1 MB de espacio en disco en el directorio de
/tmp
. El contenido del directorio se conserva al congelar el entorno de ejecución, proporcionando una caché transitoria que se puede utilizar para varias invocaciones. Puede agregar código adicional para comprobar si la caché dispone de los datos que se almacenaron. Para obtener más información sobre los límites de tamaño de implementación, consulte Cuotas de Lambda. -
Los procesos en segundo plano o devoluciones de llamada iniciados por la función de Lambda y no completados cuando la función finalizó se reanudan si reutiliza el entorno de ejecución. Asegúrese de que los procesos en segundo plano o las devoluciones de llamada del código se completen antes de que este finalice.
Cuando escriba el código de la función, no presuponga que Lambda reutiliza automáticamente el entorno de ejecución para las siguientes invocaciones de la función. Otros factores pueden dictar la necesidad de que Lambda cree un nuevo entorno de ejecución, lo que puede producir resultados inesperados, como errores de conexión a la base de datos.