2016-03-14 119 views
13

我有一个lambda函数,通过VPC访问RDS中的Postgres数据库。在查询分贝后,我想发布一条通知给SNS。由于我的Lambda函数存在于我的VPC中,因此无法访问SNS。我的VPC上有一个互联网网关。我通读了VPC端点文档,目前只支持s3。如何让VPC中的AWS lambda发布SNS通知?

无论如何发布到VPC的lambda函数中的SNS?

回答

7

您需要在VPC中运行NAT服务器才能将流量路由到VPC外部。 AWS现在提供了一个使这更容易的managed NAT service

+0

难道我的方案只能通过在我的VPC上安装Internet网关来实现吗?我一直在阅读有关NAT的文档,似乎只是在入站访问中添加安全措施。 – lawrence

+0

不,您需要一个NAT来转发流量。请参阅常见问题解答文档(https://aws.amazon.com/lambda/faqs/)。 – garnaat

+0

我明白了。在我的情况下,我认为设置NAT有点不必要,所以我最终改变了我的用例,将我的postgres数据记录到txt文件中并上传到s3(通过VPC端点),然后使用s3 put事件触发我的其他aws服务。感谢您的输入。 – lawrence

2

我终于设法得到它的工作...

诀窍是,你必须有2个子网。

一个公共的路由表,可将流量发送到您的VPC的Internet网关。把NAT放在那里。

还有一个专用的路由表,可以将流量发送到NAT。把兰姆达斯放在那里。 (顺便说一句制作公共子网模块设置自动分配公网IP选项设置为Yes。)

它从AWS文档此概览图所示:

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2

1

我知道这是旧的,但对于那些不想配置NAT的用户来说,这是另一种可行的选择。而不是试图在与SNS交互的VPC中使用lambda函数,而是将其分成2个lambda函数,如下所示。

Function 1位于VPC内部并与数据库交互,返回数据库交互的结果(例如,符合某些条件的ID列表)。

Function 2位于VPC外部,调用Function 1,然后处理值数组并发布适当的SNS通知(例如,基于列表中的每个ID发送消息)。

如果有SNS的VPC端点会很好,但仍然在2016年年底,这似乎并不是这样。

+1

我的理解是,'功能1',由于在VPC内部,将会失去互联网接入。因此,函数2如何调用函数1? – jonsibley

+2

只要“功能2”的执行策略包含调用“功能1”的权限,“功能2”可以调用“功能1”。据我了解,“功能2”在无法拨出的意义上失去了互联网接入,它只能访问VPC内的其他东西。 (它仍然可以通过具有适当权限的外部lambda函数访问。) – abbm

+0

我同意SNS需要VPC支持 – Tom