Entorno de ejecución de AWS Lambda - AWS Lambda

Entorno de ejecución de AWS Lambda

Lambda invoca la función en un entorno de ejecución, que proporciona un entorno de 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 se comunica con Lambda 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 de la función mediante la suscripción a registros mediante la API de registros.


      Diagrama de arquitectura del entorno de ejecución.

Al crear la función Lambda, se especifica la información de configuración, como la cantidad de memoria disponible y el tiempo máximo de ejecución permitido para la 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

El ciclo de vida del entorno de ejecución incluye las siguientes fases:

  • Init: en esta fase, Lambda crea o desbloquea un entorno de ejecución con los recursos configurados, descarga el código para la función y todas las capas, inicializa cualquier extensión, inicializa el tiempo de ejecución y, a continuación, ejecuta el código de inicialización de la función (es decir, el código fuera del controlador principal). La fase Init ocurre durante la primera invocación o antes de las invocaciones de la función si ha habilitado la simultaneidad aprovisionada.

    La fase Init se divide en tres subfases: Extension init, Runtime init y Function init. Estas subfases garantizan que todas las extensiones y el tiempo de ejecución completan sus tareas de configuración antes de que se ejecute el código de función.

  • Invoke: en esta fase, Lambda invoca el controlador de funciones. Una vez que la función se ejecute por completo, Lambda se prepara para gestionar otra invocación de función.

  • Shutdown: esta fase se desencadena si la función Lambda no recibe ninguna invocación durante un periodo de tiempo. En la fase Shutdown, Lambda termina el tiempo de ejecución, alerta a las extensiones para que se detengan de forma correcta y, a continuación, elimina el entorno. Lambda envía un evento Shutdown a cada extensión, que le dice a la extensión que el entorno está a punto de cerrarse.


        A la fase Init le siguen una o más invocaciones de función. Cuando no hay solicitudes de invocación, Lambda inicia la fase SHutdown.

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 indican la finalización mediante el envío de una solicitud Next a la API. 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)

  • Arranque del tiempo de ejecución (Runtime init)

  • Ejecutar el código estático de la función (Function init)

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.

Fase "invoke"

Cuando se invoca una función Lambda en respuesta a una solicitud Next a la API, 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 de Lambda se bloquea o se 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.


          Esta es mi imagen.

Fase "shutdown"

Cuando Lambda está a punto de apagar el tiempo de ejecución, envía un evento Shutdown al tiempo de ejecución y a cada extensión externa. 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 512 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 Lambda y no completados cuando la función finalizó se reanudan si Lambda 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.