Recebi um código de status de erro HTTP 504 quando usei o Amazon API Gateway para invocar minha API REST, API HTTP ou API de WebSocket.
Breve descrição
Quando uma solicitação de integração demorar mais do que o parâmetro de tempo limite máximo de integração do API Gateway configurada, o API Gateway retornará um código de status 504 de HTTP.
Para solucionar erros de tempo limite 504 do API Gateway, primeiro identifique e verifique a origem do erro nos logs de eventos do Amazon CloudWatch. Em seguida, use um dos métodos a seguir para reduzir o runtime de suas solicitações de integração até que elas não mais atinjam o tempo limite.
Também é possível aumentar o limite de tempo de integração para APIs REST regionais e privadas acima do limite padrão de 29 segundos.
Resolução
Identifique e verifique a origem do erro 504 em seus logs do CloudWatch
Conclua as seguintes etapas:
-
Para a API REST e a API de WebSocket, configure os logs do API Gateway para os erros 504. Para a API HTTP, ative os logs para gravar logs nos logs do CloudWatch.
-
Tente reproduzir manualmente o erro 504 na API.
-
Ative os logs de acesso para a API. Em seguida, use os seguintes espaços reservados para parâmetros para diagnosticar a origem do erro:
$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 mais informações, consulte Variáveis de contexto para transformações de dados.
-
Para filtrar o código de status "5##" dos logs de acesso, use a seguinte consulta do CloudWatch Log Insights:
fields @timestamp, @message, @logStream| filter status like '5'
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
-
No console do CloudWatch, visualize os eventos de log do API Gateway para a integração que recebe o erro.
-
Acompanhe o ID da solicitação em seus CloudWatch Logs. Se houver tempos limite na integração, um erro "Execution failed due to a timeout" aparecerá após a linha Corpo da solicitação do endpoint após transformações:. Para obter mais informações, consulte Como faço para encontrar erros de API REST do API Gateway em meus logs do CloudWatch?
-
Para filtrar o erro e selecionar seu grupo de logs de execução do API Gateway, use a seguinte consulta do CloudWatch Log Insights:
fields @timestamp, @message|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc
-
Para determinar a origem do erro, revise os logs do back-end e verifique se o endpoint de integração associado foi invocado.
-
Confirme quanto tempo a integração levou para concluir o processo de solicitação e responder ao API Gateway.
-
Se a integração não foi invocada, implemente novas tentativas de API no cliente. O erro pode resultar de uma falha temporária de rede no serviço API Gateway.
Observação: certifique-se de que sua aplicação seja idempotente para evitar conflitos de dados ao tentar novamente a solicitação da API.
Se a integração foi invocada, mas ainda retorna uma mensagem de erro 504, reduza o runtime da integração.
Reduzir o runtime da integração
Conclua as seguintes ações:
Aumentar o limite de tempo de integração para APIs regionais e privadas
É possível enviar uma solicitação de cota para aumentar a cota de limite de tempo de integração padrão para mais de 29 segundos para APIs regionais e APIs privadas. No entanto, esse aumento pode exigir uma limitação na cota de aceleração a nível regional na sua conta da AWS.
Observação: se você aumentar o limite de tempo de integração, certifique-se de alterar o valor de tempo limite padrão de 29 segundos para o novo valor. Por exemplo, altere o valor do tempo limite padrão de 29 segundos nas integrações em que você deseja aplicar o aumento. Em seguida, reimplante a API para que o novo limite de tempo de integração entre em vigor.
Informações relacionadas
Integrações para APIs REST no API Gateway
Configure uma solicitação de integração da API WebSocket no API Gateway
Crie integrações para APIs HTTP no API Gateway
Como soluciono erros de HTTP 504 de uma API REST do API Gateway com um backend do Lambda?