【问题标题】:How to let AWS lambda in a VPC to publish SNS notification?如何让 VPC 中的 AWS lambda 发布 SNS 通知?
【发布时间】:2016-06-30 04:17:11
【问题描述】:

我有一个 lambda 函数,可以通过 VPC 访问我在 RDS 中的 Postgres 数据库。查询数据库后,我想向 SNS 发布通知。因为我的 lambda 函数存在于我的 VPC 中,所以它无法访问 SNS。我的 VPC 上有一个互联网网关。我通读了 VPC 端点文档,目前仅支持 s3。

是否有在 VPC 中的 lambda 函数中发布到 SNS?

【问题讨论】:

  • 请将正确答案更改为底部@Khalid T.

标签: amazon-web-services aws-lambda amazon-sns amazon-vpc


【解决方案1】:

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

【讨论】:

  • 我的方案不能通过在我的 VPC 上安装一个互联网网关来实现吗?我一直在阅读关于 NAT 的文档,它似乎只是在入站访问中添加了安全措施。
  • 不,您需要一个 NAT 来转发流量。请参阅常见问题解答文档 (aws.amazon.com/lambda/faqs)。
  • 我明白了。就我而言,我认为设置 NAT 有点不必要,所以我最终更改了我的用例,将我的 postgres 数据记录到 txt 文件中并将其上传到 s3(通过 VPC 端点),然后使用 s3 put 事件触发我的其他 aws 服务。感谢您的意见。
  • 希望用于更多服务的 VPC 端点将很快可用。这将使这个问题更容易解决。
  • 可能会对某人有所帮助。就我而言,我的 VPC 中设置了几个子网。我配置了我的 Lambda 的那个,有所有 IP 目的地(子网的 IP 除外)到 Internet 网关的路由表,但不幸的是,当我从 Lambda 调用 SNS 时,它正在解析为 AWS 的私有 IP,我怀疑.所以它没有有效的路线并且正在超时。然后我用内部路由的路由表更改了子网,然后它就像魅力一样工作。
【解决方案2】:

我终于设法让它工作了......

诀窍是您必须有 2 个子网。

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

还有一个私有的,带有将流量发送到 NAT 的路由表。把 Lambda 放在那里。 (顺便说一句,创建公共子网意味着将自动分配公共 IP 选项设置为是。)

AWS 文档的概览图中对此进行了概述:

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

【讨论】:

  • 这个!!我不敢相信我错过了这个。 1 个私人和 1 个公共。
【解决方案3】:

我知道这已经过时了,但是对于那些不想配置 NAT 的人来说,这里有另一个可行的选项。与其尝试在 VPC 中使用与 SNS 交互的 lambda 函数,不如拆分为 2 个 lambda 函数,如下所示。

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

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

如果有 SNS 的 VPC 端点会很好,但在 2016 年末似乎还没有。

【讨论】:

  • 我的理解是Function 1,由于在VPC内部,会失去互联网访问权限。因此,Function 2 将如何调用Function 1
  • Function 2 可以调用Function 1,只要Function 2 的执行策略包含调用Function 1 的权限。据我了解,Function 2 无法拨出互联网访问权限,只能访问 VPC 内的其他内容。 (它仍然可以由具有适当权限的外部 lambda 函数访问。)
  • 我同意SNS需要VPC支持
  • 据我所知,这是比配置 NAT 更好的解决方案。 NAT 是 35 美元/月,这对于独立开发者来说太贵了。
【解决方案4】:

更新

截至 2018 年 4 月,SNS 通过 AWS PrivateLink 支持VPC Endpoints。因此,无需设置 Internet 网关或 NAT 实例即可让您的 VPC 中的 Lambda 函数发布 SNS 通知。

有关详细信息,请参阅this 博客文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 2018-10-14
    • 2015-11-16
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2020-08-19
    • 2019-01-28
    相关资源
    最近更新 更多