为连接到 VPC 的 Lambda 函数启用互联网访问权限
默认情况下,Lambda 函数在可访问互联网的 Lambda 托管 VPC 中运行。要访问账户中 VPC 内的资源,可以向函数添加 VPC 配置。此举会将该函数限制为仅针对该 VPC 内的资源,除非该 VPC 可以访问互联网。本页内容会介绍如何为连接到 VPC 的 Lambda 函数提供互联网访问权限。
创建 VPC
创建 VPC 工作流程可创建 Lambda 函数从私有子网访问公有互联网所需的所有 VPC 资源,包括子网、NAT 网关、互联网网关和路由表条目。
创建 VPC
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在控制面板上,选择创建 VPC。
-
对于要创建的资源,选择 VPC 等。
-
配置 VPC
-
对于 Name tag auto-generation(名称标签自动生成),为 VPC 输入名称。
-
对于 IPv4 CIDR 块,您可以保留默认建议,也可以输入应用程序或网络所需的 CIDR 块。
-
如果应用程序使用 IPv6 地址进行通信,则选择 IPv6 CIDR 块、Amazon 提供的 IPv6 CIDR 块。
-
-
配置子网
-
对于可用区数量,选择 2。为了获得高可用性,建议至少选择两个 AZ。
-
对于Number of public subnets(公有子网数量),选择 2。
-
对于 Number of private subnets(私有子网数量),选择 2。
-
您可以保留公有子网的默认 CIDR 块,也可以展开自定义子网 CIDR 块并输入 CIDR 块。有关更多信息,请参阅子网 CIDR 块。
-
-
对于 NAT 网关,选择每个可用区 1 个以提高故障恢复能力。
-
对于仅限出口的互联网网关,如果选择了包含 IPv6 CIDR 块,则选择是。
-
对于 VPC 端点,请保留默认值(S3 网关)。选择此项不会产生任何费用。有关更多信息,请参阅适用于 Amazon S3 的 VPC 端点类型。
-
对于 DNS 选项,保留默认设置。
-
选择创建 VPC。
配置 Lambda 函数
在创建函数时配置 VPC
打开 Lamba 控制台的 Functions page
(函数页面)。 -
选择 Create function(创建函数)。
-
在基本信息下的函数名称中输入函数的名称。
-
展开 Advanced settings(高级设置)。
-
选择启用 VPC,再选择一个 VPC。
-
(可选)要允许出站 IPv6 流量,请选择允许双堆栈子网的 IPv6 流量。
-
对于子网,选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
注意
如果您已选择允许双堆栈子网的 IPv6 流量,则所有选定的子网都必须具有 IPv4 CIDR 块和 IPv6 CIDR 块。
-
对于安全组,选择一个允许出站流量的安全组。
-
选择 Create function (创建函数)。
Lambda 使用 AWSLambdaVPCAccessExecutionRole AWS 托管策略自动创建执行角色。只有在为 VPC 配置创建弹性网络接口时需要此策略中的权限,调用函数时并不需要。要应用最低权限,可以在创建函数和 VPC 配置之后,从执行角色中删除 AWSLambdaVPCAccessExecutionRole 策略。有关更多信息,请参阅 所需的 IAM 权限。
为现有函数配置 VPC
要将 VPC 配置添加到现有函数,该函数的执行角色必须具有创建和管理弹性网络接口的权限。AWSLambdaVPCAccessExecutionRole AWS 托管策略包含这些必要权限。要应用最低权限,可以在创建 VPC 配置之后,从执行角色中删除 AWSLambdaVPCAccessExecutionRole 策略。
打开 Lamba 控制台的 Functions
(函数)页面。 -
选择函数。
-
选择配置选项卡,然后选择 VPC。
-
在 VPC 下,选择 Edit(编辑)。
-
选择 VPC。
-
(可选)要允许出站 IPv6 流量,请选择允许双堆栈子网的 IPv6 流量。
-
对于子网,选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
注意
如果您已选择允许双堆栈子网的 IPv6 流量,则所有选定的子网都必须具有 IPv4 CIDR 块和 IPv6 CIDR 块。
-
对于安全组,选择一个允许出站流量的安全组。
-
选择保存。
测试此函数
使用以下示例代码,确认连接到 VPC 的函数是否可以访问公有互联网。如果成功,代码将返回 200
状态代码。如果失败,函数将超时。
如果已有 VPC,但需要为 Lambda 函数配置公有互联网访问权限,请按照以下步骤操作。此过程假设 VPC 至少有两个子网。如果没有两个子网,请参阅《Amazon VPC 用户指南》中的创建子网。
验证路由表配置
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
选择 VPC ID。
-
向下滚动到资源映射部分。请注意路由表映射。打开映射到子网的每个路由表。
-
向下滚动到路由选项卡。查看路由,判断是否满足以下情况之一。这些要求中的每一项都必须由单独的路由表来满足。
-
将面向互联网的流量(IPv4 的路由为
0.0.0.0/0
,IPv6 的路由为::/0
)路由到互联网网关 (igw-xxxxxxxxxx
)。这表示与路由表关联的子网是公有子网。注意
如果子网没有 IPv6 CIDR 块,则只能看到 IPv4 的路由 (
0.0.0.0/0
)。例 公有子网路由表
-
将 IPv4 (
0.0.0.0/0
) 面向互联网的流量路由到与公有子网关联的 NAT 网关 (nat-xxxxxxxxxx
)。这表示子网属于可以通过 NAT 网关访问互联网的私有子网。注意
如果子网具有 IPv6 CIDR 块,则路由表还必须将面向互联网的 IPv6 流量 (
::/0
) 路由到“仅出口互联网网关”(eigw-xxxxxxxxxx
)。如果子网没有 IPv6 CIDR 块,则只能看到 IPv4 的路由 (0.0.0.0/0
)。例 私有子网路由表
-
-
重复上一步操作,直到查看了与 VPC 中子网关联的每个路由表,并确认存在带有互联网网关的路由表和带有 NAT 网关的路由表。
如果没有两个路由表(一个带有指向互联网网关的路由,另一个带有指向 NAT 网关的路由),则按照以下步骤创建缺失的资源和路由表条目。
请按照以下步骤创建路由表,再将之与子网相关联。
使用 Amazon VPC 控制台创建自定义路由表
-
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在导航窗格中,选择 Route tables(路由表)。
-
选择创建路由表。
-
(可选)对于 Name(名称),为您的路由表输入名称。
-
对于 VPC,选择您的 VPC。
-
(可选)若要添加标签,请选择 Add new tag(添加新标签),然后输入标签键和标签值。
-
选择创建路由表。
-
在 Subnet associations (子网关联) 选项卡上,选择 Edit subnet associations (编辑子网关联)。
-
选中要与路由表关联的子网的复选框。
-
选择 Save associations (保存关联)。
按照以下步骤创建互联网网关,再将其附加到 VPC,然后将之添加到公有子网的路由表中。
创建互联网网关
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在导航窗格中,选择 Internet gateways(互联网网关)。
-
选择创建互联网网关。
-
(可选)输入互联网网关的名称。
-
(可选)若要添加标签,请选择 Add new tag(添加新标签),然后输入该标签的键和值。
-
选择创建互联网网关。
-
从屏幕顶部的横幅中选择附加到 VPC,再选择可用的 VPC,然后选择附加互联网网关。
-
选择 VPC ID。
-
再次选择 VPC ID 打开 VPC 详细信息页面。
-
向下滚动到资源映射部分,然后选择一个子网。子网详细信息显示在新选项卡中。
-
选择路由表下的链接。
-
选择路由表 ID 打开路由表的详细信息页面。
-
在路由下,选择编辑路由。
-
选择添加路由,然后在目的地框中输入
0.0.0.0/0
。 -
在目标中选择互联网网关,然后选择之前创建的互联网网关。如果子网具有 IPv6 CIDR 块,还须添加指向同一互联网网关的
::/0
路由。 -
选择 Save changes(保存更改)。
按照以下步骤创建 NAT 网关,再将其与公有子网关联,然后将之添加到私有子网的路由表中。
创建 NAT 网关并将之与公有子网关联
-
在导航窗格中,选择 NAT 网关。
-
选择创建 NAT 网关。
-
(可选)输入 NAT 网关的名称。
-
对于子网,选择 VPC 中的公有子网。(公有子网是其路由表中具有指向互联网网关的直接路由的子网。)
注意
NAT 网关与公有子网关联,但路由表条目位于私有子网中。
-
对于弹性 IP 分配 ID,请选择弹性 IP 地址或选择分配弹性 IP。
-
选择创建 NAT 网关。
在私有子网的路由表中向 NAT 网关添加路由
-
在导航窗格中,选择 Subnets(子网)。
-
选择 VPC 中的私有子网。(私有子网是其路由表中不具有指向互联网网关的路由的子网。)
-
选择路由表下的链接。
-
选择路由表 ID 打开路由表的详细信息页面。
-
向下滚动并选择路由选项卡,然后选择编辑路由。
-
选择添加路由,然后在目的地框中输入
0.0.0.0/0
。 -
在目标中选择 NAT 网关,然后选择之前创建的 NAT 网关。
-
选择 Save changes(保存更改)。
按照以下步骤创建“仅出口互联网网关”,在将之添加到私有子网的路由表中。
创建“仅出口互联网网关”
在导航窗格中,选择仅出口互联网网关。
选择创建仅出口互联网网关。
-
(可选)输入名称。
-
选择要在其中创建“仅出口互联网网关”的 VPC。
选择创建仅出口互联网网关。
-
选择附加的 VPC ID下的链接。
-
选择 VPC ID 下的链接,打开 VPC 详细信息页面。
-
向下滚动到资源映射部分,然后选择一个私有子网。(私有子网是其路由表中不具有指向互联网网关的路由的子网。) 子网详细信息显示在新选项卡中。
-
选择路由表下的链接。
-
选择路由表 ID 打开路由表的详细信息页面。
-
在路由下,选择编辑路由。
-
选择添加路由,然后在目的地框中输入
::/0
。 -
在目标中选择仅限出口互联网网关,然后选择之前创建的网关。
-
选择 Save changes(保存更改)。
配置 Lambda 函数
在创建函数时配置 VPC
打开 Lamba 控制台的 Functions page
(函数页面)。 -
选择 Create function(创建函数)。
-
在基本信息下的函数名称中输入函数的名称。
-
展开 Advanced settings(高级设置)。
-
选择启用 VPC,再选择一个 VPC。
-
(可选)要允许出站 IPv6 流量,请选择允许双堆栈子网的 IPv6 流量。
-
对于子网,选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
注意
如果您已选择允许双堆栈子网的 IPv6 流量,则所有选定的子网都必须具有 IPv4 CIDR 块和 IPv6 CIDR 块。
-
对于安全组,选择一个允许出站流量的安全组。
-
选择 Create function (创建函数)。
Lambda 使用 AWSLambdaVPCAccessExecutionRole AWS 托管策略自动创建执行角色。只有在为 VPC 配置创建弹性网络接口时需要此策略中的权限,调用函数时并不需要。要应用最低权限,可以在创建函数和 VPC 配置之后,从执行角色中删除 AWSLambdaVPCAccessExecutionRole 策略。有关更多信息,请参阅 所需的 IAM 权限。
为现有函数配置 VPC
要将 VPC 配置添加到现有函数,该函数的执行角色必须具有创建和管理弹性网络接口的权限。AWSLambdaVPCAccessExecutionRole AWS 托管策略包含这些必要权限。要应用最低权限,可以在创建 VPC 配置之后,从执行角色中删除 AWSLambdaVPCAccessExecutionRole 策略。
打开 Lamba 控制台的 Functions
(函数)页面。 -
选择函数。
-
选择配置选项卡,然后选择 VPC。
-
在 VPC 下,选择 Edit(编辑)。
-
选择 VPC。
-
(可选)要允许出站 IPv6 流量,请选择允许双堆栈子网的 IPv6 流量。
-
对于子网,选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
注意
如果您已选择允许双堆栈子网的 IPv6 流量,则所有选定的子网都必须具有 IPv4 CIDR 块和 IPv6 CIDR 块。
-
对于安全组,选择一个允许出站流量的安全组。
-
选择保存。
测试此函数
使用以下示例代码,确认连接到 VPC 的函数是否可以访问公有互联网。如果成功,代码将返回 200
状态代码。如果失败,函数将超时。