AWS Lambda函数在VPC子网中如何扩展?

3
我了解AWS Lambda是一个无服务器的概念,其中一段代码可以在某个事件上被触发。
我想了解Lambda如何处理扩展?
例如,如果我的Lambda函数位于VPC子网中,因为它想要访问VPC资源,并且该子网具有CIDR 192.168.1.0/24,在减去AWS保留的5个IP后,会产生251可用IP地址

这是否意味着,如果我的AWS Lambda函数在完全相同的时间内得到252次调用,只有251个请求将被服务,而1个请求要么超时,要么在252个函数之一完成执行后执行?
子网大小是否影响AWS Lambda的扩展性? 我正在遵循这份参考文档,其中提到每个区域的并发执行限制,不论AWS Lambda函数是否为无VPC或者是否在VPC子网内部,我可以假设它将按照文档中所述的限制进行扩展吗? 输入图像描述

Lambda函数甚至可以在您的子网中具有单个IP。实际上,子网大小并不重要。 - gusto2
2个回答

2
弗拉迪斯拉夫的回答在技术上仍然是正确的(子网规模确实很重要),但自从它被写出来以来,情况已经发生了显著变化,子网规模已经不再是一个重要考虑因素。请参阅AWS的公告:(链接)
  • 由于网络接口在执行环境之间共享,通常每个函数只需要少量的网络接口。 在您的帐户中,每个功能中的唯一安全组:子网组合需要一个独特的网络接口。 如果组合在您的帐户中的多个功能之间共享,则我们跨功能重用相同的网络接口。
  • 您的函数扩展现在不再直接与网络接口的数量相关,并且Hyperplane ENI可以扩展以支持大量并发函数执行

0

没错,子网大小确实很重要,您必须小心处理CIDR块。在最后一次调用(第252个)中,这取决于您的lambda被如何调用:同步方式(例如API Gateway)或异步方式(例如SQS)。如果以同步方式调用,它将仅被限流,并且您的API将响应429 HTTP状态码,表示“请求过多”。如果是异步的,则会被限流,并将在六小时窗口期内重试。有关更详细的描述,请查看此page

此外,我最近在我的博客上发布了一篇post,与您的问题相关。您可能会发现它有用。


如果我为Lambda函数选择了2个子网,每个子网大小为251,并且如果该函数通过API Gateway被调用,那么这是否意味着我的新扩展大小为251+251=502? - Ani
除非您的子网不是专门用于Lambda,而且其中还有其他东西(例如EC2实例),否则应该是502。将Lambda放在不同的子网中是一个好习惯,因为它变成了多AZ,具有容错能力。 - Vladyslav Usenko
1
此外,我必须提到,在ReInvent 2018上,AWS Lambda团队的首席工程师Mark Booger宣布了一项解决方案,用于2019年解决VPC冷启动和计算IP地址的丑陋方法问题:https://twitter.com/jeremy_daly/status/1068272580556087296。 - Vladyslav Usenko
是的,由于VPC不是云中实际的数据中心(就像人们所说的那样),而是一个软件定义的网络,我们可以利用这样的东西。 - Vladyslav Usenko
@VladyslavUsenko 您的博客文章计算似乎有误,差了一个数量级... 10500 * (0.125 / 3) = 4375 不准确... 应该是 437.5。从相反的方向来看,一个具有 3 GiB RAM 的容器主机可以支持每个容器大小为 128 MiB 的 24 个容器,因此再次计算 10500 ÷ 24 = 437.5。此外,您说“是的,你是对的”,但 OP 的断言 251 并发 == 251 ENI 是不正确的,除非这些调用的容器大小为 3 GiB。 - Michael - sqlbot
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接