

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Modification de l’environnement d’exécution
<a name="runtimes-modify"></a>

Vous pouvez utiliser des [extensions internes](lambda-extensions.md) pour modifier le processus de runtime. Les extensions internes ne sont pas des processus séparés. Elles s’exécutent dans le cadre du processus du runtime.

Lambda fournit des [variables d’environnement](configuration-envvars.md) spécifiques du langage, que vous pouvez définir pour ajouter des options et des outils au runtime. Lambda intègre également des [scripts encapsuleurs](#runtime-wrapper) qui lui permettent de déléguer le démarrage du runtime à votre script. Vous pouvez créer un script encapsuleur pour personnaliser le comportement de démarrage du runtime.

## Variables d’environnement spécifiques à un langage
<a name="runtimes-envvars"></a>

Lambda prend en charge des méthodes de configuration pour permettre le pré-chargement de code lors de l’initialisation de la fonction via les variables d’environnement spécifiques du langage suivantes :
+ `JAVA_TOOL_OPTIONS` : sur Java, Lambda prend en charge cette variable d’environnement pour définir des variables de ligne de commande supplémentaires dans Lambda. Cette variable d’environnement vous permet de spécifier l’initialisation des outils, en particulier le lancement d’agents de langage de programmation natifs ou Java à l’aide des options `agentlib` ou `javaagent`. Pour plus d’informations, veuillez consulter la rubrique [Variables d’environnement `JAVA_TOOL_OPTIONS`](https://docs.aws.amazon.com/lambda/latest/dg/java-customization.html#java-tool-options).
+ `NODE_OPTIONS`— Disponible dans les environnements d’[exécution de Node.js.](lambda-nodejs.md)
+ `DOTNET_STARTUP_HOOKS` – Sur .NET Core 3.1 et versions ultérieures, cette variable d’environnement précise le chemin d’accès d’un assembly (dll) que Lambda peut utiliser.

L’utilisation de variables d’environnement spécifiques à un langage est la méthode privilégiée pour définir les propriétés de démarrage.

## Scripts encapsuleurs
<a name="runtime-wrapper"></a>

Vous pouvez créer un *script encapsuleur* pour personnaliser le comportement de démarrage du runtime de votre fonction Lambda. Un script encapsuleur vous permet de définir des paramètres de configuration qui ne peuvent pas être définis via des variables d’environnement spécifiques à un langage.

**Note**  
Les invocations peuvent échouer si le script encapsuleur ne démarre pas correctement le processus de runtime.

Les scripts encapsulateurs sont pris en charge sur tous les [environnements d’exécution Lambda](lambda-runtimes.md) natifs. Les scripts Wrapper ne sont pas pris en charge sur [Exécutions uniquement basées sur le système d’exploitation](runtimes-provided.md) (famille d’environnements d’exécution `provided`).

Lorsque vous utilisez un script encapsuleur pour votre fonction, Lambda démarre le runtime en utilisant votre script. Lambda envoie à votre script le chemin d’accès de l’interpréteur et tous les arguments d’origine pour le démarrage du runtime standard. Votre script peut étendre ou transformer le comportement de démarrage du programme. Par exemple, le script peut injecter et modifier des arguments, définir des variables d’environnement ou capturer des métriques, des erreurs et d’autres informations de diagnostic.

Vous spécifiez le script en définissant la valeur de la variable d’environnement `AWS_LAMBDA_EXEC_WRAPPER` comme étant le chemin vers le système de fichiers d’un fichier binaire ou d’un script exécutable.

### Exemple : Créer et utiliser un script encapsuleur en tant que couche Lambda
<a name="runtime-wrapper-example"></a>

Dans l’exemple suivant, vous créez un script encapsuleur pour démarrer l’interpréteur Python avec l’option `-X importtime`. Lorsque vous exécutez la fonction, Lambda génère une entrée de journal pour indiquer la durée de chaque importation.

**Pour créer et utiliser un script encapsuleur en tant que couche**

1. Créez un répertoire pour la couche :

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

1. Dans le répertoire `bin`, collez le code suivant dans un nouveau fichier nommé `importtime_wrapper`. Il s’agit du script encapsuleur.

   ```
   #!/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. Fournissez au script des autorisations d’exécution :

   ```
   chmod +x importtime_wrapper
   ```

1. Créez un fichier .zip pour la couche :

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

1. Vérifiez que votre fichier .zip possède la structure de répertoire suivante :

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

1. [Créez une couche](creating-deleting-layers.md#layers-create) à l’aide du package .zip.

1. Créez une fonction à l’aide de la console Lambda.

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

   1. Choisissez **Créer une fonction**.

   1. Indiquez un **Function name** (Nom de fonction).

   1. Pour **Environnement d’exécution**, choisissez le dernier environnement d’exécution Python pris en charge (**Dernier pris en charge**).

   1. Choisissez **Créer une fonction**.

1. Ajoutez la couche à votre fonction.

   1. Choisissez votre fonction, puis choisissez l’onglet **Code** s’il n’est pas déjà sélectionné.

   1. Faites défiler jusqu’à la section **Couches**, puis choisissez **Ajouter une couche**.

   1. Pour **Source de la couche**, sélectionnez **Couches personnalisées**, puis choisissez votre couche dans la liste déroulante **Couches personnalisées**.

   1.  Pour **Version**, choisissez **1**.

   1. Choisissez **Ajouter**.

1. Ajoutez la variable d’environnement encapsuleur.

   1. Choisissez **Configuration**, puis **Variables d’environnement**.

   1. Sous **Variables d’environnement**, choisissez **Modifier**.

   1. Choisissez **Ajouter une variable d’environnement**.

   1. Pour **Clé**, entrez `AWS_LAMBDA_EXEC_WRAPPER`.

   1. Dans **Valeur**, saisissez `/opt/bin/importtime_wrapper` (`/opt/` \$1 la structure de dossiers de votre couche .zip).

   1. Choisissez **Enregistrer**.

1. Testez le script encapsuleur.

   1. Choisissez l’onglet **Test**.

   1. Sous **Événement de test**, choisissez **Tester**. Il n’est pas nécessaire de créer un événement de test, l’événement par défaut fonctionnera.

   1. Faites défiler la page jusqu’à **Sortie de journal**. Votre script encapsuleur ayant lancé l’interpréteur Python avec l’option `-X importtime`, les journaux indiquent le temps requis pour chaque importation. Exemples :

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