2017-01-25 8 views
1

Ich habe eine AWS Lambda-Funktion, die über AWS API Gateway ausgelöst wird. Wenn ich meine Funktion auf Lambda teste, funktioniert es. Wenn ich eine POST-Anfrage über Ajax an die API-URL sende, erhalte ich einen 502 schlechten Gateway-Fehler.POST-Anfrage an AWS API Gateway Zugriff

XMLHttpRequest cannot load https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/myLambdaFunction. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'mywebsite.com' is therefore not allowed access. The response had HTTP status code 502.

Offensichtlich war dies ein CORS Problem, so dass ich dachte, dass ich die CORS Einstellungen in meiner AWS API-Gateway-URL ändern könnte, die ich tat, aber ich bin immer noch einen Fehler für diese zu bekommen.

Was muss ich auf der AWS-Seite oder auf meiner eigenen Seite ändern, um die URL an die Adresse senden zu können?

+0

haben Sie Ihre API-Gateway bereitstellen erneut, nachdem Sie die CORS-Einstellungen geändert? –

+1

Es gibt einen CORS-Fehler, aber das eigentliche Problem könnte der Fehler 502 sein. Der CORS-Fehler scheint eher eine Nebenwirkung der 502 zu sein als die Ursache. –

+0

yeah ich denke, dein Recht @ Michael-sqlbot - kann den Grund für die 502 nicht herausfinden. Die Protokolle geben keinen Hinweis darauf, was passiert. – luke

Antwort

2

Leider gibt es ein bekanntes Problem mit vielen Klassen von 4xx- und 5xx-Fehlern, bei denen CORS-Header nicht gesendet werden, selbst wenn Sie CORS-Unterstützung über die Konsole hinzugefügt haben. Der CORS-Fehler ist ein Nebeneffekt der Tatsache, dass Ihre API eine 502 zurückgibt. Dies tritt häufig auf, wenn Sie den Integrationstyp LAMBDA_PROXY verwenden und ungültiges JSON von Ihrer Lambda-Funktion zurückgeben.

Bitte versuchen Sie entweder test invoke functionality von der Konsole oder enable logging in Ihrer API zu debuggen weiter.

+1

Hallo Bob! Danke für diese Antwort. Ich nahm an, dass es etwas mit dem Lambda-Proxy und der Antwort zu tun hatte, die ich zurückgab - ich habe das Problem behoben, konnte aber nicht feststellen, dass die CORS-Probleme mich immer noch verfolgen. Ich löste das tatsächlich, indem ich das JS-SDK (das ich nicht kannte) im Browser benutzte und die Funktion neben Cognito-Identitätsmaterial aufruft - und um ehrlich zu sein, ist es viel sauberer und einfacher als die Verwendung eines API-Endpunkts :) – luke

0

Ich löste genau dasselbe Problem, indem ich den CORS-Header selbst ausgab. Siehe unten - und ich hoffe, das wird helfen. Teebo

Amazon docs

function respond(context, responseData) { 
var response = { 
    statusCode: 200, 
    body: JSON.stringify(responseData), 
    headers: { 
    "Content-Type": "application/json; charset=utf-8", 
    "Access-Control-Allow-Origin": "*" 
    } 
}; 
context.succeed(response); } 
+0

Funktion antworten (context, responseData) { // http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html#api- Gateway-Proxy-Integration-lambda-function-NodeJS var response = { status: 200, Körper: JSON.stringify (response~~POS=TRUNC), headers: { 'Content-Type': ‚application/json ; charset = utf-8 ', //' application/json ', ' Zugriffskontrolle-Erlauben-Ursprung ':' * ' } }; context.succeed (Antwort); } // antworten – user7600708