我有一个lambda函数,通过VPC访问RDS中的Postgres数据库。在查询分贝后,我想发布一条通知给SNS。由于我的Lambda函数存在于我的VPC中,因此无法访问SNS。我的VPC上有一个互联网网关。我通读了VPC端点文档,目前只支持s3。如何让VPC中的AWS lambda发布SNS通知?
无论如何发布到VPC的lambda函数中的SNS?
我有一个lambda函数,通过VPC访问RDS中的Postgres数据库。在查询分贝后,我想发布一条通知给SNS。由于我的Lambda函数存在于我的VPC中,因此无法访问SNS。我的VPC上有一个互联网网关。我通读了VPC端点文档,目前只支持s3。如何让VPC中的AWS lambda发布SNS通知?
无论如何发布到VPC的lambda函数中的SNS?
您需要在VPC中运行NAT服务器才能将流量路由到VPC外部。 AWS现在提供了一个使这更容易的managed NAT service。
我终于设法得到它的工作...
诀窍是,你必须有2个子网。
一个公共的路由表,可将流量发送到您的VPC的Internet网关。把NAT放在那里。
还有一个专用的路由表,可以将流量发送到NAT。把兰姆达斯放在那里。 (顺便说一句制作公共子网模块设置自动分配公网IP选项设置为Yes。)
它从AWS文档此概览图所示:
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2
我知道这是旧的,但对于那些不想配置NAT的用户来说,这是另一种可行的选择。而不是试图在与SNS交互的VPC中使用lambda函数,而是将其分成2个lambda函数,如下所示。
Function 1
位于VPC内部并与数据库交互,返回数据库交互的结果(例如,符合某些条件的ID列表)。
Function 2
位于VPC外部,调用Function 1
,然后处理值数组并发布适当的SNS通知(例如,基于列表中的每个ID发送消息)。
如果有SNS的VPC端点会很好,但仍然在2016年年底,这似乎并不是这样。
难道我的方案只能通过在我的VPC上安装Internet网关来实现吗?我一直在阅读有关NAT的文档,似乎只是在入站访问中添加安全措施。 – lawrence
不,您需要一个NAT来转发流量。请参阅常见问题解答文档(https://aws.amazon.com/lambda/faqs/)。 – garnaat
我明白了。在我的情况下,我认为设置NAT有点不必要,所以我最终改变了我的用例,将我的postgres数据记录到txt文件中并上传到s3(通过VPC端点),然后使用s3 put事件触发我的其他aws服务。感谢您的输入。 – lawrence