Como posso solucionar erros de tempo limite da API HTTP 504 com o API Gateway?

4 minuto de leitura
0

Quando invoco minha API REST, API HTTP ou API Websocket usando o Amazon API Gateway, recebo um código de status de erro HTTP 504.

Breve descrição

Se uma solicitação de integração demorar mais do que o parâmetro de tempo limite máximo de integração da API Gateway REST API, o API Gateway retornará um código de status HTTP 504.

Para solucionar erros de tempo limite 504 do API Gateway, primeiro identifique e verifique a origem do erro nos logs de execução do Amazon CloudWatch. Em seguida, use um ou mais dos métodos a seguir para reduzir o runtime de suas solicitações de integração até que elas não atinjam o tempo limite.

Resolução

Para identificar e verificar a origem do erro 504 em seus registros do Amazon CloudWatch

1.    Para a API Rest e a API Websocket, configure o registro em log de execução do API Gateway para os erros 504. Para a API HTTP, ative o registro em log para gravar registros nos registros do CloudWatch.

2.    Tente reproduzir manualmente o erro 504 na API.

3.    Ative o registro em log de acesso para a API e, em seguida, use as seguintes variáveis de parâmetro 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 as variáveis $context para modelos de dados, autorizadores, modelos de mapeamento e registro de acesso do CloudWatch.

4.    Use a seguinte consulta do CloudWatch Log Insights para filtrar o código de status '5XX' dos registros de acesso:

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

5.    No console do CloudWatch, visualize os registros em log de execução do API Gateway para a integração que está recebendo o erro.

6.    Acompanhe o ID da solicitação em seus logs do CloudWatch. Se houver tempos limite na integração, você verá um erro “Falha na execução devido a um tempo limite” após a linha “Corpo da solicitação do endpoint após transformações:”. Para mais informações, consulte Como faço para encontrar erros de API REST do API Gateway em meus registros do CloudWatch?

7.    Use a seguinte consulta do CloudWatch Log Insights para filtrar o erro e selecionar seu grupo de logs de execução do API Gateway:

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

8.    Para determinar a origem do erro, verifique se o endpoint de integração associado foi invocado.

9.    Confirme quanto tempo a integração levou para concluir o processamento da solicitação e responder ao API Gateway.

10.    Se a integração não foi invocada, implemente novas tentativas de API no cliente. (o erro pode ter resultado de uma falha temporária de rede no serviço API Gateway)

Observação:verifique se seu aplicativo é idempotente. Isso evita conflitos de dados quando você repete a solicitação de API.

-ou-

Se a integração foi invocada, mas ainda assim retornou uma mensagem de erro 504, tente reduzir o runtime da integração. Se for uma API HTTP, você pode tentar aumentar o parâmetro de tempo limite máximo da solicitação de integração.

Observação: O tempo limite máximo de integração padrão da API REST do API Gateway é de 29 segundos. Para a API HTTP, o tempo limite pode ser configurado para até o valor máximo de 30 segundos. Os limites máximos de valor não podem ser aumentados.

Para reduzir o runtime da sua integração

  • Verifique se sua integração de back-end inclui somente a lógica necessária para que o API Gateway envie uma resposta HTTP ao cliente. Considere mover qualquer lógica não dependente ou de pós-processamento para outro serviço, como o Lambda.
  • Se as latências de rede estiverem causando o erro 504, implemente a lógica de repetição no aplicativo do lado do cliente.
  • Melhore o desempenho da integração de back-end seguindo as melhores práticas de otimização para sua plataforma.
  • Considere configurar a invocação assíncrona da função do Lambda de back-end.

Informações relacionadas

Configurar integrações da API REST

Configurar uma solicitação de integração da API WebSocket no API Gateway

Configurar integrações para APIs HTTP

Cotas e observações importantes do Amazon API Gateway