Modificación del entorno de tiempo de ejecución - AWS Lambda

Modificación del entorno de tiempo de ejecución

Puede utilizar extensiones internas para modificar el proceso de tiempo de ejecución. Las extensiones internas no son procesos independientes, se ejecutan como parte del proceso de tiempo de ejecución.

Lambda proporciona específica variables de entorno específicas del lenguaje que puede configurar para agregar opciones y herramientas al tiempo de ejecución. Lambda también proporciona scripts de encapsulador, que permiten a Lambda delegar el inicio del tiempo de ejecución a su script. Puede crear un script de encapsulador para personalizar el comportamiento de inicio del tiempo de ejecución.

Variables de entorno específicas del lenguaje

Lambda admite formas de solo configuración para habilitar la precarga del código durante la inicialización de la función a través de las siguientes variables de entorno específicas del lenguaje:

  • JAVA_TOOL_OPTIONS: en Java, Lambda admite esta variable de entorno para establecer variables de línea de comandos adicionales en Lambda. Esta variable de entorno le permite especificar la inicialización de herramientas, específicamente el lanzamiento de agentes de lenguaje de programación nativo o Java utilizando las opciones agentlib o javaagent. Para obtener más información, consulte la variable de entorno de JAVA_TOOL_OPTIONS.

  • NODE_OPTIONS: disponible en los tiempos de ejecución de Node.js.

  • DOTNET_STARTUP_HOOKS: en .NET Core 3.1 y superior, esta variable de entorno especifica una ruta a un ensamblado (dll) que Lambda puede usar.

El uso de variables de entorno específicas del lenguaje es la forma preferida de establecer propiedades de inicio.

Scripts de encapsulador

Puede crear un script del encapsulador para personalizar el comportamiento de inicio en tiempo de ejecución de su función de Lambda. Un script de encapsulador le permite establecer parámetros de configuración que no se pueden establecer mediante variables de entorno específicas del lenguaje.

nota

Las invocaciones pueden producir un error si el script de encapsulador no comienza correctamente el proceso de tiempo de ejecución.

Los scripts de encapsulador son compatibles con todos los tiempos de ejecución de Lambda nativos. Los scripts de encapsulador no son compatibles con Tiempos de ejecución exclusivos del sistema operativo (la familia de tiempos de ejecución de provided).

Cuando utiliza un script de encapsulador para su función, Lambda inicia el tiempo de ejecución utilizando el script. Lambda envía al script la ruta al intérprete y todos los argumentos originales para el inicio de tiempo de ejecución estándar. El script puede ampliar o transformar el comportamiento de inicio del programa. Por ejemplo, el script puede inyectar y modificar argumentos, establecer variables de entorno o capturar métricas, errores y otra información de diagnóstico.

Para especificar el script mediante el establecimiento del valor de la variable de entorno AWS_LAMBDA_EXEC_WRAPPER como la ruta del sistema de archivos de un binario o script ejecutable.

Ejemplo: crear y usar un script de encapsulador con Python 3.8

En el ejemplo siguiente, se crea un script de encapsulador para comenzar el intérprete de Python con la opción -X importtime. Cuando ejecuta la función, Lambda genera una entrada de registro para mostrar la duración del tiempo de importación para cada importación.

Para crear y usar un script de encapsulador con Python 3.8
  1. Para crear el script de encapsulador, pegue el código siguiente en un archivo denominado importtime_wrapper:

    #!/bin/bash # the path to the interpreter and all of the originally intended arguments args=("$@") # the extra options to pass to the interpreter extra_args=("-X" "importtime") # insert the extra options args=("${args[@]:0:$#-1}" "${extra_args[@]}" "${args[@]: -1}") # start the runtime with the extra options exec "${args[@]}"
  2. Para conceder permisos ejecutables al script, escriba chmod +x importtime_wrapper desde la línea de comandos.

  3. Implemente el script como una capa de Lambda.

  4. Luego, se crea una función con la consola de Lambda.

    1. Abra la consola de Lambda.

    2. Elija Crear función.

    3. En Basic information (Información básica), para Function name (Nombre de función), escriba wrapper-test-function.

    4. En Tiempo de ejecución, seleccione Python 3.8.

    5. Seleccione Crear función.

  5. Agregue la capa a la función.

    1. Elija su función y, a continuación, elija Código si aún no está seleccionada.

    2. Elija Add a layer (Añadir una capa).

    3. En Choose a layer (Elegir una capa), elija el Name (Nombre) y la Version (Versión) de la capa compatible que ha creado antes.

    4. Elija Añadir.

  6. Agregue el código y la variable de entorno a la función.

    1. En el editor de código de función, pegue el siguiente código de función:

      import json def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
    2. Seleccione Guardar.

    3. En Variables de entorno, elija Editar.

    4. Elija Add environment variable (Añadir variable de entorno).

    5. En Clave, escriba AWS_LAMBDA_EXEC_WRAPPER.

    6. En Valor, introduzca /opt/importtime_wrapper.

    7. Seleccione Guardar.

  7. Para ejecutar la función, elija Test (Prueba).

    Debido a que el script de encapsulador comenzó el intérprete de Python con la opción -X importtime, los registros muestran el tiempo necesario para cada importación. Por ejemplo:

    ... 2020-06-30T18:48:46.780+01:00 import time: 213 | 213 | simplejson 2020-06-30T18:48:46.780+01:00 import time: 50 | 263 | simplejson.raw_json ...