2017-03-27 5 views
0

Ich habe erstellt aws apigateway Lambda-Integration für meinen Proxy-Server. Wenn ich eine Anfrage an das Gateway mache, wird die Anfrage erfolgreich ausgeführt. Die Lambda-Funktion führt auch erfolgreich und schreibt Reaktion in Output mit status als 200. Aber apigateway gibt immer 502.aws apigateway Lambda immer zurück 502

Snippet handle():

BufferedReader reader = new BufferedReader(new 
     InputStreamReader(inputStream)); 
     JSONObject event = (JSONObject) parser.parse(reader); 
     request = Input.builder().setEvent(event).build(); 

    Response response = requestManager.handleRequest(request); 
    logger.log(String.format("Response [%s]", response.toString())); 

    JSONObject responseJson = new JSONObject(); 
    responseJson.put("statusCode", response.getStatusCode()); 
    responseJson.put("headers", response.getHeaders()); 
    JSONObject jsonBody = (JSONObject) parser.parse(response.getBody()); 
    responseJson.put("body", jsonBody); 
    OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); 
    logger.log("response recieved"); 
    logger.log(String.format("responseJson [%s]", responseJson)); 
    writer.write(responseJson.toJSONString()); 
    writer.close(); 
    logger.log(String.format("output stream [%s]", outputStream)); 

ich etwas fehle?

Antwort

1

502 Fehler mit Lambda geben normalerweise an, dass Sie die Lambda-Proxy-Methode verwenden und keine richtige JSON-Antwort generieren. Stellen Sie sicher, dass Ihre Antwort der appropriate format entspricht.

Wenn Sie immer noch Probleme haben, teilen Sie bitte ein Beispiel JSON, das von Ihrer Lambda-Funktion generiert wurde.

+0

Ausgangsstrom [ { "Header": { "Keep-Alive": "", "Transfer-Encoding": "gestückelt", "Server": "Apache", "Vary": " Accept-Encoding " "Datum": "", "Content-Type": "application/json; charset = UTF-8" }, "Körper": { "Metadaten": {}, " http_code ": 200, " Daten ": { " Größe ": 1, " list_item_type ":" Nachricht ", " Typ ":" Nachrichten ", " Artikel ": [ ] }, "message": "", "Status": "Erfolg" }, "status": 200 } ] –

+1

@kunalshrivastava Körper wird erwartet, dass ein String sein. Wenn Sie JSON zurückgeben möchten, müssen Sie es umgehen. –

0

Ich hatte das gleiche Problem, wo alle meine Logs sagten, dass das Lambda erfolgreich ausgeführt wurde, aber API Gateway gab immer noch 502s bei jeder Anfrage zurück. Es stellte sich heraus, dass ich vergessen habe, die Antwortstatuscodes in der API-Gateway-Konsole so zu konfigurieren, dass Fehler verursacht wurden, da die Antwort selbst bei korrekter Formatierung "falsch" war. Fügen Sie der Route auf Ihrem Gateway einfach den Statuscode 200, 400, 403 usw. hinzu, um das Problem zu lösen.

Verwandte Themen