【问题标题】:AWS Lambda - use Kinesis under VPCAWS Lambda - 在 VPC 下使用 Kinesis
【发布时间】:2016-07-30 11:16:07
【问题描述】:

我有一个使用ElastiCache Redis 集群的AWS Lambda 函数。 由于Redis 集群被“锁定”在VPC 中,所以Lambda 函数也必须驻留在VPC 中。

由于某种原因,如果为Lambda 分配了一个public subnetIP,它有一个Internet gateway - 它仍然无法连接到外部(互联网),因此无法使用Kinesis.

为此,他们建议使用NAT 网关,让Lambda 连接到外部。

基本上,这对我有用 - 但我的问题是钱。 这种解决方案对于大量数据传输来说很昂贵,我正在寻找某种方法来降低它的成本。

对于我制作的一个小POC,我支付了~$10

这对 ~30GB 来说太多了,因为我的生产管道将运行数百个 gigabytes/月。

您如何建议我让Lambda 函数连接外部(特别是Kinesis)而不使用NAT 网关?

谢谢!

【问题讨论】:

  • 要让 Lambda 从具有 IGW 的 VPC 连接到 Internet 外部,您必须添加入站和出站网络 ACL 以允许 HTTP 流量。您确定向 Lambda 添加了出站 ACL?
  • @error2007s 这并不完全正确。它仍然需要一个 NAT 网关。
  • 或 NAT instance @MarkB.
  • @Michael-sqlbot 好点,我忘了实例会比托管网关便宜。

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


【解决方案1】:

不使用 NAT 网关?

使用 NAT 实例

您必须具备这两个条件之一,VPC 中的任何内容才能从私有 IP 地址访问 Internet。

在推出相对较新的 NAT 网关服务之前,NAT 实例正是在 VPC 中一直这样做的方式。

您还可以使用 NAT 网关,这是一种托管 NAT 服务,可提供更好的可用性、更高的带宽并且需要更少的管理工作。对于常见用例,我们建议您使用 NAT 网关而不是 NAT 实例。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html

当然,这更容易,但成本更高。多很多。在这种情况下,最显着的区别在于,使用 NAT 实例时,您需要为使用硬件支付固定费率,这可能是便宜的 t2.nano,5 美元/月。

NAT 网关服务是一种强大的解决方案,具有几乎无限的扩展能力,并且定价相应。 NAT 实例的好坏取决于您选择运行它的硬件,但我发现 t2.nano 和 t2.micro 非常适合需要低于 250 Mbit/s 的 Internet 连接的工作负载。

使用上面的链接了解更多信息。

【讨论】:

  • 如果NAT 实例无法处理负载会怎样?在挑选时间,我每分钟运行 1200 个 lambda 实例,每次尝试使用重试退避机制发送 1MB。我不确定 250 Mbit/s 是否足够,但我不知道如何估算负载。
  • 此外,看起来 1 NAT 实例是单点故障。如何管理NAT 实例的集群并平衡它们的负载?看起来有点头疼,你同意吗?我开始认为我最好使用NAT 网关。
  • @johni 鉴于您的用例,使用 NAT 网关肯定会更好,但是您说 NAT 网关太贵了,您需要更便宜的东西...托管 NAT 网关将除了成本之外,在各方面都比 NAT 实例更适合您。
  • 其中存在着权衡。我提到的 250 Mbit/s 统计数据是小型实例网络容量的限制,即每分钟几千兆字节,所以没什么可打喷嚏的。更大的实例有更多的可用带宽——这只是说明可以廉价完成的事情。如果您像我一样在每个 A/Z 中部署 NAT 实例,并为 Lambda 使用每个 A/Z 的子网,从技术上讲,这不是 SPOF……但我也从来没有失败过。实例的 Cloudwatch 指标将显示正在使用的网络带宽。
  • 也许您可以更新您的答案,以便新用户知道他们可以使用 AWS PrivateLink(VPC 端点)将 VPC 中的 Lambda 连接到 Kinesis。
【解决方案2】:

永远不会为 Lambda 函数实例分配公共 IP 地址,无论您将它们放置在哪种类型的 VPC 子网中。NAT 网关是唯一的解决方案,它可以在 VPC 内提供 Lambda 函数,以访问驻留在 VPC 之外的资源VPC(如 Kinesis)。

如果由于成本原因这对您不起作用,您可以考虑在具有弹性 IP 的 EC2 实例上运行 Redis 服务器,这将允许 Lambda 函数在不进入 VPC 的情况下进行连接。类似的替代方法是使用 RedisLabs 而不是 ElastiCache。

【讨论】:

  • 我明白你的意思,但这就是AWS 的问题,你可以运行Redis 集群,尽管你不知道如何管理集群。您只需设置副本数和多可用区即可保证高可用性。我自己不知道这样做。
  • @johni 这也是我推荐 RedisLabs 的原因,它可以像 ElastiCache 一样为您管理事务。听起来您可能需要为 NAT 网关付费,或者将您的任务从 Lambda 移到 EC2 实例上。
  • 我将检查 RedisLabs 选项。说实话,我开始讨厌亚马逊将ElastiCache 集群锁定在VPC 中。你知道这样做的理由是什么吗?
  • 由于 Redis 或 Memcached 本身都不支持 SSL,因此 ElastiCache 不支持 SSL,因此与 ElastiCache 的所有通信都是未加密的。他们仅将其限制为 VPC,以便通信将在您的虚拟网络中进行沙盒处理,而不会在 Internet 上明文广播。
  • Memcached 和 Redis 是用于授权的不安全服务(即没有用户名/密码)。将这些限制在 VPC 内部有助于减少滥用。
猜你喜欢
  • 2020-02-08
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2023-03-13
  • 2021-02-17
相关资源
最近更新 更多