Un code de statut d'erreur HTTP 504 s’affiche lorsque j’ai utilisé Amazon API Gateway pour invoquer mon API REST, mon API HTTP ou mon API WebSocket.
Brève description
Lorsqu’une requête d'intégration prend plus de temps que le paramètre de délai d'intégration maximal de votre API API Gateway configurée, API Gateway renvoie un code de statut HTTP 504.
Pour résoudre les erreurs d'expiration 504 provenant d’API Gateway, commencez par identifier et vérifier la source de l'erreur dans vos journaux d’événements Amazon CloudWatch. Puis, utilisez l’une des méthodes suivantes pour réduire l’exécution de vos requêtes d'intégration jusqu'à ce qu'elles n'expirent plus.
Vous pouvez également augmenter la limite de délai d'intégration pour les API REST régionales et privées au-delà de la limite par défaut de 29 secondes.
Résolution
Identifier et vérifier la source de l'erreur 504 dans vos journaux CloudWatch
Procédez comme suit :
-
Pour l'API Rest et l'API Websocket,configurez la journalisation d’API Gateway pour les erreurs 504. Pour l'API HTTP, activez la journalisation pour écrire des journaux dans les journaux CloudWatch.
-
Essayez manuellement de reproduire l'erreur 504 dans l'API.
-
Activez la journalisation des accès pour l'API. Puis, utilisez les espaces réservés de paramètres suivants 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 plus d'informations, consultez la section Variables de contexte pour les transformations de données.
-
Pour filtrer le code de statut « 5## » des journaux d'accès, utilisez la requête CloudWatch Log Insights suivante :
fields @timestamp, @message, @logStream| filter status like '5'
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
-
Dans la console CloudWatch, consultez les événements de journaux API Gateway relatifs à l'intégration qui reçoit l'erreur.
-
Suivez l'ID de la requête dans vos journaux CloudWatch. En cas d'expiration du délai d'intégration, le message d'erreur « Execution failed due to a timeout » s'affiche après la ligne Corps de la requête de point de terminaison après des transformations. Pour en savoir plus, consultez la section Comment puis-je trouver les erreurs d’API REST API Gateway dans mes journaux CloudWatch ?
-
Pour filtrer l'erreur et sélectionner votre groupe de journaux d'exécution d’API Gateway, utilisez la requête CloudWatch Log Insights suivante :
fields @timestamp, @message|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc
-
Pour déterminer la source de l'erreur, consultez les journaux de backend et vérifiez que le point de terminaison d'intégration associé a été invoqué.
-
Confirmez le temps nécessaire à l'intégration pour terminer le traitement de la requête et répondre à l’API Gateway.
-
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 afin d'éviter les conflits de données lorsque vous réessayez la requête d'API.
Si l'intégration a été invoquée mais qu'elle renvoie toujours un message d'erreur 504, réduisez l'exécution de votre intégration.
Réduire l'exécution de votre intégration
Effectuez les opérations suivantes :
Augmenter la limite de délai d'intégration pour les API régionales et privées
Vous pouvez soumettre une demande de quota pour augmenter le quota de limite de délai d'intégration par défaut à plus de 29 secondes pour les API régionales et les API privées. Toutefois, une augmentation du délai d’attente d'intégration peut entraîner une réduction du quota d'accélération au niveau de la région pour votre compte AWS.
Remarque : Si vous augmentez la limite de délai d'intégration, assurez-vous de remplacer la valeur de délai par défaut de 29 secondes par la nouvelle valeur. Par exemple, modifiez la valeur de délai d'expiration par défaut de 29 secondes dans les intégrations auxquelles vous souhaitez appliquer l'augmentation. Puis, redéployez l'API pour que la nouvelle limite de délai d'intégration entre en vigueur.
Informations connexes
Intégrations pour les API REST dans API Gateway
Configurer une requête d'intégration d'API WebSocket dans API Gateway
Créer des intégrations pour les API HTTP dans API Gateway
Comment résoudre les erreurs HTTP 504 provenant d'une API REST API Gateway avec un backend Lambda ?