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

时间:2019-06-11 19:55:36

标签: aws-lambda api-gateway

与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集成,如下所示:

API Gateway Lamba Proxy Integration

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)是明智的。

有什么想法/帮助缩小问题范围?如果有帮助,我可以根据要求发布更多信息。

1 个答案:

答案 0 :(得分:0)

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

一个奇怪的问题在您了解它的作用后才有意义。也就是说,奇怪的是,当依次测试Lambda和API网关时,相同的有效负载会失败。