当前位置: 首页 > 知识库问答 >
问题:

无法将API网关与aws lambda集成

谷梁昊空
2023-03-14

我试图将AWS API网关与AWS lambda函数集成。集成工作完美无缺,直到我在集成请求中使用“Lambda代理集成”。

当我在集成请求中选中“使用Lambda代理集成”时,我开始得到:

“由于配置错误,执行失败:Lambda代理响应格式错误”

我在谷歌上搜索了一下,意识到我需要以某种格式返回响应:

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

然而,尽管如此,我仍然看到同样的错误。我做错了什么?

这就是我的Lambda函数的样子:

@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网关控制台测试API时,我得到的响应是:

收到答复。集成延迟:4337毫秒2017年8月7日星期一00:33:45 UTC:转换前的endpoint响应正文:“{\'isBase64Encoded\':false,\'statusCode\':200,\'headers\':null,\'body\':\'n10k\ U网站存储库上载到S3\'”

世界协调时2017年8月07 00:33:45日:endpoint响应标头:{x-amzn-Remaped-Content-L长度=0,x-amzn-recestId=0ff74e9d-7b08-11e7-9234-a1a04edc223f,连接=保持活力,Content-L长度=121,日期=周一,格林尼治标准时间2017 00:33:458月7日,X-amzn-Trace-Id=root=1-5987b565-7a66a2fd5fe7a5ee14c22633;采样=0,内容类型=应用程序/json}

世界协调时2017年8月07 00:33:45日星期一:由于配置错误执行失败:畸形Lambda代理响应

2017年8月7日星期一00:33:45 UTC:方法已完成,状态:502

如果我取消选中“使用Lambda代理集成”,一切正常。但我想知道为什么我的响应格式不正确,以及如何修复它。谢谢

共有1个答案

楚丰羽
2023-03-14

我想通了。我以不正确的方式发送了回复。

响应必须直接作为POJO对象发送回来,而不是序列化POJO并作为String发送回来。我就是这样让它工作的。

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\"}";
    }
} 

希望这对别人有帮助!

 类似资料:
  • 我试图创建一个短信机器人使用Twilio,Aws API网关和Aws Lambda的帮助。 网址:https://xxxxxxx.execute-api.us-west-2.amazonaws.com/latest/ 参数fromcity=Moorestown&to=%2b18569246402&fromzip=08057&body=hello&toCountry=us&fromstate=nj&

  • 文档在控制台中的操作非常清楚,https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html,但在CDK中复制真的很痛苦。 我的问题是如何在CDK中创建一个以s3(中间没有lambda)为支持的RESTAPI,或者至少如何创建apigateway。AWS整合

  • 我有一个关于Cognito和API网关集成的问题,我希望你能帮助我。我正在考虑制作一个应用程序,我希望与第三方(Facebook,Twitter...)进行身份验证,所以我放弃了Cognito用户池,然后我有了Cognito身份池,但这是我怀疑增长的地方。 如何将其与API网关集成 谢谢你的帮助

  • 我在做一个无服务器架构的项目。 API网关不能提供适当的方法来处理这类问题。 所以我开始想我能做什么: AWS WAF显然是一个解决方案。 我在API网关前面放了一个云前端分发版。 我意识到这可能是一个变通的解决方案,但它是吗? 以下是我发现的问题: 有什么我误解了吗?

  • 我正在研究一个示例poc,我正在尝试集成Spring云api网关 在我的pom.xml中,我有 在我的应用程序中。yml我有 在我的主课上 我能够直接从它们各自的端口访问服务,但是当我试图从端口网关端口ie 9191访问api时,我得到 ***2022-09-08 16:23:34.644错误4128-[ctor-http-nio-3]a . w . r . e . abstracterrorwe

  • 我有一个aws lambda函数,它返回以下响应: 但是我在前端角度应用程序中得到以下误差。 CORS策略阻止从来源“HTTP://127.0.0.1:8080”访问位于“https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/price”的XMLHttpRequest:对飞行前请求的响应没有通过访问控制检查:它没有HTTP ok状态。