0

AWS APIゲートウェイとAWSラムダ関数を統合しようとしています。インテグレーション要求で「ラムダプロキシ統合」を使用するまで、統合は完璧に機能します。aws lambdaとAPIゲートウェイを統合できません

私は統合要求で「使用ラムダプロキシの統合」をチェックすると、私は取得を開始:

"Execution failed due to configuration error: Malformed Lambda proxy response"

私は少し周りググと私は特定のフォーマットで応答を返送する必要があることに気づい:

{ 
    "isBase64Encoded": true|false, 
    "statusCode": httpStatusCode, 
    "headers": { "headerName": "headerValue", ... }, 
    "body": "..." 
} 

しかし、それでも、私はまだ同じエラーが表示されます。私は間違って何をしていますか?

@Override 
    public String handleRequest(Object input, Context context) { 
     context.getLogger().log("Input: " + input); 
     return uploadN10KWebsiteRepositoryToS3(); 
    } 

    private String uploadN10KWebsiteRepositoryToS3() { 
     /*BitbucketToS3Upload.JsonResponse jsonResponse = new BitbucketToS3Upload.JsonResponse(); 
     jsonResponse.body = "n10k_website repository uploaded to S3..."; 
     String jsonString = null; 
     try { 
      ObjectMapper mapper = new ObjectMapper(); 
      jsonString = mapper.writeValueAsString(jsonResponse); 

      HashMap<String, Object> test = new HashMap<String, Object>(); 
      test.put("statusCode", 200); 
      test.put("headers", null); 
      test.put("body", "n10k_website repository uploaded to S3"); 
      test.put("isBase64Encoded", false); 

      jsonString = mapper.writeValueAsString(test); 
     } 
     catch (Exception e) { 
      int i = 0; 
     }*/ 

     //return jsonString; 
     return "{\"isBase64Encoded\":false, \"statusCode\":200, \"headers\":null, \"body\": \"n10k_website repository uploaded to S3\"}"; 
    } 

私はAPI GatewayコンソールからAPIをテストする場合、これは私が得る応答である:

これは私のラムダ関数は次のようになります

Received response. Integration latency: 4337 ms Mon Aug 07 00:33:45 UTC 2017 : Endpoint response body before transformations: "{\"isBase64Encoded\":false, \"statusCode\":200, \"headers\":null, \"body\": \"n10k_website repository uploaded to S3\"}"

Mon Aug 07 00:33:45 UTC 2017 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=0ff74e9d-7b08-11e7-9234-a1a04edc223f, Connection=keep-alive, Content-Length=121, Date=Mon, 07 Aug 2017 00:33:45 GMT, X-Amzn-Trace-Id=root=1-5987b565-7a66a2fd5fe7a5ee14c22633;sampled=0, Content-Type=application/json}

Mon Aug 07 00:33:45 UTC 2017 : Execution failed due to configuration error: Malformed Lambda proxy response

Mon Aug 07 00:33:45 UTC 2017 : Method completed with status: 502

Iアンチェックします'Use Lambda Proxy integration'、すべて正常に動作します。しかし、なぜ私の応答が不正なのか、それを修正する方法を知りたい。ありがとう!

答えて

2

私はそれを理解しました。私は返答を間違って送り返していました。

POJOをシリアル化してStringとして返すのではなく、その応答をPOJOオブジェクトとして直接返す必要がありました。これが私の仕事の仕組みです。

public class BitbucketToS3Upload implements RequestHandler<Object, JsonResponse> { 

    @Data 
    public static class JsonResponse { 
     boolean isBase64Encoded = false; 
     int statusCode = HttpStatus.SC_OK; 
     String headers = null; 
     String body = null; 
    } 

    @Override 
    public JsonResponse handleRequest(Object input, Context context) { 
     context.getLogger().log("Input: " + input); 

     return uploadN10KWebsiteRepositoryToS3(); 
    } 

    private JsonResponse uploadN10KWebsiteRepositoryToS3() { 
     BitbucketToS3Upload.JsonResponse jsonResponse = new BitbucketToS3Upload.JsonResponse(); 
     jsonResponse.body = "n10k_website repository uploaded to S3"; 
     String jsonString = null; 
     try { 
      ObjectMapper mapper = new ObjectMapper(); 
      jsonString = mapper.writeValueAsString(jsonResponse); 

      System.out.println(jsonString); 

      //jsonString = mapper.writeValueAsString(test); 
     } 
     catch (Exception e) { 
      int i = 0; 
     } 

     return jsonResponse; 
     //return "{\"isBase64Encoded\":false, \"statusCode\":200, \"headers\":null, \"body\": \"n10k_website repository uploaded to S3\"}"; 
    } 
} 

これが誰かを助けてくれることを願っています!

関連する問題