

# 为连接到 VPC 的 Lambda 函数启用互联网访问权限
<a name="configuration-vpc-internet"></a>

默认情况下，Lambda 函数在可访问互联网的 Lambda 托管 VPC 中运行。要访问账户中 VPC 内的资源，可以向函数添加 VPC 配置。此举会将该函数限制为仅针对该 VPC 内的资源，除非该 VPC 可以访问互联网。本页内容会介绍如何为连接到 VPC 的 Lambda 函数提供互联网访问权限。

## 尚无 VPC
<a name="new-vpc"></a>

### 创建 VPC
<a name="create-vpc-internet"></a>

**创建 VPC 工作流程**可创建 Lambda 函数从私有子网访问公有互联网所需的所有 VPC 资源，包括子网、NAT 网关、互联网网关和路由表条目。

**创建 VPC**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在控制面板上，选择**创建 VPC**。

1. 对于**要创建的资源**，选择 **VPC 等**。

1. **配置 VPC**

   1. 对于 **Name tag auto-generation**（名称标签自动生成），为 VPC 输入名称。

   1. 对于 **IPv4 CIDR 块**，您可以保留默认建议，也可以输入应用程序或网络所需的 CIDR 块。

   1. 如果应用程序使用 IPv6 地址进行通信，则选择 **IPv6 CIDR 块**、**Amazon 提供的 IPv6 CIDR 块**。

1. **配置子网**

   1. 对于**可用区数量**，选择 **2**。为了获得高可用性，建议至少选择两个 AZ。

   1. 对于**Number of public subnets**（公有子网数量），选择 **2**。

   1. 对于 **Number of private subnets**（私有子网数量），选择 **2**。

   1. 您可以保留公有子网的默认 CIDR 块，也可以展开**自定义子网 CIDR 块**并输入 CIDR 块。有关更多信息，请参阅[子网 CIDR 块](https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html)。

1. 对于 **NAT 网关**，选择**每个可用区 1 个**以提高故障恢复能力。

1. 对于**仅限出口的互联网网关**，如果选择了包含 IPv6 CIDR 块，则选择**是**。

1. 对于 **VPC 端点**，请保留默认值（**S3 网关**）。选择此项不会产生任何费用。有关更多信息，请参阅[适用于 Amazon S3 的 VPC 端点类型](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#types-of-vpc-endpoints-for-s3)。

1. 对于 **DNS 选项**，保留默认设置。

1. 选择**创建 VPC**。

### 配置 Lambda 函数
<a name="vpc-function-internet-create"></a>

**在创建函数时配置 VPC**

1. 打开 Lamba 控制台的 [Functions page](https://console.aws.amazon.com/lambda/home#/functions)（函数页面）。

1. 选择 **Create function**（创建函数）。

1. 在**基本信息**下的**函数名称**中输入函数的名称。

1. 展开 **Advanced settings**（高级设置）。

1. 选择**启用 VPC**，再选择一个 VPC。

1. （可选）要允许[出站 IPv6 流量](configuration-vpc.md#configuration-vpc-ipv6)，请选择**允许双堆栈子网的 IPv6 流量**。

1. 对于**子网**，选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
**注意**  
如果您已选择**允许双堆栈子网的 IPv6 流量**，则所有选定的子网都必须具有 IPv4 CIDR 数据块和 IPv6 CIDR 数据块。

1. 对于**安全组**，选择一个允许出站流量的安全组。

1. 选择**创建函数**。

Lambda 使用 [AWSLambdaVPCAccessExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaVPCAccessExecutionRole.html) AWS 托管策略自动创建执行角色。只有在为 VPC 配置创建弹性网络接口时需要此策略中的权限，调用函数时并不需要。要应用最低权限，可以在创建函数和 VPC 配置之后，从执行角色中删除 **AWSLambdaVPCAccessExecutionRole** 策略。有关更多信息，请参阅 [所需的 IAM 权限](configuration-vpc.md#configuration-vpc-permissions)。

**为现有函数配置 VPC**

要将 VPC 配置添加到现有函数，该函数的执行角色必须具有[创建和管理弹性网络接口的权限](configuration-vpc.md#configuration-vpc-permissions)。[AWSLambdaVPCAccessExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaVPCAccessExecutionRole.html) AWS 托管策略包含这些必要权限。要应用最低权限，可以在创建 VPC 配置之后，从执行角色中删除 **AWSLambdaVPCAccessExecutionRole** 策略。

1. 打开 Lamba 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面。

1. 选择函数。

1. 选择**配置**选项卡，然后选择 **VPC**。

1. 在 **VPC** 下，选择 **Edit**（编辑）。

1. 选择 VPC。

1. （可选）要允许[出站 IPv6 流量](configuration-vpc.md#configuration-vpc-ipv6)，请选择**允许双堆栈子网的 IPv6 流量**。

1. 对于**子网**，选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
**注意**  
如果您已选择**允许双堆栈子网的 IPv6 流量**，则所有选定的子网都必须具有 IPv4 CIDR 数据块和 IPv6 CIDR 数据块。

1. 对于**安全组**，选择一个允许出站流量的安全组。

1. 选择**保存**。

### 测试此函数
<a name="vpc-function-internet-test"></a>

使用以下示例代码，确认连接到 VPC 的函数是否可以访问公有互联网。如果成功，代码将返回 `200` 状态代码。如果失败，函数将超时。

------
#### [ Node.js ]

1. 在 Lambda 控制台的**代码源**窗格中，将以下代码粘贴到 **index.mjs** 文件中。该函数向公有端点发出 HTTP GET 请求，再返回 HTTP 响应代码来测试该函数是否可以访问公有互联网。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/code-source-nodejs.png)  
**Example 示例：包含 async/await 的 HTTP 请求**  

   ```
   const url = "https://aws.amazon.com/";
   
   export const handler = async(event) => {
       try {
           const res = await fetch(url);
           console.info("status", res.status);
           return res.status;
       }
       catch (e) {
           console.error(e);
           return 500;
       }
   };
   ```

1. 在**部署**部分，选择**部署**以更新函数的代码：  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 选择**测试**选项卡。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-tab.png)

1. 选择**测试**。

1. 该函数返回 `200` 状态代码。此结果表示该函数具有出站互联网访问权限。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-successful-200.png)

   如果该函数无法访问公有互联网，则会收到如下错误消息：

   ```
   {
     "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds"
   }
   ```

------
#### [ Python ]

1. 在 Lambda 控制台的**代码源**窗格中，将以下代码粘贴到 **ambda\$1function.py** 文件中。该函数向公有端点发出 HTTP GET 请求，再返回 HTTP 响应代码来测试该函数是否可以访问公有互联网。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/code-source-python.png)

   ```
   import urllib.request
   
   def lambda_handler(event, context):
       try:
           response = urllib.request.urlopen('https://aws.amazon.com')
           status_code = response.getcode()
           print('Response Code:', status_code)
           return status_code
       except Exception as e:
           print('Error:', e)
           raise e
   ```

1. 在**部署**部分，选择**部署**以更新函数的代码：  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 选择**测试**选项卡。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-tab.png)

1. 选择**测试**。

1. 该函数返回 `200` 状态代码。此结果表示该函数具有出站互联网访问权限。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-successful-200.png)

   如果该函数无法访问公有互联网，则会收到如下错误消息：

   ```
   {
     "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds"
   }
   ```

------

## 已有 VPC
<a name="existing-vpc"></a>

如果已有 VPC，但需要为 Lambda 函数配置公有互联网访问权限，请按照以下步骤操作。此过程假设 VPC 至少有两个子网。如果没有两个子网，请参阅《Amazon VPC 用户指南》**中的[创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html)。

### 验证路由表配置
<a name="vpc-internet-routes"></a>

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择 **VPC ID**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/vpc-id.png)

1. 向下滚动到**资源映射**部分。请注意路由表映射。打开映射到子网的每个路由表。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/route-table-associations.png)

1. 向下滚动到**路由**选项卡。查看路由以确定您的 VPC 是否同时具有以下两个路由表。这些要求中的每一项都必须由单独的路由表来满足。
   + 将面向互联网的流量（IPv4 的路由为 `0.0.0.0/0`，IPv6 的路由为 `::/0`）路由到互联网网关 (`igw-xxxxxxxxxx`)。这表示与路由表关联的子网是公有子网。
**注意**  
如果子网没有 IPv6 CIDR 块，则只能看到 IPv4 的路由 (`0.0.0.0/0`)。  
**Example 公有子网路由表**    
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/routes-public.png)
   + 将 IPv4 (`0.0.0.0/0`) 面向互联网的流量路由到与公有子网关联的 NAT 网关 (`nat-xxxxxxxxxx`)。这表示子网属于可以通过 NAT 网关访问互联网的私有子网。
**注意**  
如果子网具有 IPv6 CIDR 块，则路由表还必须将面向互联网的 IPv6 流量 (`::/0`) 路由到“仅出口互联网网关”(`eigw-xxxxxxxxxx`)。如果子网没有 IPv6 CIDR 块，则只能看到 IPv4 的路由 (`0.0.0.0/0`)。  
**Example 私有子网路由表**    
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/routes-private.png)

1. 重复上一步操作，直到查看了与 VPC 中子网关联的每个路由表，并确认存在带有互联网网关的路由表和带有 NAT 网关的路由表。

   如果没有两个路由表（一个带有指向互联网网关的路由，另一个带有指向 NAT 网关的路由），则按照以下步骤创建缺失的资源和路由表条目。

### 创建路由表
<a name="create-route-table"></a>

请按照以下步骤创建路由表，再将之与子网相关联。

**使用 Amazon VPC 控制台创建自定义路由表**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Route tables**（路由表）。

1. 选择**创建路由表**。

1. （可选）对于 **Name**（名称），为您的路由表输入名称。

1. 对于 **VPC**，选择您的 VPC。

1. （可选）若要添加标签，请选择 **Add new tag**（添加新标签），然后输入标签键和标签值。

1. 选择**创建路由表**。

1. 在 **Subnet associations (子网关联)** 选项卡上，选择 **Edit subnet associations (编辑子网关联)**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/route-table-subnet.png)

1. 选中要与路由表关联的子网的复选框。

1. 选择 **Save associations (保存关联)**。

### 创建互联网网关
<a name="create-igw"></a>

按照以下步骤创建互联网网关，再将其附加到 VPC，然后将之添加到公有子网的路由表中。

**创建互联网网关**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Internet gateways**（互联网网关）。

1. 选择**创建互联网网关**。

1. （可选）输入互联网网关的名称。

1. （可选）若要添加标签，请选择 **Add new tag**（添加新标签），然后输入该标签的键和值。

1. 选择**创建互联网网关**。

1. 从屏幕顶部的横幅中选择**附加到 VPC**，再选择可用的 VPC，然后选择**附加互联网网关**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/igw-attach-vpc.png)

1. 选择 **VPC ID**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/igw-subnet-1.png)

1. 再次选择 **VPC ID** 打开 VPC 详细信息页面。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/igw-your-vpcs.png)

1. 向下滚动到**资源映射**部分，然后选择一个子网。子网详细信息显示在新选项卡中。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/vpc-subnets.png)

1. 选择**路由表**下的链接。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/subnet-route-table.png)

1. 选择**路由表 ID** 打开路由表的详细信息页面。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/route-table-id.png)

1. 在**路由**下，选择**编辑路由**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/edit-routes.png)

1. 选择**添加路由**，然后在**目的地**框中输入 `0.0.0.0/0`。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/create-route-1.png)

1. 在**目标**中选择**互联网网关**，然后选择之前创建的互联网网关。如果子网具有 IPv6 CIDR 块，还须添加指向同一互联网网关的 `::/0` 路由。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/create-route-2.png)

1. 选择**保存更改**。

### 创建 NAT 网关
<a name="create-nat-gateway"></a>

按照以下步骤创建 NAT 网关，再将其与公有子网关联，然后将之添加到私有子网的路由表中。

**创建 NAT 网关并将之与公有子网关联**

1. 在导航窗格中，选择 **NAT 网关**。

1. 选择**创建 NAT 网关**。

1. （可选）输入 NAT 网关的名称。

1. 对于**子网**，选择 VPC 中的公有子网。（公有子网是其路由表中具有指向互联网网关的直接路由的子网。）
**注意**  
NAT 网关与公有子网关联，但路由表条目位于私有子网中。

1. 对于**弹性 IP 分配 ID**，请选择弹性 IP 地址或选择**分配弹性 IP**。

1. 选择**创建 NAT 网关**。

**在私有子网的路由表中向 NAT 网关添加路由**

1. 在导航窗格中，选择 **Subnets**(子网)。

1. 选择 VPC 中的私有子网。（私有子网是其路由表中不具有指向互联网网关的路由的子网。）

1. 选择**路由表**下的链接。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/subnet-route-table.png)

1. 选择**路由表 ID** 打开路由表的详细信息页面。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/route-table-id.png)

1. 向下滚动并选择**路由**选项卡，然后选择**编辑路由**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/route-table-edit-routes.png)

1. 选择**添加路由**，然后在**目的地**框中输入 `0.0.0.0/0`。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/create-route-1.png)

1. 在**目标**中选择 **NAT 网关**，然后选择之前创建的 NAT 网关。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/create-route-nat.png)

1. 选择**保存更改**。

### 创建“仅出口互联网网关”（仅限 IPv6）
<a name="create-egress-gateway"></a>

按照以下步骤创建“仅出口互联网网关”，在将之添加到私有子网的路由表中。

**创建“仅出口互联网网关”**

1. 在导航窗格中，选择**仅出口互联网网关**。

1. 选择**创建仅出口互联网网关**。

1. （可选）输入名称。

1. 选择要在其中创建“仅出口互联网网关”的 VPC。

1. 选择**创建仅出口互联网网关**。

1. 选择**附加的 VPC ID**下的链接。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/eigw-details.png)

1. 选择 **VPC ID** 下的链接，打开 VPC 详细信息页面。

1. 向下滚动到**资源映射**部分，然后选择一个私有子网。（私有子网是其路由表中不具有指向互联网网关的路由的子网。） 子网详细信息显示在新选项卡中。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/vpc-subnet-private.png)

1. 选择**路由表**下的链接。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/private-subnet-route-table.png)

1. 选择**路由表 ID** 打开路由表的详细信息页面。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/route-table-id.png)

1. 在**路由**下，选择**编辑路由**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/edit-routes.png)

1. 选择**添加路由**，然后在**目的地**框中输入 `::/0`。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/create-route-1.png)

1. 在**目标**中选择**仅限出口互联网网关**，然后选择之前创建的网关。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/eigw-route.png)

1. 选择**保存更改**。

### 配置 Lambda 函数
<a name="vpc-function-internet-create-existing"></a>

**在创建函数时配置 VPC**

1. 打开 Lamba 控制台的 [Functions page](https://console.aws.amazon.com/lambda/home#/functions)（函数页面）。

1. 选择 **Create function**（创建函数）。

1. 在**基本信息**下的**函数名称**中输入函数的名称。

1. 展开 **Advanced settings**（高级设置）。

1. 选择**启用 VPC**，再选择一个 VPC。

1. （可选）要允许[出站 IPv6 流量](configuration-vpc.md#configuration-vpc-ipv6)，请选择**允许双堆栈子网的 IPv6 流量**。

1. 对于**子网**，选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
**注意**  
如果您已选择**允许双堆栈子网的 IPv6 流量**，则所有选定的子网都必须具有 IPv4 CIDR 数据块和 IPv6 CIDR 数据块。

1. 对于**安全组**，选择一个允许出站流量的安全组。

1. 选择**创建函数**。

Lambda 使用 [AWSLambdaVPCAccessExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaVPCAccessExecutionRole.html) AWS 托管策略自动创建执行角色。只有在为 VPC 配置创建弹性网络接口时需要此策略中的权限，调用函数时并不需要。要应用最低权限，可以在创建函数和 VPC 配置之后，从执行角色中删除 **AWSLambdaVPCAccessExecutionRole** 策略。有关更多信息，请参阅 [所需的 IAM 权限](configuration-vpc.md#configuration-vpc-permissions)。

**为现有函数配置 VPC**

要将 VPC 配置添加到现有函数，该函数的执行角色必须具有[创建和管理弹性网络接口的权限](configuration-vpc.md#configuration-vpc-permissions)。[AWSLambdaVPCAccessExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaVPCAccessExecutionRole.html) AWS 托管策略包含这些必要权限。要应用最低权限，可以在创建 VPC 配置之后，从执行角色中删除 **AWSLambdaVPCAccessExecutionRole** 策略。

1. 打开 Lamba 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面。

1. 选择函数。

1. 选择**配置**选项卡，然后选择 **VPC**。

1. 在 **VPC** 下，选择 **Edit**（编辑）。

1. 选择 VPC。

1. （可选）要允许[出站 IPv6 流量](configuration-vpc.md#configuration-vpc-ipv6)，请选择**允许双堆栈子网的 IPv6 流量**。

1. 对于**子网**，选择全部私有子网。私有子网可以通过 NAT 网关访问互联网。将函数连接到公有子网并不会授予其互联网访问权限。
**注意**  
如果您已选择**允许双堆栈子网的 IPv6 流量**，则所有选定的子网都必须具有 IPv4 CIDR 数据块和 IPv6 CIDR 数据块。

1. 对于**安全组**，选择一个允许出站流量的安全组。

1. 选择**保存**。

### 测试此函数
<a name="vpc-function-internet-test-existing"></a>

使用以下示例代码，确认连接到 VPC 的函数是否可以访问公有互联网。如果成功，代码将返回 `200` 状态代码。如果失败，函数将超时。

------
#### [ Node.js ]

1. 在 Lambda 控制台的**代码源**窗格中，将以下代码粘贴到 **index.mjs** 文件中。该函数向公有端点发出 HTTP GET 请求，再返回 HTTP 响应代码来测试该函数是否可以访问公有互联网。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/code-source-nodejs.png)  
**Example 示例：包含 async/await 的 HTTP 请求**  

   ```
   const url = "https://aws.amazon.com/";
   
   export const handler = async(event) => {
       try {
           const res = await fetch(url);
           console.info("status", res.status);
           return res.status;
       }
       catch (e) {
           console.error(e);
           return 500;
       }
   };
   ```

1. 在**部署**部分，选择**部署**以更新函数的代码：  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 选择**测试**选项卡。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-tab.png)

1. 选择**测试**。

1. 该函数返回 `200` 状态代码。此结果表示该函数具有出站互联网访问权限。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-successful-200.png)

   如果该函数无法访问公有互联网，则会收到如下错误消息：

   ```
   {
     "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds"
   }
   ```

------
#### [ Python ]

1. 在 Lambda 控制台的**代码源**窗格中，将以下代码粘贴到 **ambda\$1function.py** 文件中。该函数向公有端点发出 HTTP GET 请求，再返回 HTTP 响应代码来测试该函数是否可以访问公有互联网。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/code-source-python.png)

   ```
   import urllib.request
   
   def lambda_handler(event, context):
       try:
           response = urllib.request.urlopen('https://aws.amazon.com')
           status_code = response.getcode()
           print('Response Code:', status_code)
           return status_code
       except Exception as e:
           print('Error:', e)
           raise e
   ```

1. 在**部署**部分，选择**部署**以更新函数的代码：  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 选择**测试**选项卡。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-tab.png)

1. 选择**测试**。

1. 该函数返回 `200` 状态代码。此结果表示该函数具有出站互联网访问权限。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/test-successful-200.png)

   如果该函数无法访问公有互联网，则会收到如下错误消息：

   ```
   {
     "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds"
   }
   ```

------