

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.

# Utilisation des extensions Lambda pour augmenter vos fonctions Lambda
<a name="lambda-extensions"></a>

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](https://aws.amazon.com/lambda/partners/), ou [créer vos propres extensions Lambda](runtimes-extensions-api.md).

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](lambda-runtimes.md) 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 de plus amples informations, veuillez consulter [Modification de l’environnement d’exécution](runtimes-modify.md).

Vous pouvez ajouter des extensions à une fonction à l'aide de la console Lambda, du AWS Command Line Interface (AWS CLI) ou des services et outils d'infrastructure en tant que code (IaC) tels que 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](https://aws.amazon.com/lambda/pricing/). Pour obtenir des informations sur la tarification des extensions de partenaires, consultez les sites web de ces partenaires. Consultez [Partenaires des extensions AWS Lambda](extensions-api-partners.md) pour obtenir la liste des extensions partenaires officielles.

**Topics**
+ [Environnement d’exécution](#using-extensions-env)
+ [Impact sur les performances et les ressources](#using-extensions-reg)
+ [Permissions](#using-extensions-permissions)
+ [Configuration des extensions Lambda](extensions-configuration.md)
+ [Partenaires des extensions AWS Lambda](extensions-api-partners.md)
+ [Utilisation de l’API d’extensions Lambda pour créer des extensions](runtimes-extensions-api.md)
+ [Accès aux données de télémétrie en temps réel pour les extensions à l’aide de l’API de télémétrie](telemetry-api.md)

## Environnement d’exécution
<a name="using-extensions-env"></a>

Lambda invoque votre fonction dans un [environnement d’exécution](lambda-runtime-environment.md) 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](provisioned-concurrency.md).

  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](snapstart.md) 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’environnement d’exécution](snapstart-runtime-hooks.md) avant le point de contrôle, le code s’exécute alors à la fin de la phase `Init`.
+ `Restore`(SnapStart uniquement) : Lorsque vous appelez une [SnapStart](snapstart.md)fonction 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](snapstart-runtime-hooks.md) après restauration, le code s’exécute à la fin de la phase `Restore`. Vous êtes facturé pour la durée des hooks d’exécution après restauration. L’exécution doit se charger et les hooks d’exécution après restauration 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](lambda-runtime-environment.md#runtimes-lifecycle-invoke)).
+ `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
<a name="using-extensions-reg"></a>

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`](monitoring-metrics.md). 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.

**Note**  
La métrique `MaxMemoryUsed` est l’une des [métriques collectées par Lambda Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-metrics.html) et non une métrique native Lambda.

## Permissions
<a name="using-extensions-permissions"></a>

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 fichier .zip, vous pouvez créer un CloudFormation modèle afin de simplifier la tâche consistant à associer la même configuration d'extension, y compris les autorisations Gestion des identités et des accès AWS (IAM), à plusieurs fonctions.