Come posso risolvere gli errori di timeout dell'API HTTP 504 con API Gateway?
Quando utilizzo Gateway Amazon API ricevo un codice di stato di errore HTTP 504 quando invoco REST API, API HTTP o API WebSocket.
Breve descrizione
Quando una richiesta di integrazione richiede un tempo superiore al parametro Timeout massimo di integrazione della REST API di API Gateway, API Gateway restituisce un codice di stato HTTP 504.
Per risolvere gli errori di timeout 504 da API Gateway, identifica e verifica innanzitutto l'origine dell'errore nei log eventi di Amazon CloudWatch. Quindi, utilizza uno o più dei seguenti metodi per ridurre il runtime delle richieste di integrazione fino a quando il timeout non si verifica più.
Risoluzione
Identificazione e verifica dell'origine dell'errore 504 in CloudWatch Logs
Completa i seguenti passaggi:
-
Per Rest API e API WebSocket, imposta la registrazione API Gateway per gli errori 504. Per l'API HTTP, attiva la registrazione per scrivere i log in CloudWatch Logs.
-
Prova a riprodurre manualmente l'errore 504 nell'API.
-
Attiva la registrazione degli accessi per l'API. Quindi, utilizza i segnaposto dei parametri seguenti per eseguire la diagnosi dell'origine dell'errore:
$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.
Per ulteriori informazioni, consulta $context Variables for data models, authorizers, mapping templates, and CloudWatch access logging (Variabili $context per i modelli di dati, le autorizzazioni, i template di mappatura e la registrazione degli accessi CloudWatch.
-
Per filtrare il codice di stato "5XX" dai log di accesso, utilizza la seguente query di CloudWatch Logs Insights:
fields @timestamp, @message, @logStream | filter status like '5' | sort @timestamp desc | display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
-
Nella console CloudWatch, visualizza gli eventi del log di API Gateway per l'integrazione che riceve l'errore.
-
Tieni traccia dell'ID della richiesta in CloudWatch Logs. Se si verificano timeout nell'integrazione, dopo la riga "Corpo della richiesta dell'endpoint dopo le trasformazioni:" viene visualizzato il messaggio di errore "Esecuzione non riuscita a causa di un timeout". Per ulteriori informazioni, consulta Come faccio a trovare gli errori di REST API in API Gateway nei miei log di CloudWatch?
-
Per filtrare l'errore e selezionare il gruppo di log di esecuzione di API Gateway, utilizza la seguente query di CloudWatch Logs Insights:
fields @timestamp, @message |filter @message like "Execution failed due to a timeout error" |sort @timestamp desc
-
Per determinare l'origine dell'errore, esamina i log del backend e verifica che sia stato invocato l'endpoint di integrazione associato.
-
Conferma il tempo impiegato dall'integrazione per completare il processo di richiesta e rispondi all'API Gateway.
-
Se l'integrazione non è stata invocata, implementa nuovi tentativi dell'API sul client. L'errore potrebbe derivare da un'interruzione temporanea della rete nel servizio API Gateway.
Nota: Assicurati che l'applicazione sia idempotente, in modo da evitare conflitti di dati quando riprovi a eseguire la richiesta API.
-oppure-
Se l'integrazione è stata invocata ma continua a restituire un messaggio di errore 504, prova a ridurre il runtime dell'integrazione. Se si tratta di un'API HTTP, prova ad aumentare il parametro del timeout massimo della richiesta di integrazione. Per ulteriori informazioni, consulta Aumento del limite di timeout di integrazione di Gateway Amazon API oltre i 29 secondi.
Nota: il timeout massimo di integrazione predefinito della REST API di API Gateway è di 29 secondi. Per l'API HTTP, il timeout può essere configurato fino a un valore massimo di 30 secondi.
Per ridurre il runtime dell'integrazione
Effettua una o più delle seguenti azioni:
- Assicurati che l'integrazione del backend includa solo la logica necessaria ad API Gateway per inviare una risposta HTTP al client.
- Sposta qualsiasi logica non dipendente o di post-elaborazione in un altro servizio, ad esempio AWS Lambda.
- Se le latenze di rete causano l'errore 504, implementa una logica di nuovi tentativi nell'applicazione lato client.
- Segui le best practice per i prodotti e servizi AWS per migliorare le prestazioni di integrazione del backend.
- Configura l'invocazione asincrona della funzione Lambda del backend.
Informazioni correlate
Integrations for REST APIs in API Gateway (Integrazioni per REST API in API Gateway)
Amazon API Gateway quotas and important notes (Quote e note importanti di Amazon API Gateway)
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa