¿Cómo puedo encontrar los errores de la API de REST de la API Gateway en los registros de CloudWatch?
Quiero encontrar un error específico en la solicitud de la API de REST de Amazon API Gateway en los registros de Amazon CloudWatch. ¿Cómo puedo hacerlo?
Resolución
CloudWatch proporciona dos tipos de registro de API: registro de acceso y registro de ejecución. Para obtener más información sobre los diferentes tipos de registro de API, consulte Formatos de registro de CloudWatch para API Gateway.
Para encontrar un error específico en la solicitud de la API de REST de API Gateway usando registros de CloudWatch, haga lo siguiente.
Nota: Si recibe errores al ejecutar comandos de la AWS Command Line Interface (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.
Para encontrar un error en una solicitud de la API de REST mediante los registros de acceso de CloudWatch
Nota: El siguiente ejemplo usa el formato de registro JSON de CloudWatch e incluye un campo de mensaje para el contexto $context.error.message.
- Ejecute el comando filter-log-events del comando AWS CLI en los registros de acceso de API Gateway con la utilidad de búsqueda que prefiera.
Ejemplo de comando filter-log-events que usa la utilidad de búsqueda «grep» para los registros de acceso a API Gateway
Importante: Cambie log-group-name para acceder al nombre del grupo de registro.
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
- Compruebe la respuesta al comando filter-log-events para identificar errores. La respuesta del comando devolverá un objeto con todas las variables $context que ha mapeado.
Ejemplo de respuesta al 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 un error en una solicitud de la API de REST mediante los registros de ejecución de CloudWatch
Importante: Para no almacenar información confidencial, desactive Registrar datos completos de solicitudes/respuestas antes de pasar a la fase de producción.
- Ejecute el siguiente comando de cURL para replicar la solicitud de la API que ha fallado:
Importante: Sustituya abcd1234 por el ID de la API y us-east-1 por la región de AWS en la que se encuentra la API.
curl -X GET https://abcd1234.execute-api.us-east-1.amazonaws.com/dev/myapi -v
- Anote el valor x-amzn-requestid en los encabezados de respuesta de la API. Este valor es obligatorio en el paso siguiente.
Ejemplos de encabezados de respuesta de la API Gateway
< content-type: application/json < content-length: 41 < x-amzn-requestid: 17cb49b2-c061-11e9-bc30-f118c8b08d5f < x-amz-apigw-id: eh7enHGIvHcFnPg=
- Ejecute el comando filter-log-events de AWS CLI en los registros de ejecución de API Gateway con la utilidad de búsqueda que prefiera.
Ejemplo de comando filter-log-events que usa la utilidad de búsqueda «grep» para los registros de ejecución de API Gateway
Importante: Cambie log-group-name para acceder al nombre del grupo de registro.
aws logs filter-log-events --log-group-name 'API-Gateway-Execution-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
- Compruebe la respuesta al comando filter-log-events para identificar errores. Los siguientes son ejemplos del tipo de mensajes de error que puede ver:
Ejemplo de errores de permisos de la 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"}
Ejemplo de errores de tiempo de espera de integración con 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"}
Ejemplo de errores de integración del backend de 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"}
Si no puede obtener el identificador de la solicitud
-
Obtenga el código de estado HTTP o el mensaje de error devuelto, o ambos, a partir de los registros de la aplicación del lado del cliente.
-
Ejecute el comando filter-log-events la AWS CLI en los registros de acceso de la API Gateway. Utilice la utilidad de búsqueda «grep» para el código de estado HTTP o para el mensaje de error devuelto.
Ejemplo de comando filter-log-events que usa la utilidad de búsqueda «grep» para un código de estado HTTP
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '504'
Ejemplo de comando filter-log-events que usa la utilidad de búsqueda «grep» para un mensaje de error devuelto por el lado del cliente
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep 'Endpoint request timed out'
-
Busque el ID de la solicitud en los resultados de los registros de acceso.
-
Siga el procedimiento descrito en la sección Seguimiento de las respuestas a la API en los registros de ejecución de este artículo.
Contenido relevante
- OFICIAL DE AWSActualizada hace 4 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 10 meses