如何为连接到 Amazon VPC 的 Lambda 函数提供互联网访问权限?

2 分钟阅读
0

我想向连接到 Amazon Virtual Private Cloud (Amazon VPC) 的 AWS Lambda 函数授予互联网访问权限。

简短描述

默认情况下,Lambda 函数在可以访问互联网的 Lambda 托管式 VPC 中运行。要访问您的 AWS 账户的 VPC 中的资源,请向该函数添加 VPC 配置。此配置会限制该函数仅访问 VPC 内的资源,除非 VPC 可以访问互联网。

即使您将 Lambda 函数与公有子网相关联,该函数也无法直接连接到互联网。VPC 中的函数具有私有 IP 地址,需要一个 NAT 网关或 NAT 实例才能使 VPC 访问互联网。

**注意:**您可以使用 VPC 端点从 Amazon VPC 连接内部连接到支持的 AWS 服务,无需访问互联网。

解决方法

在 Amazon VPC 中创建公有子网和私有子网

为 Lambda 函数创建一个私有子网,为 NAT 网关创建一个公有子网。在 Name tag(名称标签)字段中,为每个子网输入一个名称,标识子网为公有或私有。例如,使用 Public subnetPrivate Lambda 1Private Lambda 2

**注意:**最佳实践是跨不同的可用区创建多个私有子网。此操作会创建冗余,并允许 Lambda 维持函数的高可用性

使用互联网网关向子网添加互联网访问权限

创建互联网网关,然后将其附加到您的 VPC

创建 NAT 网关

创建 NAT 网关。对于 Subnet(子网),选择要设为公有的子网。例如,选择 Public subnet(公有子网)。

(可选)测试 NAT 网关设置

创建两个自定义路由表

**注意:**当 VPC 中的 Lambda 函数发出请求时,该函数会随机选择一个关联的子网。如果该函数使用了配置错误的子网,则您会收到错误。为避免出现此问题,请确保对函数使用的所有子网使用相同的配置。

要设置自定义路由表,请针对您的公有子网和私有子网完成以下步骤:

  1. 创建自定义路由表。在 Name tag(名称标签)字段中,为每个路由表输入一个名称,以帮助您识别与之关联的子网。例如,使用 Public subnetPrivate Lambda
  2. 将子网的路由表与私有子网或公有子网相关联
  3. 向路由表中添加一条新路由,并包含以下配置:
    对于目标,输入 0.0.0.0/0
    对于 Target(目标),选择 Internet gateway(互联网网关)或 NAT gateway(NAT 网关)。对于公有子网,选择互联网网关的 ID。对于私有子网,选择 NAT 网关的 ID。
    **重要事项:**如果您使用 NAT 实例而不是 NAT 网关,请选择 Network interface(网络接口)而不是 NAT gateway(NAT 网关)。
  4. 选择 Save routes(保存路由)。

注意:确保通往 NAT 网关的路由处于活动状态。如果 NAT 网关被删除但您没有更新路由,则路由将处于黑洞状态。有关详细信息,请参阅删除 NAT 网关

查看您的网络 ACL 配置

您的 VPC 中的默认网络访问控制列表(网络 ACL)允许所有入站和出站流量。如果您更改网络 ACL 规则,请确保仍允许来自您的 Lambda 函数的出站请求。此外,请确保您的网络 ACL 允许以下入站流量:

  • 对于使用 NAT 网关的私有子网:允许临时端口 1024-65535 上的入站流量。
  • 对于使用 NAT 实例的私有子网:允许 NAT 实例操作系统 (OS) 使用的临时端口上的入站流量。

有关详细信息,请参阅确保 Amazon VPC 中的互联网络流量隐私

创建 Lambda 执行角色

为您的 VPC 创建 Lambda 执行角色。然后,更新 Lambda 函数以使用新的 Lambda 执行角色

配置 Lambda 函数以连接到您的 VPC

将您的函数连接到 VPC 并配置以下设置:

  • 对于 Subnets(子网),选择私有子网。通过子网 ID 和名称来识别子网。
  • 对于 Security groups(安全组),请选择一个安全组。
    注意:默认安全组允许所有出站互联网流量,足以满足大多数使用案例的需求。有关详细信息,请参阅使用安全组控制指向 AWS 资源的流量

对于连接到 Amazon VPC 的 Lambda 函数,您可以使用仅限出站的互联网网关来访问互联网。有关详细信息,请参阅 IPv6 支持

相关信息

Lambda 中的联网问题疑难解答

如何排查 Amazon VPC 中 Lambda 函数的超时问题?

How do I troubleshoot an ETIMEDOUT error in my Lambda function?

授予 Lambda 函数访问 Amazon VPC 中资源的权限

如何排查 Lambda 函数故障?

AWS 官方
AWS 官方已更新 2 个月前