¿Cómo soluciono errores HTTP 504 desde una API de REST de API Gateway con un backend de Lambda?

4 minutos de lectura
0

Recibo un código de estado de error HTTP 504 cuando invoco una API de REST mediante Amazon API Gateway con un backend de AWS Lambda. ¿Cómo puedo solucionar este error?

Resolución

Cuando las solicitudes de la API de REST devuelven un código de estado de error HTTP 504, debe ejecutar varias comprobaciones.

Comprobar si hay picos de integración/latencia

Compruebe si hay un pico en el valor de IntegrationLatency (Latencia de integración) en API Gateway al revisar el tiempo de duración de la latencia de la integración. Para ver el tiempo de duración de IntegrationLatency (Latencia de integración), configure la variable de registro de acceso $context.integration.latency para el registro de la API HTTP.

Para obtener más información, consulte Configuración del registro de API de CloudWatch mediante la consola de API Gateway.

Un pico en el valor de IntegrationLatency (Latencia de integración) en API Gateway indica que la solicitud pasó la mayor parte del tiempo en Lambda. Consulte la métrica de rendimiento Duration (Duración) de la función de Lambda para confirmarlo.

Para obtener más información, consulte Uso de métricas de funciones de Lambda.

Revisar las solicitudes con Información de registros de CloudWatch

Utilice Información de registros de Amazon CloudWatch para revisar las solicitudes que generaron errores 504. Para revisar las solicitudes, dentro de la consola de CloudWatch, en el panel de navegación, elija Logs (Registros), Log Insights (Información de registros). Seleccione su grupo de registro de API Gateway. A continuación, defina el tiempo relativo con una de las siguientes consultas:

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

-o bien-

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

Instrumente rastros de X-Ray

Si los errores 504 se siguen produciendo de forma continua, determine a qué dedica su tiempo la función de Lambda. Instrumente rastros de AWS X-Ray para las funciones de Lambda en función del tiempo de ejecución de la función de Lambda.

Para Python:

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

Para Node.js:

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

Nota: Debe crear un nuevo paquete de implementación después de instrumentar los rastros de X-Ray en una función de Lambda.

Implementar reintentos de API

Cuando se produce un error 504 y la solicitud no se encuentra en Lambda, implemente los reintentos de la API en el cliente. El error puede deberse a un error temporal de red en API Gateway.

Compruebe la configuración de la función de Lambda

Asegúrese de que su función de Lambda solo tenga una lógica de procesamiento específica para eventos de API Gateway. De esta forma, la función de Lambda tarda menos en ejecutarse y puede mantenerse al día con los eventos entrantes.

Las API de REST tienen un tiempo de espera máximo de integración predeterminado de 29 segundos. Por lo tanto, asegúrese de que la duración de ejecución de la función de Lambda sea inferior a 29 segundos.

Si tiene un caso de uso en el que la aplicación es urgente, consulte Configurar la invocación asíncrona de la función de Lambda de backend.


Información relacionada

Dimensiones y métricas de Amazon API Gateway

Configuración del registro de CloudWatch para una API de REST en API Gateway

Visualización de eventos de registro de API Gateway en la consola de CloudWatch

Rastreo de solicitudes de usuario a API de REST mediante X-Ray

Uso de AWS Lambda con AWS X-Ray

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año