Actualizaciones de tiempo de ejecución de Lambda - AWS Lambda

Actualizaciones de tiempo de ejecución de Lambda

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. Para obtener más información, consulte Controles 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. 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 de ejecución actual de la función en la línea INIT_START de los registros de funciones y en la consola de Lambda.

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.9 o nodejs18.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.

Controles de administració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 Restaurar una versión en tiempo de ejecución.

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 Modelo de responsabilidad compartida.

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. Una función se actualiza cuando llamas a las operaciones de la UpdateFunctionConfigurationAPI UpdateFunctionCodeo.

  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.

Restaurar una versión en tiempo de ejecución

En el caso de que una nueva versión del tiempo de ejecución sea incompatible con la función existente, puede restaurar su versión en tiempo de ejecución a una anterior. Esto mantiene la aplicación en funcionamiento y minimiza las interrupciones, lo que proporciona tiempo para corregir la incompatibilidad antes de volver a la última versión del tiempo de ejecución.

Lambda no impone un límite de tiempo para el uso de una versión de ejecución determinada. Sin embargo, le recomendamos actualizar a la última versión del tiempo de ejecución lo antes posible para disfrutar de los parches de seguridad, las mejoras de rendimiento y las funciones más recientes. Lambda ofrece la opción de restaurar a una versión anterior del tiempo de ejecución únicamente como medida de mitigación temporal en el caso de que surja un problema de compatibilidad con las actualizaciones del tiempo de ejecución. Las funciones que utilizan una versión anterior del tiempo de ejecución durante un periodo prolongado pueden presentar problemas o tener un rendimiento inferior, como la caducidad del certificado, lo que puede provocar que no funcionen de forma correcta.

Puede restaurar a una versión del tiempo de ejecución de las siguientes maneras:

Para obtener más información, consulte Introducción a los controles de administración de los tiempos de ejecución de AWS Lambda en el Blog de computación de AWS.

Restaurar una versión del tiempo de ejecución mediante el modo de actualización Manual

Si utiliza el modo de actualización Auto (Automático) de la versión del tiempo de ejecución o utiliza la versión $LATEST del tiempo de ejecución, puede restaurar su versión del tiempo de ejecución mediante el modo Manual. Para la versión de la función que desea restaurar, cambie el modo de actualización de la versión del tiempo de ejecución a Manual y especifique el ARN de la versión del tiempo de ejecución anterior. Para obtener más información sobre cómo encontrar el ARN de la versión anterior del tiempo de ejecución, consulte Identificación de los cambios de versión del tiempo de ejecución.

nota

Si la versión $LATEST de la función está configurada para usar el modo Manual, no puede cambiar la arquitectura del CPU ni la versión de tiempo de ejecución que usa la función. Para realizar estos cambios, debe cambiar al modo Auto (Automático) o Function update (Actualización de funciones).

Deshacer una versión en tiempo de ejecución por medio de las versiones de funciones publicadas

Las versiones de funciones publicadas son una instantánea inmutable del código y la configuración de la función $LATEST en el momento en que se crearon. En el modo Auto (Automático), Lambda actualiza de forma automática la versión del tiempo de ejecución de las versiones de funciones publicadas durante la segunda fase del despliegue de la versión del tiempo de ejecución. En el modo de Function update (Actualización de funciones), Lambda no actualiza la versión del tiempo de ejecución de las versiones de funciones publicadas.

Por lo tanto, las versiones de funciones publicadas mediante el modo Function update (Actualización de funciones) crean una instantánea estática del código de la función, la configuración y la versión del tiempo de ejecución. Al utilizar el modo Function update (Actualización de funciones) con las versiones de las funciones, puede sincronizar las actualizaciones del tiempo de ejecución con sus implementaciones. También puede coordinar la reversión de las versiones de código, configuración y tiempo de ejecución redirigiendo el tráfico a una versión de función publicada anteriormente. Puede integrar este enfoque en su sistema de integración y entrega continuas (CI/CD) para lograr una reversión completamente automática en el caso de que se produzca una incompatibilidad entre las actualizaciones del tiempo de ejecución. Al utilizar este enfoque, debe actualizar la función con regularidad y publicar nuevas versiones de la función para obtener las actualizaciones más recientes del tiempo de ejecución. Para obtener más información, consulte Modelo de responsabilidad compartida.

Identificación de los cambios de versión del tiempo de ejecución

El número de versión del tiempo de ejecución y el ARN se registran en la línea de INIT_START registro, que Lambda emite a CloudWatch Logs cada vez que crea un nuevo entorno de ejecución. Dado que el entorno de ejecución utiliza la misma versión de tiempo de ejecución para todas las invocaciones de funciones, Lambda emite la línea de registro INIT_START solo cuando ejecuta la fase inicial. Lambda no emite esta línea de registro para cada invocación de función. Lambda envía la línea de registro a CloudWatch Logs, pero no está visible en la consola.

ejemplo Ejemplo de línea de registro INIT_START
INIT_START Runtime Version: python:3.9.v14    Runtime Version ARN: arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

En lugar de trabajar directamente con los registros, puede utilizar Amazon CloudWatch Contributor Insights para identificar las transiciones entre las versiones en tiempo de ejecución. La siguiente regla cuenta las distintas versiones del tiempo de ejecución de cada línea de registro INIT_START. Para usar la regla, sustituya el nombre del grupo de registro de ejemplo /aws/lambda/* por el prefijo adecuado para su función o grupo de funciones.

{ "Schema": { "Name": "CloudWatchLogRule", "Version": 1 }, "AggregateOn": "Count", "Contribution": { "Filters": [ { "Match": "eventType", "In": [ "INIT_START" ] } ], "Keys": [ "runtimeVersion", "runtimeVersionArn" ] }, "LogFormat": "CLF", "LogGroupNames": [ "/aws/lambda/*" ], "Fields": { "1": "eventType", "4": "runtimeVersion", "8": "runtimeVersionArn" } }

El siguiente informe de CloudWatch Contributor Insights muestra un ejemplo de transición de una versión en tiempo de ejecución, tal como se indica en la regla anterior. La línea naranja muestra la inicialización del entorno de ejecución para la versión anterior del tiempo de ejecución (python:3.9.v12) y la línea azul muestra la inicialización del entorno de ejecución para la nueva versión del tiempo de ejecución (python:3.9.v14).

El gráfico muestra la transición de una versión del tiempo de ejecución a otra.

Configuración de los ajustes de administración del tiempo de ejecución

Puede configurar los ajustes de administración del tiempo de ejecución mediante la consola de Lambda o AWS Command Line Interface (AWS CLI).

nota

Puede configurar los ajustes de administración del tiempo de ejecución por separado para cada versión de la función.

Configuración de la versión de tiempo de ejecución de Lambda (consola)
  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija el nombre de una función.

  3. En la pestaña Code (Código), en Runtime settings (Configuración del tiempo de ejecución), seleccione Edit runtime management configuration (Editar la configuración de administración del tiempo de ejecución).

  4. En Runtime management configuration (Configuración de la administración del tiempo de ejecución), elija una de las siguientes opciones:

    • Para que la función se actualice automáticamente a la última versión de ejecución, seleccione Auto (Automático).

    • Para que la función se actualice a la última versión del tiempo de ejecución al cambiarla, seleccione Function update (Actualización de función).

    • Para que la función se actualice a la última versión del tiempo de ejecución solo cuando cambie el ARN de la versión en tiempo de ejecución, seleccione Manual.

      nota

      Encontrará el ARN de la versión de tiempo de ejecución en Runtime management configuration (Configuración de la administración del tiempo de ejecución). También puede encontrar el ARN en la línea INIT_START de sus registros de funciones.

  5. Seleccione Save (Guardar).

Para configurar cómo Lambda actualiza su versión del tiempo de ejecución (AWS CLI)

Para configurar la administración del tiempo de ejecución de una función, puede utilizar el comando put-runtime-management-configAWS CLI junto con el modo de actualización del tiempo de ejecución. Cuando utilice el modo Manual, también debe proporcionar el ARN de la versión en tiempo de ejecución.

aws lambda put-runtime-management-config --function-name arn:aws:lambda:eu-west-1:069549076217:function:myfunction --update-runtime-on Manual --runtime-version-arn arn:aws:lambda:eu-west-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1

Debería ver una salida similar a esta:

{ "UpdateRuntimeOn": "Manual", "FunctionArn": "arn:aws:lambda:eu-west-1:069549076217:function:myfunction", "RuntimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1" }

Modelo de responsabilidad compartida

Lambda es responsable de seleccionar y publicar las actualizaciones de seguridad para todos los tiempos de ejecución administrados y las imágenes de contenedores compatibles. La responsabilidad de actualizar las funciones existentes para utilizar la última versión del tiempo de ejecución varía según el modo de actualización en tiempo de ejecución que utilice.

Lambda es responsable de aplicar las actualizaciones del tiempo de ejecución a todas las funciones configuradas para usar el modo de actualización Auto (Automático) del tiempo de ejecución.

En el caso de las funciones configuradas con el modo de actualización del tiempo de ejecución Function update (Actualización de función), usted es responsable de actualizar regularmente su función. Lambda es responsable de aplicar las actualizaciones del tiempo de ejecución al realizar dichas actualizaciones. Si no actualiza la función, Lambda no actualizará el tiempo de ejecución. Si no actualiza la función con regularidad, le recomendamos que la configure para que se actualice de forma automática en tiempo de ejecución para que siga recibiendo actualizaciones de seguridad.

En el caso de las funciones configuradas para usar el modo de actualización Manual en tiempo de ejecución, usted es responsable de actualizar la función para que utilice la versión más reciente en tiempo de ejecución. Le recomendamos encarecidamente que utilice este modo solo para revertir la versión en tiempo de ejecución como medida de mitigación temporal en el raro caso de que se produzca una incompatibilidad entre las actualizaciones en tiempo de ejecución. También le recomendamos que cambie al modo Auto (Automático) lo antes posible para minimizar el tiempo en el que las funciones no se parchean.

Si utiliza imágenes de contenedores para implementar sus funciones, Lambda es responsable de publicar las imágenes base actualizadas. En este caso, es responsable de reconstruir la imagen del contenedor de la función a partir de la imagen de base más reciente y volver a implementar la imagen del contenedor.

Esto se resume en la siguiente tabla:

Modo de implementación Responsabilidad de Lambda Responsabilidades del cliente
Tiempo de ejecución gestionado, modo Auto (Automático)

Publique nuevas versiones en tiempo de ejecución que contengan los parches más recientes.

Aplique parches de ejecución a las funciones existentes.

Vuelva a una versión anterior en tiempo de ejecución en el caso de que surja un problema de compatibilidad con las actualizaciones en tiempo de ejecución.
Tiempo de ejecución gestionado, modo Function update (Actualización de funciones) Publique nuevas versiones en tiempo de ejecución que contengan los parches más recientes.

Actualice las funciones con regularidad para obtener la última versión en tiempo de ejecución.

Cambie una función a modo Auto (Automático) cuando no la actualice de forma regular.

Vuelva a una versión anterior en tiempo de ejecución en el caso de que surja un problema de compatibilidad con las actualizaciones en tiempo de ejecución.

Tiempo de ejecución gestionado, modo Manual Publique nuevas versiones en tiempo de ejecución que contengan los parches más recientes.

Utilice este modo solo para revertir temporalmente el tiempo de ejecución en el caso de que surja un problema de compatibilidad con las actualizaciones en tiempo de ejecución.

Cambie las funciones al modo Auto (Automático) o Function update (Actualización de funciones) y a la última versión de ejecución lo antes posible.

Imagen de contenedor Publique nuevas imágenes de contenedores que contengan los parches más recientes. Vuelva a implementar las funciones con regularidad utilizando la imagen base del contenedor más reciente para obtener los parches más recientes.

Para obtener más información sobre la responsabilidad compartida con AWS, consulte Modelo de responsabilidad compartida en el sitio de seguridad de Nube de AWS.

Aplicaciones de alto cumplimiento

Para cumplir con los requisitos de parches, los clientes de Lambda suelen confiar en las actualizaciones automáticas en tiempo de ejecución. Si su aplicación está sujeta a estrictos requisitos de actualización de parches, es posible que desee limitar el uso de versiones anteriores en tiempo de ejecución. Puede restringir los controles de administración del tiempo de ejecución de Lambda mediante el uso de AWS Identity and Access Management (IAM) para denegar a los usuarios de su AWS cuenta el acceso a la operación de la PutRuntimeManagementConfigAPI. Esta operación se utiliza para elegir el modo de actualización en tiempo de ejecución de una función. Al denegar el acceso a esta operación, todas las funciones pasarán a modo Auto (Automático) de forma predeterminada. Puede aplicar esta restricción en toda su organización mediante políticas de control de servicios (SCP). En caso de que deba revertir una función a una versión de tiempo de ejecución anterior, puede conceder una excepción de política de forma puntual. case-by-case