我试图将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代理集成”,一切正常。但我想知道为什么我的响应格式不正确,以及如何修复它。谢谢
我想通了。我以不正确的方式发送了回复。
响应必须直接作为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状态。