¿Cómo soluciono los errores de tiempo de espera HTTP 504 de la API con API Gateway?

5 minutos de lectura
0

Recibo un código de estado de error HTTP 504 cuando invoco una API de REST, HTTP o Websocket mediante Amazon API Gateway.

Descripción breve

Si una solicitud de integración tarda más que el parámetro de tiempo de espera de integración máximo de la API de REST de API Gateway, esta última devuelve un código de estado HTTP 504.

Para solucionar los errores de tiempo de espera 504 de API Gateway, primero identifique y verifique el origen del error en los registros de ejecución de Amazon CloudWatch. A continuación, utilice uno o más de los siguientes métodos para reducir el tiempo de ejecución de las solicitudes de integración hasta que no se agote el tiempo de espera.

Solución

Para identificar y verificar el origen del error 504 en los registros de Amazon CloudWatch

1.    Para la API de REST y la API de Websocket, configure el registro de ejecución de API Gateway para los errores 504. Para la API HTTP, active el registro para escribirlos en los registros de CloudWatch.

2.    Intente reproducir manualmente el error 504 en la API.

3.    Active el registro de acceso para la API y, a continuación, utilice las siguientes variables de parámetros para diagnosticar el origen del error:

$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.

Para obtener más información, consulte Variables $context para modelos de datos, autorizadores, plantillas de mapeo y registro de acceso de CloudWatch.

4.    Utilice la siguiente consulta de Información de registros de CloudWatch para filtrar el código de estado «5XX» de los registros de acceso:

fields @timestamp, @message, @logStream
| filter status like ‘5’
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId

5.    En la consola de CloudWatch, consulte los registros de ejecución de API Gateway de la integración que recibe el error.

6.    Haga un seguimiento del ID de la solicitud en los registros de CloudWatch. Si hay tiempos de espera en la integración, aparecerá el error «La ejecución falló debido a un tiempo de espera» después de la frase «Cuerpo de la solicitud de punto de conexión después de las transformaciones». Para obtener más información, consulte ¿Cómo encuentro los errores de la API de REST de API Gateway en mis registros de CloudWatch?

7.    Utilice la siguiente consulta de Información de registros de CloudWatch para filtrar el error y seleccionar el grupo de registros de ejecución de API Gateway:

fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc

8.    Para determinar el origen del error, compruebe que se haya invocado el punto de conexión de integración asociado.

9.    Confirme cuánto tiempo ha tardado la integración en completar el procesamiento de la solicitud y responda a API Gateway.

10.    Si no se ha invocado la integración, implemente los reintentos de la API en el cliente. (El error puede deberse a un fallo temporal de la red en el servicio de API Gateway).

Nota: Asegúrese de que su aplicación sea idempotente. Así se evitan conflictos de datos al volver a intentar la solicitud de API.

-o-

Si se ha invocado la integración, pero aun así aparece el mensaje de error 504, intente reducir el tiempo de ejecución de la integración. Si se trata de una API HTTP, puede intentar aumentar el parámetro de tiempo de espera máximo de la solicitud de integración.

Nota: El tiempo de espera máximo de la integración predeterminado de la API de REST de API Gateway es de 29 segundos. Para la API HTTP, el tiempo de espera se puede configurar hasta un valor máximo de 30 segundos. Los límites de valores máximos no se pueden aumentar.

Para reducir el tiempo de ejecución de la integración

  • Asegúrese de que su integración de backend incluya solo la lógica necesaria para que API Gateway envíe una respuesta HTTP al cliente. Considere la posibilidad de trasladar cualquier lógica no dependiente o de posprocesamiento a otro servicio como Lambda.
  • Si las latencias de la red están causando el error 504, implemente la lógica de reintento en la aplicación del lado del cliente.
  • Mejore el rendimiento de la integración de backend siguiendo las prácticas recomendadas de optimización de su plataforma.
  • Considere la posibilidad de configurar la invocación asíncrona de la función de Lambda del backend.

Información relacionada

Configuración de integraciones de la API de REST

Configuración de una solicitud de integración de API de WebSocket en API Gateway

Configuración de integraciones para API HTTP

Cuotas de Amazon API Gateway y notas importantes