是否可以在AWS API Gateway的响应正文映射模板中访问原始请求正文?

时间:2019-02-02 23:15:04

标签: amazon-web-services aws-api-gateway

使用API​​网关,我试图限定接受应用/ JSON一个POST终点执行以下操作:

  1. 异步触发Lambda
  2. 使用由请求正文中的元素组成的JSON有效负载进行响应

我有#1工作。我认为是在书上。

这是我被绊倒的#2。在响应映射模板的上下文中,我似乎无权访问请求正文。我可以使用$ input.params访问原始查询参数,但找不到任何可以给我原始请求正文的属性,因此我需要它来获取要响应的数据。它要么或我需要弄清楚如何获得异步推出拉姆达以某种方式提供原始请求主体。

有人知道这是否可能吗?

我的目标是确保我的API尽可能快地响应,而不会引起Lambda的冷启动来响应,并且通过启动Lambda同时触发异步工作流。我也愿意与SNS集成而不是直接与Lambda集成,并让Lambda订阅该主题,但是我不知道这是否会让我访问响应映射模板中所需的数据。

3 个答案:

答案 0 :(得分:0)

要直接访问原始请求,则应该使用Proxy Integration为LAMBDA而不是通过普通的集成映射的东西。你就可以访问整个请求上下文,诸如标题,路径参数,等等。

答案 1 :(得分:0)

我确定不可能做我想做的事。

答案 2 :(得分:0)

来自https://stackoverflow.com/a/61482410/3221253

将原始请求正文保存在集成映射模板中:

#set($context.requestOverride.path.body = $input.body)

在集成映射响应中检索它:

#set($body = $context.requestOverride.path.body)
{
   "statusCode": 200,
   "body": $body,
}

您还可以访问特定属性:

#set($object = $util.parseJson($body))
{
    "id": "$object.id"
}