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