

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟用 VPC 連線的 Lambda 函數的網際網路存取
<a name="configuration-vpc-internet"></a>

根據預設，會在具有網際網路存取權的 Lambda 受管 VPC 中執行 Lambda 函數。若要存取帳戶中 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. 針對 **Resources to create** (建立資源)，選擇 **VPC and more** (VPC 等)。

1. **設定 VPC**

   1. 針對**自動產生名稱標籤**，輸入 VPC 的名稱。

   1. 對於 **IPv4 CIDR 區塊**，您可以保留預設建議，或者您也可以輸入應用程式或網路所需的 CIDR 區塊。

   1. 如果您的應用程式使用 IPv6 地址進行通訊，請選擇 **IPv6 CIDR 區塊** > **Amazon 提供的 IPv6 CIDR 區塊**。

1. **設定子網路**

   1. 針對**可用區域數量**，選擇 **2**。建議至少使用兩個可用區域，以實現高可用性。

   1. 針對**公用子網路數量**，選擇 **2**。

   1. 在 **Number of private subnet** (私有子網路數量) 中，選擇 **2**。

   1. 您可以保留公有子網路的預設 CIDR 區塊，或者您也可以展開**自訂子網路 CIDR 區塊**並輸入 CIDR 區塊。如需詳細資訊，請參閱[子網路 CIDR 區塊](https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html)。

1. 若為 **NAT 閘道**，請選擇**每個 AZ 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. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇**建立函數**。

1. 在 **Basic information (基本資訊)** 下，對於 **Function name (函數名稱)**，為您的函數輸入名稱。

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. 開啟 Lambda 主控台中的 [函數頁面](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_tw/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. 在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼：  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 選擇**測試**標籤。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/test-tab.png)

1. 選擇**測試**。

1. 函數會傳回 `200` 狀態碼。這表示函數擁有傳出網際網路存取權。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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 主控台的**程式碼來源**窗格中，將下列程式碼貼到 **lambda\$1function.py** 檔案中。函數會對公有端點發出 HTTP GET 請求，並傳回 HTTP 回應程式碼，以測試函數是否可存取公有網際網路。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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. 在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼：  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 選擇**測試**標籤。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/test-tab.png)

1. 選擇**測試**。

1. 函數會傳回 `200` 狀態碼。這表示函數擁有傳出網際網路存取權。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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_tw/lambda/latest/dg/images/vpc-id.png)

1. 向下捲動至**資源映射**區段。請注意路由表映射。開啟映射至子網路的每個路由表。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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_tw/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_tw/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. 選擇 **Create route table** (建立路由表)。

1. (選用) 針對 **Name** (名稱)，輸入路由表的名稱。

1. 在 **VPC** 中，選擇您的 VPC。

1. (選用) 若要新增標籤，請選擇 **Add new tag** (新增標籤)，然後輸入標籤鍵和標籤值。

1. 選擇 **Create route table** (建立路由表)。

1. 在 **Subnet associations** (子網關聯) 標籤上，選擇 **Edit subnet associations** (編輯子網關聯)。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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_tw/lambda/latest/dg/images/igw-attach-vpc.png)

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

1. 再次選擇 **VPC ID** 以開啟詳細資訊頁面。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/igw-your-vpcs.png)

1. 向下捲動至**資源映射**區段，然後選擇子網路。子網路詳細資訊會顯示在新索引標籤中。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/vpc-subnets.png)

1. 選擇**路由表**下方的連結。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/subnet-route-table.png)

1. 選擇**路由表 ID** 以開啟路由表詳細資訊頁面。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/route-table-id.png)

1. 在**路由**下，選擇**編輯路由**。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/edit-routes.png)

1. 選擇**新增路由**，然後在**目的地**方塊中輸入 `0.0.0.0/0`。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/create-route-1.png)

1. 對於**目標**，選取**網際網路閘道**，然後選擇先前建立的網際網路閘道。如果子網路具有 IPv6 CIDR 區塊，還必須將 `::/0` 的路由新增至相同的網際網路閘道。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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_tw/lambda/latest/dg/images/subnet-route-table.png)

1. 選擇**路由表 ID** 以開啟路由表詳細資訊頁面。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/route-table-id.png)

1. 向下捲動並選擇**路由**索引標籤，然後選擇**編輯路由**  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/route-table-edit-routes.png)

1. 選擇**新增路由**，然後在**目的地**方塊中輸入 `0.0.0.0/0`。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/create-route-1.png)

1. 對於**目標**，選取 **NAT 閘道**，然後選擇先前建立的 NAT 閘道。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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_tw/lambda/latest/dg/images/eigw-details.png)

1. 選擇 **VPC ID** 下方的連結，以開啟 VPC 詳細資訊頁面。

1. 向下捲動至**資源映射**區段，然後選擇私有子網路。(私有子網路是指不可路由至其路由表中網際網路閘道的子網路。) 子網路詳細資訊會顯示在新索引標籤中。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/vpc-subnet-private.png)

1. 選擇**路由表**下方的連結。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/private-subnet-route-table.png)

1. 選擇**路由表 ID** 以開啟路由表詳細資訊頁面。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/route-table-id.png)

1. 在**路由**下，選擇**編輯路由**。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/edit-routes.png)

1. 選擇**新增路由**，然後在**目的地**方塊中輸入 `::/0`。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/create-route-1.png)

1. 對於**目標**，選取**僅限輸出的網際網路閘道**，然後選擇先前建立的閘道。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/eigw-route.png)

1. 選擇**儲存變更**。

### 設定 Lambda 函數
<a name="vpc-function-internet-create-existing"></a>

**若要在建立函數時設定 VPC**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇**建立函數**。

1. 在 **Basic information (基本資訊)** 下，對於 **Function name (函數名稱)**，為您的函數輸入名稱。

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. 開啟 Lambda 主控台中的 [函數頁面](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_tw/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. 在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼：  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 選擇**測試**標籤。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/test-tab.png)

1. 選擇**測試**。

1. 函數會傳回 `200` 狀態碼。這表示函數擁有傳出網際網路存取權。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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 主控台的**程式碼來源**窗格中，將下列程式碼貼到 **lambda\$1function.py** 檔案中。函數會對公有端點發出 HTTP GET 請求，並傳回 HTTP 回應程式碼，以測試函數是否可存取公有網際網路。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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. 在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼：  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

1. 選擇**測試**標籤。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/test-tab.png)

1. 選擇**測試**。

1. 函數會傳回 `200` 狀態碼。這表示函數擁有傳出網際網路存取權。  
![\[\]](http://docs.aws.amazon.com/zh_tw/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"
   }
   ```

------