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

5 minutos de lectura
0

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

Descripción corta

Cuando 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 eventos de Amazon CloudWatch. A continuación, utilice uno o más de los siguientes métodos para reducir el tiempo de puesta en marcha de las solicitudes de integración hasta que no se agote el tiempo de espera.

Resolución

Identificar y verificar el origen del error 504 en los registros de CloudWatch

Siga estos pasos:

  1. Para la API de REST y la API de Websocket, configure el registro 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. A continuación, utilice los siguientes marcadores de posición 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 eventos de registro 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 puesta en marcha falló debido a un tiempo de espera» después de la frase «Cuerpo de la solicitud de punto de enlace después de las transformaciones». Para obtener más información, consulte ¿Cómo puedo encontrar los errores de la API de REST de la API Gateway en los registros de CloudWatch?

  7. Para filtrar el error y seleccionar el grupo de registros de puesta en marcha de API Gateway, utilice la siguiente consulta de Información de registros de CloudWatch:

    fields @timestamp, @message
    |filter @message like "Execution failed due to a timeout error"
    |sort @timestamp desc
  8. Para determinar el origen del error, revise los registros del backend y verifique que se haya invocado el punto de enlace de integración asociado.

  9. Confirme cuánto tiempo ha tardado la integración en completar el proceso de solicitud y responder 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 para evitar conflictos de datos cuando vuelva a intentar enviar la solicitud de la API.
    Alternativa:
    Si se ha invocado la integración, pero aun así aparece el mensaje de error 504, intente reducir el tiempo de puesta en marcha de la integración. Si se trata de una API HTTP, intente aumentar el parámetro de tiempo de espera máximo de la solicitud de integración. Para obtener más información, consulte El límite de tiempo de espera de la integración de Amazon API Gateway supera los 29 segundos.

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.

Para reducir el tiempo de puesta en marcha de la integración

Realice una o más de las siguientes acciones:

Información relacionada

Integraciones para las API de REST en API Gateway

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

Creación de integraciones para las API de HTTP en API Gateway

Cuotas de Amazon API Gateway y notas importantes