Come posso risolvere gli errori HTTP 504 da una REST API di API Gateway con un back-end Lambda?

3 minuti di lettura
0

Quando richiamo una REST API utilizzando Amazon API Gateway con un back-end AWS Lambda, ricevo un codice di stato di errore HTTP 504. Come posso risolvere questo errore?

Risoluzione

Quando le richieste REST API restituiscono un codice di stato di errore HTTP 504, è necessario eseguire vari controlli.

Verifica i picchi nel parametro IntegrationLatency

Verifica se c'è un picco nel parametro IntegrationLatency nell'API Gateway esaminando il tempo di durata della latenza dell'integrazione. Per visualizzare la durata di IntegrationLatency, configura la variabile di registrazione degli accessi $context.integration.latency per la registrazione dell'API HTTP.

Per ulteriori informazioni, consulta la pagina Configurazione della registrazione dei log delle API di Amazon CloudWatch utilizzando la console API Gateway.

Un picco di IntegrationLatency in API Gateway indica che la richiesta ha trascorso la maggior parte del tempo in Lambda. Per confermarlo, controlla il parametro sulle prestazioni della durata della funzione Lambda.

Per ulteriori informazioni, consulta la pagina Utilizzo dei parametri delle funzioni Lambda.

Valutazione delle richieste attraverso gli approfondimenti sui file di log CloudWatch

Usa gli approfondimenti sui file di log Amazon CloudWatch per esaminare le richieste che hanno generato errori 504. Per esaminare le richieste, nella console di CloudWatch, nel riquadro di navigazione, scegli Logs, Log Insights. Seleziona il tuo gruppo di log API Gateway. Quindi, imposta l'ora relativa con una delle seguenti query:

parse @message '(*) *' as reqId, message
| filter message like /Method completed with status: \d\d\d/
| parse message 'Method completed with status: *' as status
| filter status = 504
| sort @timestamp desc
| limit 20

-oppure-

fields @timestamp, @message
| filter message like /Method completed with status: 504/
| sort @timestamp desc
| limit 20

Analizza le tracce di X-Ray

Se gli errori 504 continuano a verificarsi ripetutamente, cerca di determinare dove la funzione Lambda impiega la maggiore quantità di tempo. Analizza le tracce di AWS X-Ray per le funzioni Lambda sulla base del runtime della funzione Lambda.

Per Python:

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
patch_all()

Per Node.js:

const AWSXRay = require('aws-xray-sdk-core')
const AWS = AWSXRay.captureAWS(require('aws-sdk'))

Nota: è necessario creare un nuovo pacchetto di implementazione dopo aver analizzato le tracce X-Ray su una funzione Lambda.

Implementazione di nuovi tentativi dell'API

Quando si verifica un errore 504 e la richiesta non viene trovata in Lambda, implementa nuovi tentativi dell'API sul client. L'errore potrebbe essere dovuto a un errore di rete temporaneo in API Gateway.

Controlla la configurazione della funzione Lambda

Assicurati che la tua funzione Lambda abbia solo una logica di elaborazione specifica per gli eventi di API Gateway. In questo modo, la funzione Lambda impiega meno tempo per essere eseguita e può tenere il passo con gli eventi in arrivo.

Le API REST hanno un timeout di integrazione massimo predefinito di 29 secondi. Pertanto, assicurati che la durata di esecuzione della funzione Lambda sia inferiore a 29 secondi.

Se hai un caso d'uso in cui l'applicazione è sensibile al fattore tempo, consulta la pagina Configurazione della chiamata asincrona della funzione Lambda di back-end.


Informazioni correlate

Dimensioni e parametri di API Gateway

Configurazione della registrazione di CloudWatch per una REST API in API Gateway

Visualizzazione del log eventi dell'API Gateway nella console di CloudWatch

Monitoraggio delle richieste degli utenti alle REST API utilizzando X-Ray

Utilizzo di Lambda con X-Ray