Je reçois un code d'état d'erreur HTTP 504 lorsque j'invoque une API REST en utilisant Amazon API Gateway avec un backend AWS Lambda. Comment puis-je résoudre ce problème ?
Solution
Lorsque vos demandes d'API REST renvoient un code d'état d'erreur HTTP 504, vous devez effectuer plusieurs vérifications.
Vérifiez les pics IntegrationLatency
Vérifiez s'il existe un pic de IntegrationLatency dans API Gateway en examinant la durée de latence de l'intégration. Pour connaître la durée de IntegrationLatency, configurez la variable de journalisation des accès $context.integration.latency pour la journalisation de l'API HTTP.
Pour plus d'informations, voir Configurer la journalisation de l'API Amazon CloudWatch à l'aide de la console API Gateway.
Un pic IntegrationLatency dans API Gateway indique que la requête a passé la majeure partie de son temps dans Lambda. Vérifiez la métrique de performance sur la durée de la fonction Lambda pour le confirmer.
Pour plus d'informations, consultez la rubrique Utilisation des métriques de fonction Lambda.
Passez en revue les demandes avec CloudWatch Logs Insights
Utilisez Amazon CloudWatch Logs Insights pour examiner les demandes qui ont entraîné des erreurs 504. Pour consulter les demandes, sur la console CloudWatch, dans le volet de navigation, choisissez Logs, Log Insights. Sélectionnez votre groupe de journaux API Gateway. Définissez ensuite l'heure relative à l'aide de l'une des requêtes suivantes :
parse @message '(*) *' as reqId, message
| filter message like /Method completed with status: \d\d\d/
| parse message 'Method completed with status: *' as status
| filter status = 504
| sort @timestamp desc
| limit 20
-ou-
fields @timestamp, @message
| filter message like /Method completed with status: 504/
| sort @timestamp desc
| limit 20
Traces radiographiques de l'instrument
Si les erreurs 504 continuent de se produire en permanence, déterminez l’emplacement où la fonction Lambda passe le clair de son temps. L'instrument AWS X-Ray trace les fonctions Lambda en fonction de l'exécution des fonctions Lambda.
Pour Python :
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
patch_all()
pour Node.js :
const AWSXRay = require('aws-xray-sdk-core')
const AWS = AWSXRay.captureAWS(require('aws-sdk'))
Remarque : Vous devez créer un nouveau package de déploiement après avoir instrumenté les traces X-Ray sur une fonction Lambda.
Implémenter de nouvelles tentatives d'API
Lorsqu'une erreur 504 se produit et que la demande n'est pas trouvée dans Lambda, implémentez de nouvelles tentatives d'API sur le client. L'erreur peut avoir résulté d'une défaillance temporaire du réseau dans API Gateway.
Vérifiez la configuration de la fonction Lambda
Assurez-vous que votre fonction Lambda ne comporte que la logique de traitement spécifique à l'événement API Gateway. De cette façon, la fonction Lambda prend moins de temps pour s'exécuter et peut suivre les événements entrants.
Les API REST ont un délai d'intégration maximal par défaut de 29 secondes. Par conséquent, assurez-vous que la durée d'exécution de la fonction Lambda est inférieure à 29 secondes.
Si vous avez un cas d'utilisation où l'application est sensible au facteur temps, voir Configurer l'invocation asynchrone de la fonction Lambda principale.
Informations connexes
Dimensions et métriques API Gateway
Configuration de la journalisation CloudWatch pour une API REST dans API Gateway
Afficher les événements de journaux API Gateway dans la console CloudWatch
Suivi des demandes des utilisateurs vers les API REST à l'aide de X-Ray
Utilisation de Lambda avec X-Ray