适用于 Lambda 的 VPC 联网 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

适用于 Lambda 的 VPC 联网

Amazon Virtual Private Cloud (Amazon VPC) 是 Amazon 云中的虚拟网络,专用于您的 Amazon 账户。您可以使用 Amazon VPC 为资源(如数据库、缓存实例或内部服务)创建专用网络。有关 Amazon VPC 的更多信息,请参阅 Amazon VPC 是什么?

Lambda 函数始终在 Lambda 服务拥有的 VPC 内运行。Lambda 将向此 VPC 应用网络访问和安全规则,并且 Lambda 将会自动维护和监控 VPC。如果您的 Lambda 函数需要访问您的账户 VPC 中的资源,请配置该函数以访问 VPC。Lambda 提供名为 Hyperplane ENI 的托管资源,您的 Lambda 函数可使用这些资源从 Lambda VPC 连接到您的账户 VPC 中的 ENI(弹性网络接口)。

使用 VPC 或 Hyperplane ENI 无需额外付费。有些 VPC 组件(例如 NAT 网关)需要付费。有关更多信息,请参阅 Amazon VPC 定价

VPC 网络元素

Amazon VPC 网络包括以下网络元素:

  • 弹性网络接口 – 弹性网络接口 是 VPC 中表示虚拟网卡的逻辑网络组件。

  • 子网 — 您的 VPC 内的 IP 地址范围。您可以向指定子网添加 Amazon 资源。对必须连接互联网的资源使用公有子网,而对不会连接到互联网的资源使用私有子网。

  • 安全组 — 使用安全组控制对每个子网中的 Amazon 资源的访问。

  • 访问控制列表 (ACL) — 使用网络 ACL 在子网中提供额外的安全性。默认子网 ACL 允许所有入站和出站流量。

  • 路由表 — 包含一组 Amazon 用于导向 VPC 网络流量的路由。您可以将子网与特定路由表显式关联。默认情况下,子网与主路由表关联。

  • 路由 — 路由表中的每个路由用于指定 IP 地址范围以及 Lambda 在该范围内发送流量的目标。此外,路由还指定目标,即通过其发送流量的网关、网络接口或连接。

  • NAT 网关 — 用于控制从私有 VPC 私有子网至互联网的访问的 Amazon 网络地址转换 (NAT) 服务。

  • VPC 终端节点 — 您可以使用 Amazon VPC 终端节点创建至 Amazon 中托管的服务的私有连接,而无需通过互联网,或 NAT 设备、VPN 连接,或者 Amazon Direct Connect 连接。有关更多信息,请参阅 AmazonPrivateLink 和 VPC 终端节点

有关 Amazon VPC 联网定义的更多信息,请参阅 Amazon VPC 开发人员指南中的 Amazon VPC 的工作原理Amazon VPC 常见问题。

将 Lambda 函数连接到您的 VPC

默认情况下,Lambda 将会在安全 VPC 中运行函数。Lambda 拥有此 VPC,该 VPC 未连接到您账户的默认 VPC。在将函数连接到您账户中的 VPC 时,除非 VPC 提供访问权限,否则此函数将无法访问 Internet。

Lambda 使用 Hyperplane ENI 访问 VPC 中的资源。Hyperplane ENI 使用 VPC 到 VPC NAT (V2N) 提供从 Lambda VPC 到您的账户 VPC 的 NAT 功能。V2N 提供从 Lambda VPC 到您的账户 VPC 的连接,但不能提供其他方向的连接。

在您创建 Lambda 函数(或更新其 VPC 设置)时,Lambda 将为函数的 VPC 配置中的每个子网分配一个 Hyperplane ENI。如果多个函数共享同一个子网和安全组,则 Lambda 函数可以共享一个网络接口。

要连接到另一个 Amazon 服务,您可以将 VPC 终端节点用于 VPC 与受支持的 Amazon 服务之间的私有通信。另一种替代方法是使用 NAT 网关将出站流量路由到另一个 Amazon 服务。

要使您的函数能够访问 Internet,请将出站流量路由到公有子网中的 NAT 网关。NAT 网关具有公共 IP 地址,可以通过 VPC 的 Internet 网关连接到 Internet。

有关如何配置 Lambda VPC 联网的信息,请参阅 Lambda 联网

Lambda Hyperplane ENI

Hyperplane ENI 是一项 Lambda 服务创建和管理的托管网络资源。Lambda VPC 中的多个执行环境可以使用 Hyperplane ENI 安全地访问您的账户中的 VPC 内的资源。Hyperplane ENI 提供从 Lambda VPC 到您的账户 VPC 的 NAT 功能。有关 Hyperplane ENI 的更多信息,请参阅 Amazon 计算博客中的 针对 Amazon Lambda 函数的改进 VPC 联网

您的账户中的每个唯一安全组和子网组合都需要不同的网络接口。账户中共享相同安全组和子网组合的函数使用相同的网络接口。

由于您的账户中的函数共享 ENI 资源,因此 ENI 生命周期比其他 Lambda 资源更复杂。以下章节介绍 ENI 的生命周期。

创建 ENI

Lambda 可能会为新创建的支持 VPC 的函数或对现有函数的 VPC 配置更改创建 Hyperplane ENI 资源。在 Lambda 创建所需资源时,该函数处于待处理状态。当 Hyperplane ENI 准备就绪后,函数将转换为活动状态,并且 ENI 可供使用。Lambda 可能需要几分钟时间才能创建 Hyperplane ENI。

对于新创建的支持 VPC 的函数,在函数状态转换为活动状态之前,在该函数上运行的任何调用或其他 API 操作都将失败。

对于对现有函数的 VPC 配置更改,在函数状态转换为活动之前,任何函数调用都将继续使用与旧子网和安全组配置关联的 Hyperplane ENI。

如果 Lambda 函数连续几周保持空闲状态,则它将会回收未使用的 Hyperplane ENI,并将函数状态设置为空闲。下一次调用会使 Lambda 重新激活该空闲函数。调用失败,在 Lambda 完成 Hyperplane ENI 创建或分配之前,函数将进入挂起状态。

有关函数状态的更多信息,请参阅Lambda 函数状态

管理 ENI

Lambda 使用执行角色中的权限来创建和管理网络接口。为账户中支持 VPC 的函数定义唯一的子网和安全组组合时,Lambda 将会创建 Hyperplane ENI。Lambda 将为您的账户中使用相同子网和安全组组合的其他支持 VPC 的函数重复使用 Hyperplane ENI。

可使用相同 Hyperplane ENI 的 Lambda 函数的数量没有配额。但是,每个 Hyperplane ENI 最多支持 65,000 个连接/端口。如果连接数超过 65,000 个,则 Lambda 会创建一个新的 Hyperplane ENI,以提供额外的连接。

如果您将函数更新为访问其他 VPC,则 Lambda 将会终止至先前的 VPC 中的 Hyperplane ENI 连接。更新至新 VPC 的连接可能需要几分钟的时间。在此期间,至该函数的调用将继续使用之前的 VPC。更新完成后,新的调用将开始使用新 VPC 中的 Hyperplane ENI。此时,Lambda 函数不再连接到之前的 VPC。

删除 ENI

当您更新函数以删除其 VPC 配置时,Lambda 最多需要 20 分钟才能删除连接的 Hyperplane ENI。仅当没有其他函数(或已发布的函数版本)使用该 Hyperplane ENI 时,Lambda 才会删除 ENI。

Lambda 依赖于函数执行角色中的权限来删除 Hyperplane ENI。如果您在 Lambda 删除 Hyperplane ENI 之前删除执行角色,那么,Lambda 将无法删除该 Hyperplane ENI。您可以手动执行删除操作。

Lambda 无法删除账户中的函数或函数版本正在使用的网络接口。您可以使用 Lambda ENI 查找器识别正在使用 Hyperplane ENI 的函数或函数版本。对于不再需要的任何函数或函数版本,您可以删除 VPC 配置,以便 Lambda 删除 Hyperplane ENI。

Connections

Lambda 支持两种类型的连接:TCP(传输控制协议)和 UDP(用户数据报协议)。

当您创建 VPC 时,Lambda 将会自动创建 DHCP 选项集,并将它们与 VPC 相关联。您可以为 VPC 配置自己的 DHCP 选项集。有关更多详细信息,请参阅 Amazon VPC DHCP 选项

Amazon 为您的 VPC 提供 DNS 服务器(Amazon Route 53 Resolver)。有关更多信息,请参阅 VPC 的 DNS 支持

Security

Amazon 提供安全组网络 ACL 来提高 VPC 中的安全性。安全组可以控制您的实例的入站和出站数据流,网络 ACL 可以控制您的子网的入站和出站数据流。安全组为大多数子网提供足够的访问控制。如果您需要为您的 VPC 增加额外安全保护,则可以使用网络 ACL。有关更多信息,请参阅 Amazon VPC 中的互联网络流量隐私。您创建的每个子网均自动与 VPC 的默认网络 ACL 关联。您可以更改关联,以及更改默认网络 ACL 的内容。

有关一般的安全最佳实践,请参阅 VPC 安全最佳实践。有关如何使用 IAM 管理对 Lambda API 和资源的访问的详细信息,请参阅Amazon Lambda权限

您可以将特定于 Lambda 的条件键用于 VPC 设置,从而为您的 Lambda 函数提供额外的权限控制。有关 VPC 条件键的更多信息,请参阅使用 VPC 设置中的 IAM 条件键

Observability

您可以使用 VPC 流日志捕获有关在您的 VPC 中传入和传出网络接口的 IP 流量的信息。您可以将流日志数据发布到 Amazon CloudWatch Logs 或 Amazon S3 中。创建流日志后,您可以在选定目标中检索和查看其数据。

注意:当您将函数连接到 VPC 时,CloudWatch 日志消息不使用 VPC 路由。Lambda 使用日志的常规路由发送日志消息。