Come posso risolvere gli errori di timeout dell'API HTTP 504 con API Gateway?

4 minuti di lettura
0

Ricevo un codice di stato di errore HTTP 504 quando richiamo la mia API REST, l'API HTTP o l'API Websocket utilizzando Amazon API Gateway.

Breve descrizione

Se una richiesta di integrazione richiede più tempo del parametro di timeout massimo dell'API 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 registri di esecuzione di Amazon CloudWatch. Quindi, utilizza uno o più dei seguenti metodi per ridurre il tempo di esecuzione delle richieste di integrazione fino al termine del timeout.

Risoluzione

Per identificare e verificare l'origine dell'errore 504 nei log di Amazon CloudWatch

  1. Per l'API Rest e l'API Websocket, imposta la registrazione dell'esecuzione di API Gateway per gli errori 504. Per l'API HTTP, attiva la registrazione per scrivere i log nei log di CloudWatch.

  2. Prova a riprodurre manualmente l'errore 504 nell'API.

  3. Attiva la registrazione degli accessi per l'API e quindi utilizza le seguenti variabili di parametro per diagnosticare l'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 Variabili $context per modelli di dati, autorizzazioni, modelli di mappatura e registrazione degli accessi a CloudWatch.

  1. Utilizza la seguente query di CloudWatch Log Insights per filtrare il codice di stato '5XX' dai log di accesso:
fields @timestamp, @message, @logStream
| filter status like ‘5’
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
  1. Nella console di CloudWatch, visualizza i log di esecuzione dell'API Gateway per l'integrazione che riceve l'errore.

  2. Tieni traccia dell'ID della richiesta nei registri di CloudWatch. Se ci sono dei timeout nell'integrazione, viene visualizzato un errore «Esecuzione non riuscita a causa di un timeout» dopo la riga «Corpo della richiesta dell'endpoint dopo le trasformazioni:». Per ulteriori informazioni, vedi Come posso trovare gli errori dell'API REST API Gateway nei miei log di CloudWatch?

  3. Utilizza la seguente query di CloudWatch Log Insights per filtrare l'errore e selezionare il gruppo di log di esecuzione di API Gateway:

fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc
  1. Per determinare l'origine dell'errore, verifica che l'endpoint di integrazione associato sia stato richiamato.

  2. Conferma il tempo impiegato dall'integrazione per completare l'elaborazione della richiesta e rispondere a API Gateway.

  3. Se l'integrazione non è stata richiamata, implementa nuovi tentativi dell'API sul client. (L'errore potrebbe essere dovuto a un errore di rete temporaneo nel servizio API Gateway.)

Nota:Assicurati che l'applicazione sia idempotente. In questo modo si evitano conflitti di dati quando si riprova la richiesta API.

-oppure-

Se l'integrazione è stata richiamata ma ha comunque restituito un messaggio di errore 504, prova a ridurre il runtime dell'integrazione. Se si tratta di un'API HTTP, puoi provare ad aumentare il parametro massimo di timeout della richiesta di integrazione.

**Nota:**Il timeout massimo di integrazione predefinito dell'API REST API Gateway è di 29 secondi. Per l'API HTTP, il timeout può essere configurato per un massimo di 30 secondi. I limiti del valore massimo non possono essere aumentati.

Per ridurre il tempo di esecuzione dell'integrazione

  • Assicurati che l'integrazione del backend includa solo la logica necessaria a API Gateway per inviare una risposta HTTP al client. Valuta la possibilità di spostare qualsiasi logica non dipendente o di post-elaborazione su un altro servizio, ad esempio Lambda.
  • Se le latenze di rete sono la causa dell'errore 504, implementa la logica dei tentativi nell'applicazione lato client.
  • Migliora le prestazioni di integrazione del backend seguendo le best practice di ottimizzazione per la tua piattaforma.
  • Prendi in considerazione la possibilità di configurare l'invocazione asincrona della funzione Lambda di backend.

Informazioni correlate

Configurazione delle integrazioni delle API REST

Configurazione di una richiesta di integrazione dell'API WebSocket in API Gateway

Configurazione delle integrazioni per le API HTTP

Quote e note importanti di Amazon API Gateway