Comment puis-je résoudre les erreurs de délai d'expiration de l'API HTTP 504 avec API Gateway ?

Dernière mise à jour : 17-08-2022

Je reçois un code d'état d'erreur HTTP 504 lorsque j'appelle mon API REST, mon API HTTP ou mon API Websocket à l'aide d'Amazon API Gateway. Comment puis-je résoudre ce problème ?

Brève description

Si une demande d'intégration prend plus de temps que votre paramètre de délai d'expiration maximal de l'API REST API Gateway, API Gateway renvoie un code d'état HTTP 504.

Pour résoudre les erreurs 504 d'API Gateway, identifiez d'abord et vérifiez la source de l'erreur dans vos journaux d'exécution Amazon CloudWatch. Ensuite, utilisez une ou plusieurs des méthodes suivantes pour réduire la durée d'exécution de vos demandes d'intégration jusqu'à ce qu'elles n'expirent plus.

Résolution

Pour identifier et vérifier la source de l'erreur 504 dans Amazon CloudWatch logs

1.    Pour l'API Rest et l'API Websocket, configurez la journalisation de l'exécution d'API Gateway pour les erreurs 504. Pour l'API HTTP, activez la journalisation pour écrire des journaux dans les journaux CloudWatch.

2.    Essayez manuellement de reproduire l'erreur 504 dans l'API.

3.    Dans la console CloudWatch, affichez les journaux d'exécution API Gateway pour l'intégration recevant l'erreur.

4.    Suivez l'ID de demande dans vos journaux CloudWatch. S'il y a des délais d'expiration sur l'intégration, vous verrez un échec d'exécution en raison d'un message d'erreur d'expiration après la ligne « Corps de requête du point de terminaison après les transformations : ». Pour plus d'informations, consultez la section Comment trouver les erreurs d’API Rest API Gateway dans mes journaux CloudWatch ?

5.    Activez la journalisation des accès pour l'API et utilisez les variables de paramètres suivantes pour diagnostiquer la source d'erreur :

$context.integration.status : code d'état renvoyé par une intégration. Pour les intégrations de proxy Lambda, il s'agit du code d'état renvoyé par votre code de fonction Lambda.
$context.integrationStatus : pour l'intégration du proxy Lambda, ce paramètre représente le code d'état renvoyé par AWS Lambda, et non par la fonction Lambda principale.
$context.IntegrationLatency : La latence d'intégration en ms.

Pour plus d'informations, consultez la section Variables $context pour les modèles de données, les autorisations, les modèles de mappage et la journalisation des accès CloudWatch.

6.    Déterminez la source de l'erreur en procédant comme suit :

Vérifiez que le point de terminaison d'intégration associé a été intégration invoqué.

Confirmez combien de temps l'intégration a pris pour terminer le traitement de la demande et répondre en conséquence à API Gateway.

7.    Si l'intégration n'a pas été invoquée, renouvelez la demande. (L'erreur peut avoir résulté d'une défaillance temporaire du réseau dans le service API Gateway.)
Remarque : Assurez-vous que votre application est idempotente. Cela évite les conflits de données lorsque vous renouvelez la demande d'API.

-ou-

Si l'intégration a été invoquée mais a quand même renvoyé un message d'erreur 504, essayez de réduire la durée d'exécution de votre intégration. S'il s'agit d'une API HTTP, vous pouvez essayer d'augmenter le délai d'expiration maximal de votre demande d'intégration.

Remarque : le délai d'intégration maximal par défaut d'API REST API Gateway est de 29 secondes. Pour l'API HTTP, le délai d'expiration peut être configuré pour une valeur maximale de 30 secondes.

Pour réduire le temps d'exécution de votre intégration