J'ai créé une API par AWS API Gateway et Lambda qui est la même ' https : //github.com/aws-samples/simple-websockets-chat-app '. Mais l'API ne fonctionne pas la confiance. J'obtiens une erreur lorsque j'essaye de me connecter. Son message est "La connexion WebSocket à 'wss: //b91xftxta9.execute-api.eu-west-1.amazonaws.com/dev' a échoué: Erreur lors de l'établissement de liaison WebSocket: Code de réponse inattendu: 500"
Mon code de connexion
var ws= new WebSocket("wss://b91xftxta9.execute-api.eu-west-1.amazonaws.com/dev"); ws.onopen=function(d){ console.log(d); }
3 Réponses :
essayez d'utiliser wscat -c wss: //b91xftxta9.execute-api.eu-west-1.amazonaws.com/dev dans un terminal. Cela devrait vous permettre de le connecter. Si vous n'avez pas installé wscat, faites simplement une installation npm -g wscat
Essayez d'ajouter $ context.error.validationErrorString et $ context.integrationErrorMessage aux journaux de la scène.
J'ai ajouté un tas de choses au Section Format de journal , comme ceci:
{ "requestId": "QDu0QiP3oANFPZv=", "ip": "76.54.32.210", "requestTime": "21/Jul/2020:21:37:31 +0000", "httpMethod": "POST", "routeKey": "$default", "status": "500", "protocol": "HTTP/1.1", "integrationErrorMessage": "The IAM role configured on the integration or API Gateway doesn't have permissions to call the integration. Check the permissions and try again.", "responseLength": "35" }
Au début du développement, cela m'a permis de voir ce type d'erreur:
{ "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod", "routeKey":"$context.routeKey", "status":"$context.status", "protocol":"$context.protocol", "errorMessage":"$context.error.message", "path":"$context.path", "authorizerPrincipalId":"$context.authorizer.principalId", "user":"$context.identity.user", "caller":"$context.identity.caller", "validationErrorString":"$context.error.validationErrorString", "errorResponseType":"$context.error.responseType", "integrationErrorMessage":"$context.integrationErrorMessage", "responseLength":"$context.responseLength" }
Pour obtenir plus de détails, activez la journalisation pour votre API: Étapes -> Journaux / traçage -> Paramètres CloudWatch -> Activez CloudWatch Logs
. Ensuite, envoyez à nouveau une demande de connexion et surveillez vos journaux d'API dans CloudWatch. Dans mon cas, j'ai eu l'erreur suivante:
L'exécution a échoué en raison d'une erreur de configuration: API Gateway n'a pas l'autorisation d'assumer le rôle fourni {arn_of_my_role}
J'ai donc ajouté API Gateway aux relations de confiance de mon rôle, comme indiqué ici et cela a résolu le problème.
Le code de réponse
500
est le code HTTP pourInternal Server Error
... donc votre première étape consiste à vérifier les journaux de la passerelle API.