Utilisation des extensions Lambda - AWS Lambda

Utilisation des extensions Lambda

Vous pouvez utiliser des extensions Lambda pour augmenter vos fonctions Lambda. Par exemple, utilisez des extensions Lambda pour intégrer des fonctions à vos outils de surveillance, d'observabilité, de sécurité et de gouvernance préférés. Vous pouvez choisir parmi un vaste éventail d'outils fournis par des partenaires AWS Lambda, ou créer vos propres extensions Lambda.

Lambda prend en charge les extensions externes et internes. Une extension externe s'exécute en tant que processus indépendant dans l'environnement d'exécution et continue à s'exécuter une fois l'appel de fonction entièrement traité. Étant donné que les extensions s'exécutent sous forme de processus distincts, vous pouvez les écrire dans un langage différent de la fonction. Tous les Environnements d’exécution (runtimes) Lambda prennent en charge des extensions.

Une extension interne s'exécute dans le cadre du processus de runtime. Votre fonction accède aux extensions internes via des scripts encapsuleurs ou des mécanismes internes tels que JAVA_TOOL_OPTIONS. Pour plus d'informations, consultez Modification de l'environnement d'exécution.

Vous pouvez ajouter des extensions à une fonction à l'aide de la console Lambda, de l'AWS Command Line Interface (AWS CLI) ou de services et outils d'infrastructure en tant que code (infrastructure as code, IaC) tels que AWS CloudFormation, AWS Serverless Application Model (AWS SAM) et Terraform.

Vous êtes facturé pour le temps d'exécution que l'extension consomme (par incréments de 1 ms). Pour obtenir des informations sur la tarification des extensions, consultez Tarification AWS Lambda. Pour obtenir des informations sur la tarification des extensions de partenaires, consultez les sites web de ces partenaires. Aucun coût n'est facturé pour l'installation de vos propres extensions.

Environnement d'exécution

Lambda appelle votre fonction dans un environnement d'exécution qui fournit un environnement d'exécution sécurisé et isolé. L'environnement d'exécution gère les ressources requises pour exécuter votre fonction et prend en charge le cycle de vie pour l'exécution de la fonction et les extensions associées à votre fonction.

Le cycle de vie de l'environnement d'exécution comprend les phases suivantes :

  • Init : au cours de cette phase, Lambda crée ou libère un environnement d'exécution avec les ressources configurées, télécharge le code pour la fonction et toutes les couches, initialise les extensions, initialise l'exécution et exécute le code d'initialisation de la fonction (code en dehors du gestionnaire principal). La phase Init se produit soit lors du premier appel, soit avant les appels de fonction si vous avez activé la simultanéité approvisionnée.

    La phase Init est fractionnée en trois sous-phases : Extension init, Runtime init et Function init. Ces sous-phases garantissent que toutes les extensions et l'exécution accomplissent leurs tâches de configuration avant l'exécution du code de la fonction.

  • Invoke : au cours de cette phase, Lambda appelle le gestionnaire de la fonction. Une fois l'exécution de la fonction terminée, Lambda se prépare à gérer un autre appel de fonction.

  • Shutdown: cette phase se déclenche si la fonction Lambda ne reçoit aucun appel pendant un certain temps. Au cours de la phase Shutdown, Lambda arrête l'exécution, alerte les extensions pour les laisser s'arrêter proprement, puis supprime l'environnement. Lambda envoie à chaque extension un événement Shutdown indiquant que l'environnement est sur le point d'être arrêté.

Au cours de la phase Init, Lambda extrait des couches contenant des extensions dans le répertoire /opt dans l'environnement d'exécution. Lambda recherche des extensions dans le répertoire /opt/extensions/, interprète chaque fichier comme un fichier d'amorçage exécutable pour le lancement de l'extension, puis démarre toutes les extensions en parallèle.

Impact sur les performances et les ressources

La taille des extensions de votre fonction compte dans la limite de taille du package de déploiement. Pour une archive de fichiers .zip, la taille totale après décompression de la fonction et de toutes les extensions ne peut pas dépasser la limite de taille du package de déploiement fixée à 250 Mo.

Les extensions peuvent avoir un impact sur les performances de votre fonction car elles partagent des ressources telles que le processeur, la mémoire et le stockage. Par exemple, si une extension effectue des opérations intensives de calcul, il se peut que vous observiez une augmentation de la durée d'exécution de la fonction.

Chaque extension doit terminer son initialisation avant que Lambda appelle la fonction. Par conséquent, une extension qui consomme un temps d'initialisation important peut augmenter la latence de l'appel de fonction.

Pour mesurer le temps supplémentaire que prend l'extension après l'exécution de la fonction, vous pouvez utiliser lamétrique de fonction PostRuntimeExtensionsDuration. Pour mesurer l'augmentation de la mémoire utilisée, vous pouvez utiliser la métrique MaxMemoryUsed. Pour comprendre l'impact d'une extension spécifique, vous pouvez exécuter différentes versions de vos fonctions côte à côte.

Autorisations

Les extensions ont accès aux mêmes ressources que les fonctions. Étant donné que les extensions sont exécutées dans le même environnement que la fonction, les autorisations sont partagées entre la fonction et l'extension.

Pour une archive de fichiers .zip, vous pouvez créer un modèle AWS CloudFormation, afin de simplifier la tâche consistant à attacher la même configuration d'extension, y compris les autorisations AWS Identity and Access Management (IAM), à plusieurs fonctions.

Configuration des extensions (archive de fichiers .zip)

Vous pouvez ajouter une extension à votre fonction en tant que couche Lambda. L'utilisation de couches vous permet de partager des extensions au sein de votre organisation ou avec l'ensemble de la communauté des développeurs Lambda. Vous pouvez ajouter une ou plusieurs extensions à une couche. Vous pouvez enregistrer jusqu'à 10 extensions pour une fonction.

Ajoutez l'extension à votre fonction en utilisant la même méthode que pour n'importe quelle couche. Pour plus d'informations, consultez Utilisation de couches avec votre fonction Lambda.

Ajout d'une extension à votre fonction (console)

  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Sélectionnez l'onglet Code s'il n'est pas déjà sélectionné.

  4. Sous Layers (Couches), sélectionnez Edit (Modifier).

  5. Pour Choose a layer (Choisir une couche), sélectionnez Specify an ARN (Spécifier un nom ARN).

  6. Pour Specify an ARN (Spécifier un nom ARN), entrez le nom ARN (Amazon Resource Name) d'une couche d'extension.

  7. Choisissez Add (Ajouter).

Utilisation des extensions dans les images de conteneur

Vous pouvez ajouter des extensions à votre image de conteneur. Le paramètre d'image de conteneur ENTRYPOINT détermine le processus principal de la fonction. Configurez le paramètre ENTRYPOINT dans le Dockerfile ou en tant que remplacement dans la configuration de la fonction.

Vous pouvez exécuter plusieurs traitements au sein d'un conteneur. Lambda gère le cycle de vie du traitement principal et tous les traitements supplémentaires. Lambda utilise l'API des extensions pour gérer le cycle de vie des extensions.

Exemple : ajout d'une extension externe

Une extension externe s'exécute dans un processus distinct de la fonction Lambda. Lambda démarre un traitement pour chaque extension dans le répertoire /opt/extensions/. Lambda utilise l'API d'extensions pour gérer le cycle de vie des extensions. Une fois l'exécution de la fonction terminée, Lambda envoie un événement Shutdown à chaque extension externe.

Exemple d'ajouter une extension externe à une image de base Python

FROM public.ecr.aws/lambda/python:3.8 # Copy and install the app COPY /app /app WORKDIR /app RUN pip install -r requirements.txt # Add an extension from the local directory into /opt ADD my-extension.zip /opt CMD python ./my-function.py

Étapes suivantes

Pour de plus amples informations sur les extensions, nous vous recommandons les ressources suivantes :