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 opcionesagentlib
ojavaagent
. Para obtener más información, consulte la variable de entorno deJAVA_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 como capa de Lambda
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.
Cómo crear y usar un script de encapsulador como capa
-
Cree un directorio para la capa:
mkdir -p
python-wrapper-layer/bin
cdpython-wrapper-layer/bin
-
En el directorio
bin
, pegue el siguiente código en un nuevo archivo denominadoimporttime_wrapper
. Este es el script de encapsulador.#!/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[@]}"
-
Conceda permisos ejecutables al script:
chmod +x
importtime_wrapper
-
Cree un archivo .zip para la capa:
cd .. zip -r ../
python-wrapper-layer.zip
. -
Compruebe que el archivo .zip tiene la siguiente estructura de directorios:
python-wrapper-layer.zip └ bin └ importtime_wrapper
-
Cree una capa con el paquete .zip.
-
Luego, se crea una función con la consola de Lambda.
-
Abra la consola de Lambda
. -
Seleccione Creación de función.
-
Escriba un nombre para la función.
-
En Tiempo de ejecución, elija la opción de tiempo de ejecución de Phyton Último compatible.
-
Seleccione Creación de función.
-
-
Agregue la capa a la función.
-
Elija su función y, a continuación, elija la pestaña Código si aún no está seleccionada.
-
Desplácese hacia abajo hasta la sección Capas y, a continuación, elija Agregar una capa.
-
En Origen de la capa, seleccione Capas personalizadas y, a continuación, elija su capa de la lista desplegable Capas personalizadas.
-
En Version (Versión), elija 1.
-
Elija Añadir.
-
-
Agregue la variable de entorno del encapsulador.
-
Elija la pestaña Configuración y, a continuación, elija Variables de entorno.
-
En Variables de entorno, elija Editar.
-
Elija Add environment variable (Añadir variable de entorno).
-
En Clave, escriba
AWS_LAMBDA_EXEC_WRAPPER
. -
En Valor, introduzca
/opt/bin/importtime_wrapper
(/opt/
+ la estructura de carpetas de la capa .zip). -
Seleccione Save (Guardar).
-
-
Pruebe el script de encapsulador.
-
Elija la pestaña Test (Prueba).
-
En Evento de prueba, elija Probar. No es necesario crear un evento de prueba; el evento predeterminado es suficiente.
-
Desplácese hacia abajo hasta Resultado de registros. 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:532 | collections import time: 63 | 63 | _functools import time: 1053 | 3646 | functools import time: 2163 | 7499 | enum import time: 100 | 100 | _sre import time: 446 | 446 | re._constants import time: 691 | 1136 | re._parser import time: 378 | 378 | re._casefix import time: 670 | 2283 | re._compiler import time: 416 | 416 | copyreg
-