

# Modificación del entorno de tiempo de ejecución
<a name="runtimes-modify"></a>

Puede utilizar [extensiones internas](lambda-extensions.md) 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](configuration-envvars.md) específicas del lenguaje que puede configurar para agregar opciones y herramientas al tiempo de ejecución. Lambda también proporciona [scripts de encapsulador](#runtime-wrapper), 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
<a name="runtimes-envvars"></a>

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`](https://docs.aws.amazon.com/lambda/latest/dg/java-customization.html#java-tool-options).
+ `NODE_OPTIONS`: disponible en los [tiempos de ejecución de Node.js](lambda-nodejs.md).
+ `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
<a name="runtime-wrapper"></a>

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](lambda-runtimes.md) nativos. Los scripts de encapsulador no son compatibles con [Tiempos de ejecución exclusivos del sistema operativo](runtimes-provided.md) (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
<a name="runtime-wrapper-example"></a>

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**

1. Cree un directorio para la capa:

   ```
   mkdir -p python-wrapper-layer/bin
   cd python-wrapper-layer/bin
   ```

1. En el directorio `bin`, pegue el siguiente código en un nuevo archivo denominado `importtime_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[@]}"
   ```

1. Conceda permisos ejecutables al script:

   ```
   chmod +x importtime_wrapper
   ```

1. Cree un archivo .zip para la capa:

   ```
   cd ..
   zip -r ../python-wrapper-layer.zip .
   ```

1. Compruebe que el archivo .zip tiene la siguiente estructura de directorios:

   ```
   python-wrapper-layer.zip
   └ bin
       └ importtime_wrapper
   ```

1. [Cree una capa](creating-deleting-layers.md#layers-create) con el paquete .zip.

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

   1. Abra la [consola de Lambda](https://console.aws.amazon.com/lambda).

   1. Seleccione **Creación de función**.

   1. Escriba un **nombre para la función**.

   1. En **Tiempo de ejecución**, elija la opción de tiempo de ejecución de Phyton **Último compatible**.

   1. Seleccione **Creación de función**.

1. Agregue la capa a la función.

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

   1. Desplácese hacia abajo hasta la sección **Capas** y, a continuación, elija **Agregar una capa**.

   1. En **Origen de la capa**, seleccione **Capas personalizadas** y, a continuación, elija su capa de la lista desplegable **Capas personalizadas**.

   1.  En **Version (Versión)**, elija **1**.

   1. Elija **Añadir**.

1. Agregue la variable de entorno del encapsulador.

   1. Elija la pestaña **Configuración** y, a continuación, elija **Variables de entorno**.

   1. En **Variables de entorno**, elija **Editar**.

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

   1. En **Clave**, escriba `AWS_LAMBDA_EXEC_WRAPPER`.

   1. En **Valor**, introduzca `/opt/bin/importtime_wrapper` (`/opt/` \$1 la estructura de carpetas de la capa .zip).

   1. Seleccione **Save** (Guardar).

1. Pruebe el script de encapsulador.

   1. Elija la pestaña **Test** (Prueba).

   1. En **Evento de prueba**, elija **Probar**. No es necesario crear un evento de prueba; el evento predeterminado es suficiente.

   1. 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
      ```