首页 文章

只保留从API网关到Lambda的身体

提问于
浏览
1

Why would I want to only keep the body content?

其中一个lambda(我们称之为 X )在我们的项目中被另一个lambda调用,这是我们希望执行的唯一有机方式.2424981_ .

输入通过其lambda调用者传递给X:

{
   "foo" : "foo_value",
   "bar" : "bar_value"
}
  • 编写一般集成测试,我们可以简单地使用预期事件调用 X ,并且它工作得很好 .
  • However ,对于我们的验收测试,我们需要独立于AWS而不是本地调用 X ,这只能通过API网关完成
  • ==> so 我们为 X 创建了一个POST事件源,仅用于测试目的 .

API Gateway 发送给 X 的事件:

{
    headers : {
       "some-headers1": "some-value1",
       ....
       "some-headersn": "some-valuen",
    },
    body : {
       "foo" : "foo_value",
       "bar" : "bar_value"
    },
    .....
    .....
}

The problem that we're looking to solve:

有没有办法将API输入转换为我们期望从lambda调用者那里得到的?

In other words ,是否可以为POST endpoints 编写自定义请求集成映射模板,以便只保留 event.body
我的意思是: $util.escapeJavaScript($input.json('$')) 而不是 { body: $util.escapeJavaScript($input.json('$')) }

Why?

我们可以简单地在 X 中添加几行代码来忽略API网关生成的额外信息,但由于API网关不是有机执行事件的一部分,我们不希望改变 X 来转换接收到的事件 .

怎么可能?

1 回答

  • 1

    我建议你解耦你的lambda函数逻辑,这样就可以从多个服务中调用它 . 基本上,您将在 handler 中为每个调用lambda函数来按摩所提供事件的服务创建一个单独的逻辑 . 因此,lambda函数中的业务逻辑变得与资源无关,并始终获得预期的输入,这是之前由相应的处理程序条件进行的按摩 . 有关灵感,请查看以下有关代码结构的文章https://medium.com/@mitch.zorze/2-years-with-aws-lambda-f835bfedec9f

相关问题