我想向连接到 Amazon Virtual Private Cloud(Amazon VPC)的 AWS Lambda 函数授予互联网访问权限。
简述
从私有子网访问互联网需要网络地址转换(NAT)。若要为连接到 Amazon VPC 的 Lambda 函数提供互联网访问权限,请将其出站流量路由到公有子网中的 NAT 网关或 NAT 实例。
有关更多信息,请参阅使用互联网网关连接到互联网。有关示例设置,请参阅具有 NAT 且服务器位于私有子网中的 VPC。
**注意:**您也可以使用 Amazon VPC 端点从 Amazon VPC 内部连接到支持的 AWS 服务,无需访问互联网。
解决方案
(可选)在 AWS 管理控制台中使用 VPC 向导创建一个新 Amazon VPC
**注意:**如果您使用 VPC 向导创建一个新 Amazon VPC,请跳至以下部分: 为您的 VPC 创建一个 Lambda 执行角色。
1.在 AWS 管理控制台中打开 VPC 向导。
2.选择带有公有和私有子网的 VPC。新的公有子网和私有子网,及其关联的互联网网关和 NAT 网关,将显示在 Amazon VPC 控制台中。
在您的 Amazon VPC 中创建一个公有子网和一个或多个私有子网
有关说明,请参阅创建子网以创建各个子网。
创建子网时,在名称标签中,为每个子网输入一个名称,标识子网为公有或私有。例如: Public subnet、Private lambda 1 和 Private lambda 2。
**注意:**最佳实践是跨不同的可用区创建多个私有子网。这种做法会创建冗余,并让 Lambda 服务维持函数的高可用性。
创建互联网网关并将其附加到您的 Amazon VPC。
有关说明,请参阅创建和附加互联网网关。
创建 NAT 网关
有关说明,请参阅创建 NAT 网关。创建 NAT 网关时,为 Subnet 选择要设为公有的子网。(来自前面的示例: Public subnet。)
**注意:**要测试您的 NAT 网关设置,请参阅测试公共 NAT 网关。
创建两个自定义路由表,一个用于您的公有子网,另一个用于您的私有子网
**注意:**当与 Amazon VPC 连接的 Lambda 函数发出请求时,它会随机选择一个关联的子网。如果该函数使用了配置错误的子网,则会出现错误。为防止随机错误,请确保对函数使用的所有子网使用相同的配置。
有关说明,请参阅创建自定义路由表。创建路由表时,在名称标签中,为每个路由表输入一个名称,以帮助您识别与其关联的子网。例如: Public subnet 和 Private Lambda。
对于每个路由表,请务必完成以下步骤:
对于公有子网的路由表
1.将公有子网的路由表(Public subnet)与要设为公有的子网相关联。
2.向路由表中添加一条包含以下配置的新路由:
对于 Destination,输入 0.0.0.0/0。
对于 Target,选择 Internet Gateway,然后选择您创建的互联网网关的 ID(igw-123example)。选择保存路由。
对于私有子网的路由表
1.将私有子网的路由表(Private Lambda)与私有子网关联。
2.向路由表中添加一条包含以下配置的新路由:
对于 Destination,输入 0.0.0.0/0。
对于 Target,选择 NAT 网关。然后,选择您创建的 NAT 网关的 ID(nat-123example)。
重要信息:如果您使用的是 NAT 实例,请改为选择 Network Interface。选择保存路由。
注意:确保通往 NAT 网关的路由处于活动状态。如果 NAT 网关被删除但您没有更新路由,则它们处于黑洞状态。有关更多信息,请参阅删除 NAT 网关。
验证您的网络 ACL 是否允许来自您的 Lambda 函数的出站请求,并根据需要允许入站流量
您的 Amazon VPC 中的默认网络访问控制列表(网络 ACL)允许所有入站和出站流量。如果您更改网络 ACL 规则,请确保仍允许来自您的 Lambda 函数的出站请求。
此外,根据您的 VPC 配置,请确保您的网络 ACL 允许以下入站流量:
- 对于使用 NAT 网关的私有子网:允许临时端口 1024-65535 上的入站流量。
- 对于使用 NAT 实例的私有子网:在 NAT 实例操作系统使用的临时端口上允许入站流量。
**注意:**有关更多信息,请参阅 Amazon VPC 中的互联网流量隐私。
为您的 VPC 创建 Lambda 执行角色
1.在 AWS Identity and Access Management(IAM)控制台中打开角色页面。
2.选择创建角色。创建角色页面将会显示。
3.在创建角色页面上,完成以下步骤:
对于选择受信任实体的类型,选择 AWS 服务。
对于常见使用案例,请选择 Lambda。
选择下一步: 权限。
在附加权限策略下,搜索 AWSLambdaVPCAccessExecutionRole。
选择具有该名称的策略。然后,选择下一步: 标签。
(可选)为您的使用案例添加标签。
选择下一步: 审核。
在角色名称中,输入您的 Lambda 执行角色的名称。例如:lambda_vpc_basic_execution。
(可选)在角色描述中,输入角色的描述。选择创建角色。
将角色附加到 Lambda 函数
1.在 Lambda 控制台中打开函数页面。
2.选择要连接到 Amazon VPC 的函数的名称。
3.选择配置选项卡,然后选择权限。
4.在执行角色中,选择编辑。
5.选择现有角色下拉列表,然后选择您的角色。例如:lambda_vpc_basic_execution。
6.选择保存。
有关更多信息,请参阅 Lambda 执行角色和在 IAM 控制台中创建执行角色。
配置 Lambda 函数以连接到 Amazon VPC
1.在 Lambda 控制台中打开函数页面。
2.选择要连接到 Amazon VPC 的函数的名称。
3.选择配置选项卡。
4.从左侧导航栏中选择 VPC,然后选择编辑。然后,输入以下内容:
对于虚拟私有云(VPC),请选择您的 VPC。
对于子网,请选择您创建的私有子网。通过子网 ID(如果您命名了子网,则还有名称)来识别它们。
对于安全组,请选择一个安全组。
注意:默认安全组允许所有出站互联网互联网流量,足以满足大多数使用案例的需求。有关详细信息,请参阅使用安全组控制指向 AWS 资源的流量。
5.选择保存。
相关信息
将出站联网连接到 VPC 中的资源
Lambda 中的联网问题疑难解答
如何排查 Lambda 函数故障?