我们部署了多个lambdas,可以使用VpcConfig
设置访问我们的VPC。
我了解AWS Lambda通常会根据需要创建lambdas,但是如果您将它们连接到您的VPC,则AWS将(在某些时候)在VpcConfig
中指定的其中一个子网上创建ENI并附加lambda容器允许它访问您的VPC。
但实际上是什么触发了ENI的创建和附加?我注意到lambda和ENI之间没有一对一的映射,ENI和子网之间也没有。是什么决定ENI附加哪个子网?
如果我手动运行测试lambda(到ping localhost
),为我们的VPC配置,它永远不会创建一个ENI。所以我猜这是因为它没有尝试访问网络上的任何内容。
答案 0 :(得分:4)
这需要了解Lambda容器和容器重用。首次调用Lambda函数时,将创建一个Lambda容器,并将Lambda函数部署到容器中。如果您具有使用VPC设置配置的功能,则将为该容器分配ENI。然后,下次调用该函数时,如果容器仍然存在并且已部署该函数,并且当前未被另一个调用使用,则它将重新使用该容器(因此无需创建新的ENI)。如果容器正在忙于处理另一个调用,那么将使用新的ENI部署第二个容器来处理挂起的调用。当容器空闲一段时间后,Lambda服务将自动删除容器和附加的ENI。
是什么决定ENI附加哪个子网?
当您为VPC访问配置Lambda函数时,您需要在VPC中列出要部署到的VPC中的一个或多个子网。我不相信亚马逊已经发布了实际算法,但它似乎使用循环算法在已配置的子网之间传播容器创建。出于实际目的,您可以考虑每次创建新的Lambda容器时“随机”选择一个子网。我假设它还将检查子网中是否有可用的IP地址,或者如果在给定子网中获取新ENI的IP时出现问题,则故障转移到另一个子网,但同样,我不知道是否记录在案任何地方。