Modification de l’environnement d’exécution - AWS Lambda

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

Vous pouvez utiliser des extensions internes 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 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 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

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.

  • NODE_OPTIONS— Disponible dans les environnements d’exécution de Node.js.

  • 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

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 natifs. Les scripts Wrapper ne sont pas pris en charge sur Exécutions uniquement basées sur le système d'exploitation (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 avec Python 3.8

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 avec Python 3.8
  1. Pour créer le script encapsuleur, collez le code suivant dans un fichier nommé 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. Pour donner au script des autorisations d’exécution, entrez chmod +x importtime_wrapper à partir de la ligne de commande.

  3. Déployez le script en tant que couche Lambda.

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

    1. Ouvrez la console Lambda.

    2. Sélectionnez Create function (Créer une fonction).

    3. Sous Informations de base, pour Nom de la fonction, entrez wrapper-test-function.

    4. Pour Environnement d’exécution, sélectionnez Python 3.8.

    5. Sélectionnez Create function (Créer une fonction).

  5. Ajoutez la couche à votre fonction.

    1. Choisissez votre fonction, puis choisissez l’option Code si elle n’est pas déjà sélectionnée.

    2. Choisissez Add a layer (Ajouter une couche).

    3. Sous Choose a layer (Choisir une couche), choisissez le nom et la version de la couche compatible que vous avez créée précédemment.

    4. Choisissez Ajouter.

  6. Ajoutez le code et la variable d’environnement à votre fonction.

    1. Dans l’éditeur de code, de fonction, collez le code de fonction suivant :

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

    3. Sous Variables d’environnement, choisissez Modifier.

    4. Choisissez Ajouter une variable d’environnement.

    5. Pour Clé, entrez AWS_LAMBDA_EXEC_WRAPPER.

    6. Pour le champ Value (Valeur), entrez /opt/importtime_wrapper.

    7. Choisissez Enregistrer.

  7. Pour exécuter la fonction, choisissez Tester.

    Votre script encapsuleur ayant lancé l’interpréteur Python avec l’option -X importtime, les journaux indiquent le temps requis pour chaque importation. Exemples :

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