Como encontro erros da API REST do API Gateway em meus logs do CloudWatch?
Quero encontrar uma falha específica na solicitação da API REST do Amazon API Gateway em meus logs do Amazon CloudWatch. Como posso fazer isso?
Resolução
O CloudWatch fornece dois tipos de registro em log de API: registro em log de acesso e de execução. Para obter mais informações sobre os diferentes tipos de registro em log de API, consulte Formatos de log do CloudWatch para o API Gateway.
Para encontrar uma falha específica na solicitação da API REST do API Gateway usando os logs do CloudWatch, faça o seguinte.
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.
Para encontrar uma falha na solicitação da API REST usando os logs de acesso do CloudWatch
1. Configure o log de acesso do API CloudWatch usando o console do API Gateway.
Observação: o exemplo a seguir usa o formato de log JSON CloudWatch e inclui um campo de mensagem para o contexto $context.error.message.
2. Execute o comando filter-log-events da AWS CLI nos logs de acesso do API Gateway usando seu utilitário de pesquisa preferido.
Exemplo de comando filter-log-events que usa o utilitário de pesquisa “grep” para logs de acesso ao API Gateway
Importante: altere o log-group-name para o nome do grupo de logs de acesso.
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
3. Verifique a resposta ao comando filter-log-events para identificar erros. A resposta do comando retornará um objeto com todas as variáveis $context que você mapeou.
Exemplo de resposta do comando filter-log-events
{ "requestId": "17cb49b2-c061-11e9-bc30-f118c8b08d5f", "ip": "1.2.3.4", "caller": "-", "user": "-", "requestTime": "28/Aug/2019:15:10:34 +0000", "httpMethod": "GET", "resourcePath": "/iam", "status": "403", "message": "Missing Authentication Token", "protocol": "HTTP/1.1", "responseLength": "42" }
Para encontrar uma falha na solicitação da API REST usando os logs de execução do CloudWatch
1. Configure o log de execução do API CloudWatch usando o console do API Gateway.
Importante: para evitar o armazenamento de informações confidenciais, desative a opção Registrar em log dados completos de solicitações/respostas antes de passar para a produção.
2. Execute o seguinte comando cURL para replicar a solicitação de API que falhou:
Importante: substitua abcd1234 pelo seu ID de API e us-east-1 pela região da AWS em que sua API está.
curl -X GET https://abcd1234.execute-api.us-east-1.amazonaws.com/dev/myapi -v
3. Observe o valor x-amzn-requestid nos cabeçalhos de resposta da API. Esse valor é necessário na próxima etapa.
Exemplo de cabeçalhos de resposta do API Gateway
< content-type: application/json < content-length: 41 < x-amzn-requestid: 17cb49b2-c061-11e9-bc30-f118c8b08d5f < x-amz-apigw-id: eh7enHGIvHcFnPg=
4. Execute o comando filter-log-events da AWS CLI nos logs de execução do API Gateway usando seu utilitário de pesquisa preferido.
Exemplo de comando filter-log-events que usa o utilitário de pesquisa “grep” para logs de execução do API Gateway
Importante: altere o log-group-name para o nome do grupo de logs de acesso.
aws logs filter-log-events --log-group-name 'API-Gateway-Execution-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
5. Verifique a resposta ao comando filter-log-events para identificar erros. Veja a seguir exemplos dos tipos de mensagens de erro que você pode ver:
Exemplos de erros de permissões do API Gateway
(b59c91c8-3386-4478-b2b4-c4d63191756e) Execution failed due to configuration error: Invalid permissions on Lambda function (b59c91c8-3386-4478-b2b4-c4d63191756e) Gateway response type: DEFAULT_5XX with status code: 500 (b59c91c8-3386-4478-b2b4-c4d63191756e) Gateway response body: {"message": "Internal server error"}
Exemplo de erros de tempo limite de integração do API Gateway
(2a1db04d-ac7c-463f-b9bd-478285467d58) Execution failed due to a timeout error (2a1db04d-ac7c-463f-b9bd-478285467d58) Gateway response type: DEFAULT_5XX with status code: 504 (2a1db04d-ac7c-463f-b9bd-478285467d58) Gateway response body: {"message": "Endpoint request timed out"}
Exemplo de erros de integração de back-end do API Gateway
(631ff793-2c5b-413d-a31d-f2cd3f75708b) Endpoint response body before transformations: {"errorMessage": "division by zero", "errorType": "ZeroDivisionError", "stackTrace": [" File \"/var/task/lambda_function.py\", line 7, in lambda_handler\n c=a/b\n"]} (631ff793-2c5b-413d-a31d-f2cd3f75708b) Lambda execution failed with status 200 due to customer function error: division by zero. Lambda request id: 7f0d8fc1-33ce-4bf9-8685-df78e179da5c (631ff793-2c5b-413d-a31d-f2cd3f75708b) Gateway response type: DEFAULT_5XX with status code: 502 (631ff793-2c5b-413d-a31d-f2cd3f75708b) Gateway response body: {"message": "Internal server error"}
Se você não conseguir obter o ID da solicitação
1. Obtenha o código de status HTTP ou a mensagem de erro retornada, ou ambos, dos logs do aplicativo do lado do cliente.
2. Execute o comando filter-log-events da AWS CLI nos logs de acesso do API Gateway. Use o utilitário de pesquisa “grep” para o código de status HTTP ou para a mensagem de erro retornada.
Exemplo de comando filter-log-events que usa o utilitário de pesquisa “grep” para um código de status HTTP
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '504'
Exemplo de comando filter-log-events que usa o utilitário de pesquisa “grep” para uma mensagem de erro retornada do lado do cliente
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep 'Endpoint request timed out'
3. Encontre o ID da solicitação nos resultados dos logs de acesso.
4. Siga o procedimento na seção Rastreamento de respostas de API em logs de execução deste artigo.
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 10 meses
- AWS OFICIALAtualizada há 2 meses
- AWS OFICIALAtualizada há 4 anos