与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": "{}"
}
此响应根据the spec(依法)以编程方式定义为Lambda响应处理的一部分。
但是,当通过 API网关中的测试运行时,出现502
内部服务器错误。我正在使用Lambda-Proxy集成,如下所示:
Cloudwatch日志表明:
{ ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
at Request.extractError
使用有限制的stacktrace(webpack很好地对代码进行了哈希处理)。上面的错误可能表明DynamoDB无法正确接收有效负载,或者表示它希望采用必需属性的格式。但是,我从lambda取得了用于(成功的)测试(将ID在运行之间唯一的)所使用的相同JSON,并认为我的请求标头(Content-Type:application / json)是明智的。
有什么想法/帮助缩小问题范围?如果有帮助,我可以根据要求发布更多信息。
答案 0 :(得分:0)
好的,通过记录所有输出(并在CloudWatch中检查),特别是event
对象,解决了这个问题。在 Lambda测试模式下运行时,ID和其他POST属性在事件对象的根目录中传递。但是,在使用 lambda-proxy 模式时,集成会重新映射事件对象层次结构,并且POST属性将JSON字符串化为body
属性。
一个奇怪的问题在您了解它的作用后才有意义。也就是说,奇怪的是,当依次测试Lambda和API网关时,相同的有效负载会失败。