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

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’invocation 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). Aucun coût n’est facturé pour l’installation de vos propres extensions. 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. Consultez AWS Lambda partenaires d'extensions pour obtenir la liste des extensions partenaires officielles.

Pour obtenir un didacticiel sur les extensions et la manière de les utiliser avec vos fonctions Lambda, consultez l’Atelier sur les extensions AWS Lambda.

Environnement d’exécution

Lambda invoque 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 de la première invocation, soit avant invocations de fonctions 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.

    Lorsque Lambda SnapStart est activé, la phase Init se produit lorsque vous publiez une version de la fonction. Lambda enregistre un instantané de l’état de la mémoire et du disque de l’environnement d’exécution initialisé, fait persister l’instantané chiffré et le met en cache pour un accès à faible latence. Si vous avez un hook d’exécution beforeCheckpoint, le code s’exécute à la fin de la phase Init.

  • Restore(SnapStart uniquement) : Lorsque vous appelez une SnapStartfonction pour la première fois et que celle-ci prend de l'ampleur, Lambda reprend les nouveaux environnements d'exécution à partir de l'instantané persistant au lieu d'initialiser la fonction à partir de zéro. Si vous avez un hook d’exécution afterRestore(), le code s’exécute à la fin de la phase Restore. Vous êtes facturé pour la durée des hooks d’exécution afterRestore(). L’exécution (JVM) doit se charger et les hooks d’exécution afterRestore() doivent se terminer dans le délai imparti (10 secondes). Sinon, vous obtiendrez un SnapStartTimeoutException. Lorsque la phase Restore se termine, Lambda invoque le gestionnaire de fonction (Phase d’invocation).

  • Invoke : au cours de cette phase, Lambda invoque le gestionnaire de la fonction. Une fois l’exécution de la fonction terminée, Lambda se prépare à gérer une autre invocation de fonction.

  • Shutdown: cette phase se déclenche si la fonction Lambda ne reçoit aucune invocation 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 invoque la fonction. Par conséquent, une extension qui consomme un temps d’initialisation important peut augmenter la latence de l’invocation de la fonction.

Pour mesurer le temps supplémentaire que prend l’extension après l’exécution de la fonction, vous pouvez utiliser la mé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.