Résolution
CloudWatch fournit deux types de journalisation des API : la journalisation des accès et la journalisation de l'exécution. Pour plus d'informations sur les différents types de journalisation des API, consultez Formats de journal CloudWatch pour API Gateway.
Pour trouver un échec de demande d'API REST API Gateway spécifique à l'aide des journaux CloudWatch, procédez comme suit.
Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI.
Pour trouver un échec de demande d'API REST à l'aide des journaux d'accès CloudWatch
1. Configurez la journalisation de l'accès à l'API CloudWatch à l'aide de la console API Gateway.
Remarque : L'exemple suivant utilise le format de journal JSON CloudWatch et inclut un champ de message pour le contexte $context.error.message.
2. Exécutez la commande AWS CLI filter-log-events sur les journaux d'accès API Gateway à l'aide de votre utilitaire de recherche préféré.
Exemple de commande filter-log-events qui utilise l'utilitaire de recherche « grep » pour les journaux d'accès API Gateway
Important : Remplacez log-group-name par le nom du groupe de journaux d'accès.
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
3. Vérifiez la réponse à votre commande filter-log-events pour identifier les erreurs. La réponse de la commande retournera un objet avec toutes les variables $context que vous avez mappées.
Exemple de réponse de la commande 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"
}
Pour trouver un échec de demande d'API REST à l'aide des journaux d'exécution CloudWatch
1. Configurez la journalisation de l'exécution de l'API CloudWatch à l'aide de la console API Gateway.
Important : Pour empêcher le stockage d'informations sensibles, assurez-vous de désactiver l'option Consigner les données de demande/réponses complètes avant de passer à la production.
2. Exécutez la commande cURL suivante pour répliquer la demande d'API ayant échoué :
Important : Remplacez abcd1234 par votre d'ID API et us-east-1 par la Région AWS dans laquelle se trouve votre API.
curl -X GET https://abcd1234.execute-api.us-east-1.amazonaws.com/dev/myapi -v
3. Notez la valeur de x-amzn-requestid dans les en-têtes de réponse de l'API. Cette valeur est requise à l'étape suivante.
Exemple d'en-têtes de réponse API Gateway
< content-type: application/json
< content-length: 41
< x-amzn-requestid: 17cb49b2-c061-11e9-bc30-f118c8b08d5f
< x-amz-apigw-id: eh7enHGIvHcFnPg=
4. Exécutez la commande AWS CLI filter-log-events sur les journaux d'exécution API Gateway à l'aide de votre utilitaire de recherche préféré.
Exemple de commande filter-log-events qui utilise l'utilitaire de recherche « grep » pour les journaux d'exécution API Gateway
Important : Remplacez log-group-name par le nom du groupe de journaux d'accès.
aws logs filter-log-events --log-group-name 'API-Gateway-Execution-Logs_2mg2xeej0a/test' | grep '17cb49b2-c061-11e9-bc30-f118c8b08d5f'
5. Vérifiez la réponse à votre commande filter-log-events pour identifier les erreurs. Voici des exemples du type de messages d'erreur que vous pouvez voir :
Exemple d'erreurs d'autorisations 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"}
Exemple d'erreurs de délai d'expiration d'intégration 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"}
Exemple d'erreurs d'intégration du backend 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 vous ne parvenez pas à obtenir l'ID de la demande
1. Obtenez soit le code d'état HTTP, soit le message d'erreur renvoyé, soit les deux, à partir des journaux d'application côté client.
2. Exécutez la commande AWS CLI filter-log-events sur les journaux d'accès API Gateway. Utilisez l'utilitaire de recherche « grep » pour le code d'état HTTP ou pour le message d'erreur renvoyé.
Exemple de commande filter-log-events qui utilise l'utilitaire de recherche « grep » pour un code d'état HTTP
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep '504'
Exemple de commande filter-log-events qui utilise l'utilitaire de recherche « grep » pour un message d'erreur renvoyé du côté client
aws logs filter-log-events --log-group-name 'API-Gateway-Access-Logs_2mg2xeej0a/test' | grep 'Endpoint request timed out'
3. Trouvez l'ID de la demande dans les résultats des journaux d'accès.
4. Suivez la procédure décrite dans la section Suivi des réponses de l'API dans les journaux d'exécution de cet article.