我们部署了多个 lambda,可以使用以下方式访问我们的 VPC:VpcConfig
环境。
据我了解,AWS Lambda 通常会按需创建 lambda,但如果您将它们连接到您的 VPC,那么 AWS 将(在某些时候)在指定的子网之一上创建 ENIVpcConfig
并附加 lambda 容器以允许其访问您的 VPC。
但实际上是什么触发了 ENI 的创建和附加呢?我注意到 lambda 和 ENI 之间以及 ENI 和子网之间不存在一对一的映射。另外,什么决定 ENI 附加到哪个子网?
如果我运行测试 lambda(以ping localhost
)手动为我们的 VPC 配置,它永远不会创建 ENI。所以我猜测这是因为它没有尝试访问网络上的任何内容。
这需要了解 Lambda 容器和容器重用。首次调用 Lambda 函数时,将创建 Lambda 容器并将 Lambda 函数部署到该容器中。如果您配置了 VPC 设置的功能,该容器将被分配一个 ENI。然后,下次调用该函数时,如果部署了该函数的容器仍然存在,并且当前未被其他调用使用,它将重新使用该容器(因此无需创建新的 ENI)。如果容器正忙于处理另一个调用,则将使用新的 ENI 部署第二个容器来处理挂起的调用。当容器闲置一段时间后,Lambda 服务将自动删除该容器和附加的 ENI。
另外,什么决定 ENI 附加到哪个子网?
当您配置 Lambda 函数以进行 VPC 访问时,您需要列出该函数将部署到的 VPC 中的一个或多个子网。我不相信亚马逊已经发布了实际的算法,但它似乎使用循环算法在配置的子网之间传播容器创建。出于实际目的,您可以考虑在每次创建新的 Lambda 容器时“随机”选择一个子网。我假设它还会检查子网中是否有可用的 IP 地址,或者如果在给定子网中获取新 ENI 的 IP 时遇到问题,则故障转移到另一个子网,但同样,我不知道是否有记录任何地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)