【问题标题】:AWS API Gateway - Lambda Proxy (Integration Request) - Internal Server ErrorAWS API Gateway - Lambda 代理(集成请求) - 内部服务器错误
【发布时间】:2019-10-26 07:12:52
【问题描述】:

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

对缩小问题范围有任何想法/帮助吗?如果有帮助,我可以按要求发布更多信息。

【问题讨论】:

    标签: aws-lambda api-gateway


    【解决方案1】:

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

    只是一个怪癖,一旦你了解它在做什么,它就会变得有意义。也就是说,在依次测试 Lambda 和 API Gateway 时,相同的有效负载失败,这很奇怪。

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 1970-01-01
      • 2023-02-16
      • 2017-04-07
      • 1970-01-01
      • 2019-12-10
      • 2021-02-04
      • 1970-01-01
      • 2019-08-03
      相关资源
      最近更新 更多