Amazon web services 仅将主体从API网关保留到Lambda
为什么我只想保留正文内容?Amazon web services 仅将主体从API网关保留到Lambda,amazon-web-services,aws-lambda,mapping,aws-api-gateway,Amazon Web Services,Aws Lambda,Mapping,Aws Api Gateway,为什么我只想保留正文内容? 我们项目中的一个lambda(我们称之为X)正在被另一个lambda调用,这是我们希望执行X的唯一有机方式 通过其lambda调用程序传递给X的输入: { "foo" : "foo_value", "bar" : "bar_value" } --编写通用集成测试时,我们可以简单地用预期的事件调用X,效果非常好。 --然而对于我们的验收测试,我们需要在AWS之外而不是本地调用X,这只能通过API网关来完成 --==>因此我们为X创建了一个仅用于测试目的
我们项目中的一个lambda(我们称之为
X
)正在被另一个lambda调用,这是我们希望执行X
的唯一有机方式
通过其lambda调用程序传递给X的输入:
{
"foo" : "foo_value",
"bar" : "bar_value"
}
--编写通用集成测试时,我们可以简单地用预期的事件调用
X
,效果非常好。--然而对于我们的验收测试,我们需要在AWS之外而不是本地调用
X
,这只能通过API网关来完成--==>因此我们为
X
创建了一个仅用于测试目的的事件后源。API网关
发送到X
的事件:
{
headers : {
"some-headers1": "some-value1",
....
"some-headersn": "some-valuen",
},
body : {
"foo" : "foo_value",
"bar" : "bar_value"
},
.....
.....
}
我们希望解决的问题:
有没有一种方法可以将API输入转换为我们期望的lambda调用程序的输入?
换句话说,是否可以为POST端点编写自定义请求集成映射模板,以便只保留
event.body
?我的意思是:
$util.escapeJavaScript($input.json('$))
,而不是{body:$util.escapeJavaScript($input.json('$))}
为什么?
我们可以简单地在
X
中添加几行代码来忽略API网关生成的额外信息,但由于API网关不是有机执行事件的一部分,因此我们不希望更改X
来转换接收到的事件
怎么可能呢?我建议您将lambda函数逻辑解耦,这样就可以从多个服务调用它。基本上,您将在
处理程序中为调用lambda函数来处理所提供事件的每个服务创建一个单独的逻辑。因此,lambda函数中的业务逻辑变得与资源无关,并且总是获得预期的输入,这是之前由相应的处理程序条件处理的。要获得灵感,请查看以下关于本地代码结构的文章,使用AWS SDK调用Lambda。那么运行测试就不需要API网关了。非常感谢。我仍然想得到上述问题的答案。但你的评论可能会引出另一个问题。当您将invoke与invokeType:“Event”一起使用时,它假定运行哪个角色权限?使用InvokationType时也会遇到同样的问题:“RequestResponse”?我已经考虑过使用Invoke,但找不到这两个问题的答案,它是使用自己分配的角色还是本地角色?请记住,我的本地用户角色是管理员访问,您必须创建一个具有Lambda调用权限的IAM用户,以便从本地计算机调用Lambda函数。Lambda中的代码将使用其分配的角色来执行代码。回答您提出的问题,由于Lambda是不同的事件源,因此很难通过API网关进行标准转换来调用Lambda。尽管使用Lambda代理集成,您可以更接近请求,而无需对API网关进行任何更改。还要注意,通过API网关调用时存在超时限制和有效负载限制,这使得这种方法比通过SDK调用更具挑战性。我认为引用的文章很有趣,似乎这就是我们将如何处理我们的工作。(+1,但不被接受,因为它不是问题的直接答案)