aws-lambda - AWS API Gateway - Lambda 代理(集成请求) - 内部服务器错误
问题描述
与 DynamoDB 进行简单的 Lambda POST 集成。在执行时将一条记录插入 Dynamo。在AWS Lambda中进行测试时效果很好。
响应输出为:
{
"isBase64Encoded": false,
"statusCode": 204,
"headers": {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true
},
"body": "{}"
}
根据规范(afaict) ,此响应以编程方式定义为 Lambda 响应处理的一部分。
但是,当通过API Gateway中的测试运行时,我收到502
内部服务器错误。我正在使用 Lambda-Proxy 集成,如下所示:
Cloudwatch 日志表明:
{ ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
at Request.extractError
使用有限的堆栈跟踪(webpack 已经很好地散列了代码)。上述错误表明 DynamoDB 没有正确接收有效负载,或者没有以它想要的格式接收所需属性。但是,我从 lambda 中采用了用于(成功)测试(调整 ID 在运行之间唯一)的相同 JSON,并相信我的请求标头(Content-Type:application/json)是明智的。
关于缩小问题范围的任何想法/帮助?如果有帮助,我可以按要求发布更多信息。
解决方案
好的,通过记录所有输出(并在 CloudWatch 中检查)解决了这个问题,特别是event
对象。在Lambda 测试模式下运行时,ID 和其他 POST 属性在事件对象的根中传递。但是,当使用lambda-proxy模式时,集成会重新映射事件对象层次结构,并且 POST 属性会被 JSON 字符串化到body
属性中。
一旦你了解它在做什么,这只是一个怪癖。也就是说,在依次测试 Lambda 和 API Gateway 时,相同的有效负载失败是很奇怪的。
推荐阅读
- go - 将结构编组为带有额外标记的 xml
- node.js - Angular:在 git-bash 中创建 Angular 项目时出现 ng 错误
- awk - 使用 awk 打印多个文件的首次出现
- sql - VERTICA SQL:vchar 列中的 Json 未正确加载到 Flex 表中
- excel - 从excel中的单元格中删除不必要的文本时出错
- python - 如何计算 Leave One Out Cross Validation 的敏感性分数?
- android - 如何知道 ExapndableListView 中是否存在特定组?
- azure - 发布 azure 函数时,如何在 Visual Studio Code 中管理配置文件设置?
- regex - 正则表达式范围小数 0.10 - 99.99
- sql - 年份和范围明智的数据透视表