Comment puis-je résoudre les erreurs que je reçois lorsque j'intègre API Gateway à une fonction Lambda ?

Dernière mise à jour : 06/04/2021

Je souhaite résoudre les erreurs que je reçois lorsque j'intègre Amazon API Gateway à une fonction AWS Lambda.

Résolution

Activer la journalisation pour votre API et votre étape

1.    Dans la console API Gateway, recherchez Éditeur d’étape pour votre API.

2.    Dans le panneau Éditeur d’étape, choisissez l'onglet Journaux/Suivi.

3.     Dans l'onglet Journaux/Suivi, sous Paramètres CloudWatch, procédez comme suit pour activer la journalisation :
Cochez la case Activer CloudWatch Logs.
Pour Niveau de journalisation, choisissez INFO pour générer des journaux pour toutes les demandes. Ou choisissez ERROR pour ne générer des journaux que pour les demandes envoyées à votre API qui entraînent une erreur.
Pour les API REST, cochez la case Consigner les demandes complètes/données de réponse. Ou, pour les API WebSocket, cochez la case Consigner toutes les données de messages.

4.    Sous Journalisation des accès personnalisée, procédez de la manière suivante pour activer la journalisation des accès :
Cochez la case Activer la journalisation des accès.
Pour ARN de destination des journaux d'accès, saisissez l'Amazon Resource Name (ARN) d'un Groupe de journaux CloudWatch ou d'un flux Amazon Kinesis Data Firehose.
Saisissez un Format de journal. Pour obtenir des conseils, choisissez CLF, JSON, XML, ou CSV pour voir un exemple dans ce format.

5.    Sélectionnez Enregistrer les modifications).
Remarque : la console ne confirme pas que les paramètres sont enregistrés.

Pour plus d'informations, consultez Configuration de la journalisation des API CloudWatch en utilisant la console API Gateway.

6.    En fonction du type d'erreur que vous identifiez dans vos journaux, choisissez l'une des options suivantes :

Si l'erreur suivante s'affiche, suivez les étapes de la section Résoudre les problèmes de simultanéité.

(XXXXX) Lambda invocation failed with status: 429. Lambda request id: XXXXXXXXXX
(XXXXX) Execution failed due to configuration error: Rate Exceeded.
(XXXXX) Method completed with status: 500

Si l'une des erreurs suivantes s'affiche, suivez les étapes de la section Résoudre les problèmes de délais d’expiration.

Pour l'intégration personnalisée Lambda :

< 29 sec:
(XXXXX) Method response body after transformations: {"errorMessage":"2019-08-14T02:45:14.133Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

Pour l'intégration proxy Lambda :

< 29 sec:
(XXXXX) Endpoint response body before transformations: {"errorMessage":"2019-08-14T02:50:25.865Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

Si l'erreur suivante s'affiche, suivez les étapes de la section Résoudre les erreurs de fonction.

(XXXXX) Execution failed due to configuration error: Malformed Lambda proxy response
(XXXXX) Method response body after transformations: {"errorMessage": "Syntax error in module 'lambda_function'"}

Résoudre les problèmes de simultanéité

Vous recevez 429 erreurs de limitation ou 500 erreurs lorsque des requêtes supplémentaires proviennent d’API Gateway à un rythme supérieur à celui que peut adopter votre fonction Lambda.

Pour résoudre ces erreurs, analysez dans CloudWatch les métriques Count (API Gateway), Throttles (Lambda) et ConcurrentExecutions (Lambda). Tenez compte des éléments suivants :

  • Count (API Gateway) est le nombre total de requêtes d'API dans une période donnée.
  • Les throttles (Lambda) sont le nombre de requêtes d'appel qui sont soumises à une limitation. Lorsque toutes les instances de fonction traitent des requêtes et qu'aucune simultanéité n'est disponible pour la mise à l'échelle, Lambda rejette les requêtes supplémentaires avec l'erreur TooManyRequestsException. Les requêtes avec limitation et autres erreurs d'appel ne comptent pas comme des appels ou des erreurs.
  • ConcurrentExecutions (Lambda) est le nombre d'instances de fonction qui traitent des événements. Si ce nombre atteint votre quota d'exécutions simultanées pour la région AWS ou la limite de simultanéité réservée que vous avez configurée sur la fonction, les demandes d'appel supplémentaires sont limitées.

Remarque : pour plus d'informations, consultez Métriques API Gateway et Utilisation des mesures de fonction AWS Lambda.

Si vous définissez la simultanéité réservée dans votre fonction Lambda, choisissez une valeur de simultanéité réservée plus élevée pour la fonction Lambda. Ou supprimez la valeur de simultanéité réservée de la fonction Lambda. La fonction exploite alors le pool d'exécutions simultanées non réservées.

Si vous ne définissez pas la simultanéité réservée dans la fonction Lambda, vérifiez la métrique ConcurrentExecutions (Exécutions simultanées) pour déterminer l'utilisation. Pour plus d'informations, consultez Quotas Lambda.

Résoudre les problèmes de délai d’expiration

Le délai d’expiration d'intégration est de 29 secondes (limite stricte) pour toutes les intégrations API Gateway. Vous pouvez rencontrer deux scénarios lorsque vous créez une API API Gateway avec intégration Lambda. Les scénarios se produisent lorsque le délai d'expiration est inférieur ou supérieur à 29 secondes.

Si le délai d'expiration de votre fonction Lambda est inférieur à 29 secondes, vérifiez vos journaux Lambda pour examiner ce problème. Si votre fonction Lambda doit s'exécuter après 29 secondes, envisagez d'appeler la fonction Lambda de manière asynchrone.

Pour l'intégration personnalisée Lambda, procédez comme suit :

1.    Ouvrez la console API Gateway.

2.    Dans le volet de navigation, choisissez API, puis sélectionnez votre API.

3.    Sélectionnez Ressources, puis choisissez votre méthode.

4.    Sélectionnez Demande d'intégration).

5.    Sélectionnez Demande de méthode.

6.    Développez En-têtes HTTP.

7.    Ensuite, sélectionnez Ajouter un en-tête).

8.    Pour Nom, saisissez un nom pour votre en-tête. Par exemple : X-Amz-Invocation-Type

Important : vous devez mapper votre en-tête à partir de 'Event' (les guillemets simples sont obligatoires).

Pour l'intégration proxy Lambda :

Utilisez deux fonctions Lambda : les fonctions A et B. API Gateway appelle d'abord la fonction A de manière synchrone. Ensuite, la fonction A appelle la fonction B de manière asynchrone. La fonction A ignore la réponse de la fonction B et peut renvoyer une réponse positive à API Gateway lorsque la fonction B est appelée de manière asynchrone.

Si vous utilisez l'intégration proxy Lambda, envisagez de la remplacer par une intégration personnalisée. Toutefois, vous devez configurer les modèles de mappage pour transformer la demande/réponse en format souhaité. Pour plus d'informations, consultez Configurer l'appel asynchrone de la fonction Lambda backend.

Remarque : comme une fonction Lambda asynchrone s'exécute en arrière-plan, votre client ne peut pas recevoir directement de données à partir d'une fonction Lambda. Vous devez disposer d'une base de données intermédiaire pour stocker les données persistantes.

Résoudre les erreurs de fonction

Une erreur de fonction peut s’afficher lorsque vous appelez votre API. Cette erreur peut résulter d'une erreur de syntaxe dans votre fonction Lambda. Vous pouvez également voir cette erreur si votre fonction Lambda ne renvoie pas un objet JSON valide qu’API Gateway attend pour les intégrations proxy.

Pour résoudre cette erreur, suivez les étapes de la section Activer la journalisation pour votre API et votre étape.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?