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

Lecture de 4 minute(s)
0

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.

Brève description

Si une demande d'intégration prend plus longtemps que le paramètre de délai d’intégration maximum de l’API REST API Gateway, API Gateway renvoie un code d'état HTTP 504.

Pour résoudre les erreurs de délai d'expiration 504 provenant d’API Gateway, commencez par identifier et vérifier la source de l'erreur dans vos journaux d’exécution Amazon CloudWatch. Utilisez ensuite une ou plusieurs des méthodes suivantes pour réduire le temps 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 vos journaux Amazon CloudWatch

  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. Activez la journalisation des accès pour l'API, puis utilisez les variables de paramètres suivantes pour diagnostiquer la source de l'erreur :

$context.integration.status: The status code returned from an integration. For AWS Lambda proxy integrations, this is the status code that your Lambda function code returns.
$context.integrationStatus: For Lambda proxy integration, this parameter represents the status code returned from Lambda, not from the backend Lambda function.
$context.integrationLatency: The integration latency in ms.

Pour en savoir plus, consultez la rubrique $context Variables pour les modèles de données, les autorisateurs, les modèles de mappage et la journalisation des accès à CloudWatch.

  1. Utilisez la requête CloudWatch Log Insights suivante pour filtrer le code d'état « 5XX » des journaux d'accès :
fields @timestamp, @message, @logStream
| filter status like ‘5’
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
  1. Dans la console CloudWatch, consultez les journaux d'exécution d’API Gateway pour l'intégration ayant reçu l'erreur.

  2. Suivez l'ID de la demande dans vos journaux CloudWatch. En cas d'expiration du délai d'intégration, le message d'erreur « Échec de l'exécution en raison d'un délai d'attente » s'affiche après la ligne « Corps de la demande de point de terminaison après transformations : ». Pour en savoir plus, consultez l'article Comment trouver les erreurs d’API REST API Gateway dans mes journaux CloudWatch ?

  3. Utilisez la requête CloudWatch Log Insights suivante pour filtrer l'erreur et sélectionner votre groupe de journaux d'exécution d’API Gateway :

fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc
  1. Pour déterminer la source de l'erreur, vérifiez que le point de terminaison d'intégration associé a été appelé.

  2. Confirmez le temps nécessaire à l'intégration pour terminer le traitement de la demande et répondre à l’API Gateway.

  3. Si l'intégration n'a pas été invoquée, implémentez de nouvelles tentatives d'API sur le client. (L'erreur peut provenir d’une panne réseau temporaire dans le service API Gateway.)

Remarque :assurez-vous que votre application est idempotente. Vous éviterez les conflits de données quand vous soumettrez à nouveau la demande 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 paramètre de délai d'expiration maximal de votre demande d'intégration.

**Remarque :**le délai d'intégration maximal par défaut de l'API REST API Gateway est de 29 secondes. Pour l'API HTTP, le délai d'attente peut être configuré jusqu'à une valeur maximale de 30 secondes. Les limites de valeur maximales ne peuvent pas être augmentées.

Pour réduire la durée d'exécution de votre intégration

  • Assurez-vous que l’intégration de votre backend inclut uniquement la logique nécessaire à l’API Gateway pour envoyer une réponse HTTP au client. Envisagez de déplacer toute logique non dépendante ou de post-traitement vers un autre service, tel que Lambda.
  • Si les latences du réseau sont à l'origine de l'erreur 504, implémentez une logique de nouvelle tentative sur l'application côté client.
  • Améliorez les performances d'intégration du backend en suivant les meilleures pratiques d'optimisation pour votre plateforme.
  • Envisagez de configurer l'invocation asynchrone de la fonction Lambda du backend.

Informations connexes

Configuration des intégrations d'API REST

Configuration d'une demande d'intégration d'API WebSocket dans la passerelle API

Configuration des intégrations pour les API HTTP

Quotas et remarques importantes sur Amazon API Gateway