【问题标题】:Api Gateway with lambda integration returns lambda output directly具有 lambda 集成的 Api Gateway 直接返回 lambda 输出
【发布时间】:2021-06-21 18:03:20
【问题描述】:

我有一个 lambda,它返回 https://docs.aws.amazon.com/apigateway/latest/developerguide/handle-errors-in-lambda-integration.html 中定义的 statusCodebodyisBase64Encoded

但是在 api 网关集成之后(作为 lambda 集成而不是 lambda 代理),它会返回完全一样的响应。

{
  "statusCode": 200,
  "body": "{\"key1\":\"value 1\",\"foo\":\"bar\"}",
  "isBase64Encoded": false
}

我是否需要响应映射模板中的某些内容来将此 lambda 响应转换为正确的 http 响应?

【问题讨论】:

  • 如果您不使用 Lambda 代理,您从 Lambda 发回的任何 json 都将返回给客户端。所以,我建议只是通过{"key1":"value 1","foo":"bar"}

标签: aws-lambda aws-api-gateway


【解决方案1】:

LAMBDA_PROXY : 请求body 包含与请求相关的详细信息,包括标头、键、上下文、查询参数等。类似地,响应 json 应转换为字符串并与 statusCode 一起包装在 json 中。到底是怎么回事。

其中 LAMBDA 来自客户端的非代理集成请求按原样传递给 lambda,而来自 Lambda 的响应也按原样传递回客户端。

由于您使用的是非代理集成,因此来自 lambda 的响应应该只是一个 json {"key1":"value 1","foo":"bar"}

非代理集成的状态码始终为 200 OK,无论 Lambda 执行是成功还是失败。

【讨论】:

  • 我应该如何从 Lambda 发送不同的 statusCode?​​span>
  • @Swati 状态码总是返回 200 OK,只要 lambda 成功执行。我不相信我们可以通过非代理 lambda 集成来控制它。你有理由不能 lambda 代理吗?
猜你喜欢
  • 2018-02-14
  • 2018-11-28
  • 2017-04-19
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
相关资源
最近更新 更多