Como soluciono erros HTTP 504 de uma API REST do API Gateway com um backend do Lambda?

3 minuto de leitura
0

Recebo um código de status de erro HTTP 504 quando invoco uma API REST usando o Amazon API Gateway com um backend do AWS Lambda. Como solucionar esse erro?

Resolução

Quando suas solicitações de API REST retornam um código de status de erro HTTP 504, você deve executar várias verificações.

Verificar se há picos em IntegrationLatency

Verifique se há um pico em IntegrationLatency no API Gateway, analisando o tempo de duração da latência de integração. Para ver o tempo de duração de IntegrationLatency, configure a variável de registro em log de acesso $context.integration.latency para o registro em log da API HTTP.

Para obter mais informações, consulte Configurar o registro em log da API do Amazon CloudWatch usando o console do API Gateway.

Um pico de IntegrationLatency no API Gateway indica que a solicitação passou a maior parte do tempo no Lambda. Verifique a métrica de desempenho de duração da função do Lambda para confirmar isso.

Para obter mais informações, consulte Trabalhar com métricas de funções do Lambda.

Analisar solicitações com o CloudWatch Logs Insights

Use o Amazon CloudWatch Logs Insights para analisar solicitações que resultaram em erros 504. Para analisar as solicitações, no console do CloudWatch, no painel de navegação, escolha Logs, Log Insights. Selecione seu grupo de logs do API Gateway. Em seguida, defina a hora relativa com uma das seguintes 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

-ou-

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

Instrumentar rastreamentos do X-Ray

Se os erros 504 continuarem a acontecer, determine onde a função do Lambda está gastando seu tempo. Instrumente rastreamentos do AWS X-Ray para funções do Lambda com base no tempo de execução da função do Lambda.

Para o Python:

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

Para o Node.js:

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

Observação: você precisa criar um novo pacote de implantação depois de instrumentar os rastreamentos do X-Ray em uma função do Lambda.

Implementar novas tentativas de API

Quando ocorrer um erro 504 e a solicitação não for encontrada no Lambda, implemente novas tentativas de API no cliente. O erro pode ter resultado de uma falha temporária de rede no API Gateway.

Verificar a configuração da função do Lambda

Certifique-se de que sua função do Lambda tenha somente a lógica de processamento específica do evento do API Gateway. Dessa forma, a função do Lambda demora muito menos para ser executada e pode acompanhar os eventos recebidos.

As APIs REST têm um tempo limite máximo de integração padrão de 29 segundos. Portanto, certifique-se de que a duração da execução da função do Lambda seja inferior a 29 segundos.

Se você tiver um caso de uso em que a aplicação é sensível ao tempo, consulte Configurar a invocação assíncrona da função do Lambda de backend.


Informações relacionadas

Dimensões e métricas do API Gateway

Configurar o registro em log do CloudWatch para uma API REST no API Gateway

Visualizar eventos de log do API Gateway no console do CloudWatch

Rastrear solicitações de usuários para APIs REST usando o X-Ray

Usar o Lambda com o X-Ray