Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 仅将主体从API网关保留到Lambda_Amazon Web Services_Aws Lambda_Mapping_Aws Api Gateway - Fatal编程技术网

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,但不被接受,因为它不是问题的直接答案)