Comment puis-je résoudre les erreurs de délai d’expiration d'appel d'une fonction Lambda ?

Lecture de 8 minute(s)
0

Ma fonction AWS Lambda a expiré par intermittence, même si je n'ai déployé aucune modification de code.

Résolution

Les fonctions Lambda peuvent expirer pour diverses raisons. Pour résoudre les problèmes d'expiration des fonctions Lambda, déterminez d'abord la cause du problème. Puis, corrigez le problème en fonction de votre cas d'utilisation.

Vérifier que votre fonction Lambda a expiré

Pour récupérer les identifiants de requête de tous les appels ayant expiré, recherchez la phrase Expiration de la tâche dans le groupe de journaux Amazon CloudWatch de la fonction. Puis, utilisez les ID de requête des appels dont le délai d'expiration est écoulé pour récupérer les journaux complets de chaque expiration d'appel.

Pour obtenir des instructions, consultez la section Comment puis-je déterminer si le délai de ma fonction Lambda expire ?

Identifier la cause de l’expiration de votre fonction Lambda

Utilisez une ou plusieurs des méthodes suivantes pour identifier le point de défaillance à l'origine de l'arrêt de votre fonction :

Consulter les journaux CloudWatch pour Lambda

Vous pouvez utiliser Amazon CloudWatch pour consulter tous les journaux générés par le code de votre fonction et identifier les problèmes potentiels. Pour obtenir des instructions, consultez la section Utilisation de CloudWatch Logs avec Lambda.

Si votre fonction renvoie une trace de pile, le message d'erreur dans la trace de pile spécifie la cause de l'erreur.

Important :Lambda génère automatiquement trois lignes de journal pour chaque appel (DÉBUT, FIN et RAPPORT). Ces trois lignes sont les seules qui apparaissent dans les journaux CloudWatch de votre fonction si l'une des conditions suivantes est vraie :

  • Aucune autre journalisation explicite n'est configurée dans le code personnalisé de la fonction Lambda.
  • La limite de durée de la fonction est atteinte avant que Lambda puisse exécuter le code de la fonction qui génère des journaux.

Si vous ne parvenez pas à déterminer la cause des délais d'attente à partir des journaux CloudWatch, essayez une ou plusieurs des solutions suivantes :

  • Vérifiez que les paramètres du nombre de nouvelles tentatives et du délai d'expiration du SDK AWS que vous avez utilisé laissent suffisamment de temps pour que votre fonction s'initialise.
  • Augmentez temporairement le paramètre de délai d'attente de la fonction Lambda afin de laisser suffisamment de temps au code de la fonction pour générer des données de journal.
  • Augmentez la mémoire configurée de la fonction afin de réduire la latence de la durée d'appel et d'augmenter la puissance de calcul.

Pour ajouter d'autres résultats de journalisation au code de votre fonction, consultez la documentation suivante pour la version d'exécution Lambda que vous avez utilisée :

Utiliser AWS X-Ray pour identifier les éventuels goulots d'étranglement affectant la performances du code

Si votre fonction Lambda utilise des ressources AWS, des microservices, des bases de données ou des API Web HTTP en aval, vous pouvez utiliser AWS X-Ray pour vous aider à résoudre les problèmes de performance du code.

Pour plus d'informations, consultez la section Visualiser les appels de fonctions Lambda à l'aide d'AWS X-Ray.

Utiliser Lambda Insights pour collecter des métriques au niveau du système pour votre fonction

Lambda Insights collecte des métriques au niveau du système, notamment des métriques relatives à la durée du processeur, à la mémoire, au disque et au réseau. Il collecte également des informations de diagnostic, notamment les démarrages à froid et les arrêts de l’environnement de travail Lambda, afin de vous aider à identifier les problèmes liés à vos fonctions Lambda.

Remarque : L'utilisation de Lambda Insights entraîne des frais sur votre compte AWS. Le temps d'appel consommé par l'extension Lambda vous est facturé par incréments de 1 ms.

Utiliser les journaux de flux VPC pour déterminer pourquoi une requête d’appel spécifique a été refusée ou n'a pas été acheminée

Les journaux de flux VPC vous permettent de voir tout le trafic réseau qui transite vers et depuis un Amazon Virtual Private Cloud (Amazon VPC).

Pour plus d'informations, consultez la page Résolution des problèmes de réseau dans Lambda.

Remarque : Les variables suivantes s'appliquent si vous choisissez de configurer les journaux de flux VPC :

Utiliser les traces de fils HTTP pour une journalisation détaillée des requêtes réseau générées par le code de la fonction lors d'un appel

Pour plus d'informations, consultez la section Journalisation des traces de fils HTTP.

Bonnes pratiques pour éviter l’expiration de la fonction Lambda

Assurez-vous que votre fonction Lambda est idempotente

Les appels d'API peuvent prendre plus de temps que prévu en raison de problèmes de réseau transitoires. Les problèmes de réseau peuvent également entraîner de nouvelles tentatives et des requêtes d'API dupliquées. Pour vous préparer à ces occurrences, assurez-vous que votre fonction Lambda est idempotente.

Pour plus d'informations, consultez la section Comment puis-je rendre ma fonction Lambda idempotente ?

Initialiser la logique statique de votre fonction en dehors du gestionnaire de fonctions

Lorsque vous initialisez une fonction Lambda, Lambda alloue jusqu'à 10 secondes à la fin de la phase d’initialisation de l’appel. En raison de cette contrainte de temps, il est recommandé d'effectuer les actions suivantes en dehors du gestionnaire de fonctions dans le code d’initialisation :

  • Importer des bibliothèques et des dépendances
  • Configurer la configuration initiale
  • Initialiser les connexions à d'autres services et ressources en aval

Cette initialisation statique permet d'initialiser ces ressources une fois par sandbox, puis de les réutiliser pour tous les futurs appels dans le même environnement d'exécution.

Pour plus d'informations, consultez la section Optimisation de l'initialisation statique.

Remarque : Lambda supprime les connexions inactives aux ressources en aval. Pour permettre à votre fonction de maintenir une connexion permanente, utilisez la variable keepAlive associée à l’exécution Lambda que vous utilisez.

Vérifier que les paramètres du nombre de nouvelles tentatives et du délai d'expiration du SDK AWS que vous utilisez laissent suffisamment de temps à votre fonction pour s'initialiser

Si vous utilisez un SDK AWS pour effectuer un appel d'API et que l'appel échoue, le SDK AWS réitère automatiquement l'appel. Le nombre de nouvelles tentatives du SDK AWS et la durée de chaque nouvelle tentative sont déterminés par des paramètres qui varient d'un SDK AWS à un autre. L'initialisation de votre fonction peut prendre plus de temps que ne le permettent les paramètres par défaut du SDK AWS.

Pour plus d'informations, consultez la section Comment puis-je résoudre les problèmes liés aux nouvelles tentatives et au délai d'expiration lors de l'appel d'une fonction Lambda à l'aide d'un SDK AWS ?

(Facultatif) Configurer la simultanéité provisionnée pour votre fonction Lambda

La simultanéité provisionnée initialise un nombre demandé d'environnements d'exécution afin qu'ils soient prêts à répondre immédiatement aux appels de votre fonction. Pour configurer la simultanéité provisionnée pour votre fonction, suivez les instructions de la section Configuration de la simultanéité provisionnée.

Remarque : La configuration de la simultanéité provisionnée entraîne des frais sur votre compte AWS. Vous pouvez configurer la simultanéité provisionnée sur une version d'une fonction ou sur un alias de fonction Lambda.

Vérifier que votre fonction Lambda dispose d’un nombre suffisant de ressources système

La quantité de bande passante réseau et de processeur allouée à l'appel d'une fonction Lambda est déterminée par la configuration de la mémoire de la fonction.

Pour plus d’informations, consultez la page Mémoire et puissance de calcul.

Assurez-vous que tous les processus d'arrière-plan utilisés par votre fonction Lambda sont terminés avant que le gestionnaire de fonctions ne renvoie une chaîne

Pour plus d'informations, consultez la section Comprendre la réutilisation des conteneurs dans AWS Lambda.

Vérifier que votre fonction Lambda est configurée pour fonctionner dans les limites de délai maximum de tous les services AWS intégrés

Même si le délai d'appel maximal d'une fonction Lambda est de 15 minutes, d'autres services AWS peuvent avoir des limites de délai d’attente différentes.

Par exemple, Amazon API Gateway attend 29 secondes au maximum pour qu'un appel de proxy de fonction Lambda soit terminé.

Pour plus d'informations, consultez la section Comment puis-je résoudre les erreurs que je reçois lorsque j'intègre API Gateway à une fonction Lambda ? Consultez également la section Invoquer Lambda avec des événements provenant d'autres services AWS.

Vérifier qu’il existe un chemin réseau valide vers le point de terminaison que votre fonction tente d’atteindre

Pour vérifier vos paramètres réseau, suivez les instructions figurant dans la section Comment puis-je résoudre les problèmes de délai d'attente liés à une fonction Lambda intégrée à un Amazon VPC ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 mois