AWS Lambda
Manuel du développeur

Contexte d'exécution d'AWS Lambda

Quand AWS Lambda exécute votre fonction Lambda, il alloue et gère les ressources nécessaires à l'exécution de votre fonction Lambda. Lorsque vous créez une fonction Lambda, vous spécifiez les informations de configuration, telles que la quantité de mémoire et sa durée maximale d'exécution. Lorsqu'une fonction Lambda est appelée, AWS Lambda lance un contexte d'exécution basé sur les paramètres de configuration que vous fournissez. Le contexte d'exécution est un environnement d'exécution temporaire qui initialise toutes les dépendances externes du code de votre fonction Lambda, telles que les connexions de base de données et les points de terminaison HTTP. Les appels suivants bénéficient ainsi de meilleures performances, car il n'y a pas besoin de « démarrage à froid » ou d'initialisation de ces dépendances externes, comme expliqué ci-dessous.

La configuration d'un contexte d'exécution et l'amorçage nécessaire prennent du temps, ce qui implique une certaine latence chaque fois que la fonction Lambda est appelée. En général, vous observez cette latence lorsqu'une fonction Lambda est appelée pour la première fois ou après sa mise à jour, car AWS Lambda essaie de réutiliser le contexte d'exécution pour les appels ultérieurs de la fonction Lambda.

Après l'exécution d'une fonction Lambda, AWS Lambda gère le contexte d'exécution pendant un certain temps en prévision d'un autre appel de la fonction Lambda. En effet, le service gèle le contexte d'exécution une fois l'exécution d'une fonction Lambda terminée, et le débloque si AWS Lambda choisit de le réutiliser lorsque la fonction Lambda est de nouveau appelée. Cette approche de réutilisation du contexte d'exécution présente les conséquences suivantes :

  • Les objets déclarés en dehors de la méthode de gestionnaire de la fonction restent initialisés, ce qui fournit une optimisation supplémentaire lorsque la fonction est appelée à nouveau. Par exemple, si la fonction Lambda établit une connexion de base de données, au lieu de rétablir la connexion, la connexion d'origine est utilisée dans les appels suivants. Vous pouvez ajouter une logique dans le code pour vérifier s'il existe une connexion avant d'en créer une.

  • Chaque contexte d'exécution fournit 512 MB d'espace disque supplémentaire dans le répertoire /tmp. Le contenu du répertoire est préservé lorsque le contexte d'exécution est gelé, fournissant ainsi un cache temporaire qui peut servir à plusieurs appels. Vous pouvez ajouter du code pour vérifier si le cache contient les données que vous avez stockées. Pour en savoir plus sur les limites appliquées aux déploiements, consultez Limites AWS Lambda.

  • Les processus en arrière-plan ou les rappels initiés par la fonction Lambda qui ne se terminent pas lorsque la fonction prend fin reprennent si AWS Lambda choisit de réutiliser le contexte d'exécution. Assurez-vous que les processus d'arrière-plan ou les rappels (en cas d'utilisation de Node.js) dans votre code se terminent avant que l'exécution du code ne prenne fin.

Lorsque vous écrivez le code de la fonction Lambda, ne partez pas du principe qu'AWS Lambda réutilise automatiquement le contexte d'exécution pour les appels de fonction suivants. D'autres facteurs peuvent obliger AWS Lambda à créer un nouveau contexte d'exécution, ce qui peut entraîner des résultats inattendus, tels que des échecs de connexion à la base de données.