AWS API 网关 - Lambda 代理(集成请求) - 内部服务器错误

AWS API Gateway - Lambda Proxy (Integration Request) - Internal Server Error

与 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 (afaict),此响应以编程方式定义为 Lambda 响应处理的一部分。

但是,当 运行 通过 API 网关 中的测试时,我收到 502 内部服务器错误。我正在使用 Lambda-Proxy 集成如下:

Cloudwatch 日志表明:

{ ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
at Request.extractError 

使用有限的堆栈跟踪(webpack 很好地散列了代码)。上述错误表明 DynamoDB 没有正确接收负载,或者接收的负载格式不符合要求的属性。但是,我从 lambda 中获取了用于(成功的)测试(将 ID 调整为在 运行s 之间是唯一的)的相同 JSON,并且相信我的请求 header(Content-Type: application/json) 是明智的。

对于缩小问题范围有什么想法/帮助吗?如果有帮助,我可以 post 按要求提供更多信息。

好的,通过记录所有输出(并在 CloudWatch 中检查)解决了这个问题,特别是 event 对象。在 Lambda Test 模式下 运行 时,ID 和其他 POST 属性在事件对象的根中传递。但是,当使用 lambda-proxy 模式时,集成会重新映射事件对象层次结构,并且 POST 属性被 JSON 字符串化为 body属性。

一旦您理解了它的作用,这只是一个有意义的怪癖。也就是说,奇怪的是,在依次测试 Lambda 和 API 网关时,相同的有效载荷失败。