Cómo entender la forma en que Lambda administra las actualizaciones de las versiones de tiempo de ejecución - AWS Lambda

Cómo entender la forma en que Lambda administra las actualizaciones de las versiones de tiempo de ejecución

Lambda mantiene todos los tiempos de ejecución gestionados al día con actualizaciones de seguridad, correcciones de errores, nuevas funciones, mejoras de rendimiento y soporte para versiones menores. Estas actualizaciones del tiempo de ejecución se publican como versiones del tiempo de ejecución. Lambda aplica las actualizaciones del tiempo de ejecución a las funciones mediante la migración de la función de una versión de tiempo de ejecución anterior a una nueva versión del tiempo de ejecución.

De forma predeterminada, para las funciones que utilizan tiempos de ejecución administrados, Lambda aplica las actualizaciones del tiempo de ejecución de forma automática. Con las actualizaciones automáticas en tiempo de ejecución, Lambda asume la carga operativa de aplicar parches a las versiones en tiempo de ejecución. Para la mayoría de los clientes, las actualizaciones automáticas son la opción correcta. Puede cambiar este comportamiento predeterminado configurando los ajustes de administración del tiempo de ejecución.

Lambda también publica cada nueva versión en tiempo de ejecución como una imagen de contenedor. Para actualizar las versiones del tiempo de ejecución de las funciones basadas en contenedores, debe crear una nueva imagen de contenedor a partir de la imagen base actualizada y volver a implementar la función.

Cada versión en tiempo de ejecución está asociada a un número de versión y un ARN (Amazon Resource Name). Los números de versión del tiempo de ejecución utilizan un esquema de numeración definido por Lambda, de forma independiente de los números de versión que utiliza el lenguaje de programación. Los números de versión en tiempo de ejecución no siempre siguen una secuencia. Por ejemplo, es posible que la versión 42 vaya seguida de la 45. El ARN de la versión en tiempo de ejecución es un identificador único para cada versión del tiempo de ejecución. Puede ver el ARN de la versión del tiempo de ejecución actual de la función en la consola de Lambda y en la línea INIT_START de los registros de la función.

Las versiones del tiempo de ejecución no deben confundirse con los identificadores de tiempo de ejecución. Cada tiempo de ejecución tiene un identificador de tiempo de ejecución único, como python3.13 o nodejs22.x. Se corresponden con cada versión principal del lenguaje de programación. Las versiones del tiempo de ejecución describen la versión de parche de un entorno de ejecución individual.

nota

El ARN para el mismo número de versión de tiempo de ejecución puede variar entre las arquitecturas de CPU y Regiones de AWS.

Compatibilidad con versiones anteriores

Lambda se esfuerza por proporcionar actualizaciones de tiempo de ejecución que sean compatibles con versiones anteriores a las funciones existentes. Sin embargo, al igual que ocurre con los parches de software, hay casos excepcionales en los que una actualización del tiempo de ejecución puede afectar negativamente a una función ya existente. Por ejemplo, los parches de seguridad pueden exponer un problema subyacente con una función existente que depende del comportamiento inseguro anterior.

Al crear e implementar la función, es importante entender cómo administrar las dependencias para evitar posibles incompatibilidades con una futura actualización del tiempo de ejecución. Por ejemplo, supongamos que la función depende del paquete A, que a su vez depende del paquete B. Ambos paquetes se incluyen en el entorno de ejecución de Lambda (por ejemplo, podrían ser partes del SDK o sus dependencias, o partes de las bibliotecas del sistema del tiempo de ejecución).

Considere los siguientes escenarios:

Implementación Compatible con parches Motivo
  • Paquete A: uso desde el tiempo de ejecución

  • Paquete B: uso desde el tiempo de ejecución

Las futuras actualizaciones del tiempo de ejecución de los paquetes A y B son compatibles con versiones anteriores.
  • Paquete A: en el paquete de implementación

  • Paquete B: en el paquete de implementación

Su implementación tiene prioridad, por lo que las futuras actualizaciones del tiempo de ejecución de los paquetes A y B no tienen ningún efecto.
  • Paquete A: en el paquete de implementación

  • Paquete B: uso desde el tiempo de ejecución

Sí*

Las futuras actualizaciones del tiempo de ejecución del paquete B son compatibles con versiones anteriores.

*Si A y B están estrechamente acoplados, pueden producirse problemas de compatibilidad. Por ejemplo, los paquetes boto3 y botocore en el SDK de AWS para Python deben implementarse juntos.

  • Paquete A: uso desde el tiempo de ejecución

  • Paquete B: en el paquete de implementación

No Es posible que las futuras actualizaciones del tiempo de ejecución del paquete A requieran una versión actualizada del paquete B. Sin embargo, la versión implementada del paquete B tiene prioridad y es posible que no sea compatible con versiones posteriores de la versión actualizada del paquete A.

Para mantener la compatibilidad con futuras actualizaciones del tiempo de ejecución, siga estas prácticas recomendadas:

  • Cuando sea posible, empaquete todas las dependencias: incluya todas las bibliotecas necesarias, incluido el SDK de AWS y sus dependencias, en su paquete de implementación. Esto garantiza un conjunto de componentes estable y compatible.

  • Utilice los SDK proporcionados en el tiempo de ejecución con moderación: confíe únicamente en el SDK proporcionado en el tiempo de ejecución cuando no pueda incluir paquetes adicionales (por ejemplo, cuando utilice el editor de código de la consola de Lambda o el código en línea en una plantilla de AWS CloudFormation).

  • Evite anular las bibliotecas del sistema: no implemente bibliotecas de sistemas operativos personalizadas que puedan entrar en conflicto con las futuras actualizaciones del tiempo de ejecución.

Modos de actualización del tiempo de ejecución

Lambda se esfuerza por proporcionar actualizaciones de tiempo de ejecución que sean compatibles con versiones anteriores a las funciones existentes. Sin embargo, al igual que ocurre con los parches de software, hay casos excepcionales en los que una actualización del tiempo de ejecución puede afectar negativamente a una función ya existente. Por ejemplo, los parches de seguridad pueden exponer un problema subyacente con una función existente que depende del comportamiento inseguro anterior. Los controles de administración del tiempo de ejecución de Lambda ayudan a reducir el riesgo de que las cargas de trabajo se vean afectadas en el caso de que se produzca una incompatibilidad entre las versiones en tiempo de ejecución. Para cada versión de función ($LATEST o versión publicada), puede elegir uno de los siguientes modos de actualización en tiempo de ejecución:

  • Auto(predeterminado): actualice de forma automática la versión de ejecución más reciente y segura mediante Lanzamiento de la versión del tiempo de ejecución bifásico. Recomendamos este modo a la mayoría de los clientes para que siempre se beneficien de las actualizaciones del tiempo de ejecución.

  • Actualización de función: actualiza a la versión del tiempo de ejecución más reciente y segura cuando actualice su función. Cuando actualiza la función, Lambda actualiza el tiempo de ejecución de la función a la versión de ejecución más reciente y segura. Este enfoque sincroniza las actualizaciones en tiempo de ejecución con las implementaciones de funciones, lo que le permite controlar cuándo Lambda aplica las actualizaciones en tiempo de ejecución. Con este modo, puede detectar y mitigar con anticipación las incompatibilidades poco frecuentes entre las actualizaciones en tiempo de ejecución. Al utilizar este modo, debe actualizar periódicamente las funciones para mantener su tiempo de ejecución actualizado.

  • Manual: actualice de forma manual la versión del tiempo de ejecución. Se especifica una versión del tiempo de ejecución en la configuración de la función. La función utiliza esta versión del tiempo de ejecución de forma indefinida. En el caso de que una nueva versión del tiempo de ejecución sea incompatible con una función existente, puede utilizar este modo para restaurar la función a una versión anterior en tiempo de ejecución. Recomendamos no utilizar el modo Manual para intentar lograr la coherencia del tiempo de ejecución en todas las implementaciones. Para obtener más información, consulte Restauración de una versión del tiempo de ejecución de Lambda.

La responsabilidad de aplicar las actualizaciones de tiempo de ejecución a las funciones varía según el modo de actualización del tiempo de ejecución que elija. Para obtener más información, consulte Cómo entender el modelo de responsabilidad compartida para la administración del tiempo de ejecución de Lambda.

Lanzamiento de la versión del tiempo de ejecución bifásico

Lambda presenta nuevas versiones del tiempo de ejecución en el siguiente orden:

  1. En la primera fase, Lambda aplica la nueva versión del tiempo de ejecución cada vez que se crea o se actualiza una función. La función se actualiza al llamar a las operaciones de la API updateFunctionCode o UpdateFunctionConfiguration.

  2. En la segunda fase, Lambda actualiza cualquier función que utilice el modo de actualización Auto (Automático) del tiempo de ejecución y que aún no se haya actualizado a la nueva versión del tiempo de ejecución.

La duración total del proceso de implementación varía en función de varios factores, incluida la gravedad de los parches de seguridad incluidos en la actualización del tiempo de ejecución.

Si está desarrollando e implementando sus funciones de forma activa, lo más probable es que aprendas nuevas versiones del tiempo de ejecución durante la primera fase. Esto sincroniza las actualizaciones del tiempo de ejecución con las actualizaciones de funciones. En el caso excepcional de que la última versión del tiempo de ejecución afecte de forma negativa a la aplicación, este enfoque le permite tomar medidas correctivas inmediatas. Las funciones que no están en desarrollo activo siguen recibiendo la ventaja operativa de las actualizaciones automáticas del tiempo de ejecución durante la segunda fase.

Este enfoque no afecta a las funciones configuradas en modo Function update (Actualización de funciones) o Manual. Las funciones que utilizan el modo Function update (Actualización de funciones) reciben las actualizaciones de ejecución más recientes solo cuando se crean o actualizan. Las funciones que utilizan el modo Manual no reciben actualizaciones en tiempo de ejecución.

Lambda publica nuevas versiones en tiempo de ejecución de forma gradual a través de las Regiones de AWS. Si tus funciones están configuradas en modo Function update (Actualización de funciones) o Auto (Automático), es posible que estas se desplieguen al mismo tiempo en diferentes regiones, o en diferentes momentos de la misma región, elijan versiones de ejecución diferentes. Los clientes que necesiten garantizar la coherencia de las versiones del tiempo de ejecución en sus entornos deben utilizar imágenes de contenedores para implementar sus funciones de Lambda. El modo Manual está diseñado como una mitigación temporal para permitir la reversión de la versión del tiempo de ejecución en el caso excepcional de que una versión del tiempo de ejecución sea incompatible con la función.