【问题标题】:What triggers ENIs to be created for AWS Lambdas accessing VPC resources什么触发了为访问 VPC 资源的 AWS Lambda 创建 ENI
【发布时间】:2018-04-23 05:03:11
【问题描述】:

我们部署了多个 lambda,使用 VpcConfig 设置访问我们的 VPC。

我了解 AWS Lambda 通常会按需创建 lambda,但如果您让它们连接到您的 VPC,那么 AWS 将(在某些时候)在 VpcConfig 中指定的子网之一上创建一个 ENI 并附加 lambda 容器允许它访问您的 VPC。

但实际上是什么触发了 ENI 的创建和附加?我注意到 lambda 和 ENI 之间以及 ENI 和子网之间没有一对一的映射。还有什么决定 ENI 连接到哪个子网?

如果我手动运行为我们的 VPC 配置的测试 lambda(到 ping localhost),它永远不会创建 ENI。所以我猜这是因为它没有尝试访问网络上的任何内容。

【问题讨论】:

  • “它从不创建 ENI”应该是因为已经有一个可用的。验证一下?

标签: amazon-web-services aws-lambda


【解决方案1】:

这需要了解 Lambda 容器和容器重用。首次调用 Lambda 函数时,会创建 Lambda 容器并将 Lambda 函数部署到容器中。如果您使用 VPC 设置配置了该功能,则该容器将被分配一个 ENI。然后下次调用该函数时,如果容器仍然存在并部署了该函数,并且当前没有被另一个调用使用,它将重新使用该容器(因此无需创建新的 ENI)。如果容器正忙于处理另一个调用,则将使用新的 ENI 部署第二个容器来处理挂起的调用。当容器闲置一段时间后,Lambda 服务会自动删除容器和附加的 ENI。

还有什么决定 ENI 连接到哪个子网?

当您为 VPC 访问配置 Lambda 函数时,您需要在 VPC 中列出将部署到的一个或多个子网。我不相信亚马逊已经发布了实际的算法,但它似乎使用循环算法在配置的子网之间传播容器创建。出于实际目的,您可以认为它在每次创建新的 Lambda 容器时“随机”选择一个子网。我假设它还会检查子网中是否有可用的 IP 地址,或者如果在给定子网中获取新 ENI 的 IP 时遇到问题,则故障转移到另一个子网,但同样,我不知道有记录任何地方。

【讨论】:

  • 谢谢。这个答案与我的实验相符。但我现在想知道安全组是否对 ENI 重用有任何影响 - 还是适用于 lambda 本身而不是 ENI?
  • 特定 Lambda 函数的所有实例都将具有相同的安全组。我根本看不出这会如何影响 ENI 重用,因为它不会改变。
  • 在正常部署场景中不会,但 AWS 控制台/API 允许您在部署后更改这些内容。尝试确定在诊断期间更改 SG 是否会改变 ENI 创建
  • 您可以即时更改分配给 ENI 的安全组。我不确定在 Lambda 控制台中进行更改是否会即时进行,或者对 Lambda 配置的任何更改是否只会将您的 Lambda 函数部署在新容器中。不知道为什么它真的很重要,一般来说你不应该期望 Lambda ENI 是长寿的。
猜你喜欢
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2019-05-11
  • 2020-11-15
  • 2019-09-18
  • 1970-01-01
  • 2017-11-05
相关资源
最近更新 更多