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 en tant que couche Lambda

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
  2. 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[@]}"
  3. Fournissez au script des autorisations d’exécution :

    chmod +x importtime_wrapper
  4. Créez un fichier .zip pour la couche :

    cd .. zip -r ../python-wrapper-layer.zip .
  5. Vérifiez que votre fichier .zip possède la structure de répertoire suivante :

    python-wrapper-layer.zip
    └ bin
        └ importtime_wrapper
  6. Créez une couche à l’aide du package .zip.

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

    1. Ouvrez la console Lambda.

    2. Sélectionnez Créer une fonction.

    3. Indiquez un Function name (Nom de fonction).

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

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

  8. Ajoutez la couche à votre fonction.

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

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

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

    4. Pour Version, choisissez 1.

    5. Choisissez Ajouter.

  9. Ajoutez la variable d’environnement encapsuleur.

    1. Choisissez Configuration, puis Variables d’environnement.

    2. Sous Variables d’environnement, choisissez Modifier.

    3. Choisissez Ajouter une variable d’environnement.

    4. Pour Clé, entrez AWS_LAMBDA_EXEC_WRAPPER.

    5. Dans Valeur, saisissez /opt/bin/importtime_wrapper (/opt/ + la structure de dossiers de votre couche .zip).

    6. Choisissez Save (Enregistrer).

  10. Testez le script encapsuleur.

    1. Choisissez l’onglet Test.

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

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