如何為連線到 Amazon VPC 的 Lambda 函數提供網際網路存取權限?

上次更新日期: 2020 年 10 月 29 日

我想為連線到 Amazon Virtual Private Cloud (Amazon VPC) 的AWS Lambda 函數提供網際網路存取權限。如何為此設定 Amazon VPC?

簡短描述

若要存取私有 Amazon VPC 資源,例如 Relational Database Service (Amazon RDS) 資料庫執行個體或 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,請將 Amazon VPC 中的 Lambda 函數與一個或多個私有子網路相關聯。

若要授予對您函數的網際網路存取,其關聯的 VPC 必須在公有子網路中具備 NAT 閘道 (或 NAT 執行個體)。

注意:子網路是私有還是公有取決於其路由表。公有子網路具有指向網際網路閘道的路由,而私有子網路則沒有。

解決方案

如果您使用現有的 Amazon VPC,請從建立 VPC 元件開始,建立一個具有 NAT 閘道的公有子網路及一個或多個私有子網路。如果您現有的 VPC 已經有一個帶有 NAT 閘道的公有子網路及一個或多個私有子網路,請跳至 Create a Lambda execution role for your VPC (為 VPC 建立 Lambda 執行角色)。

如果您想要為此設定建立新的 VPC,請使用 VPC 精靈,然後選擇 VPC with Public and Private Subnets (含公有子網路和私有子網路的 VPC)。如需詳細資訊,請參閱 含公有子網路和私有子網路的 VPC (NAT)。(在 Amazon VPC 主控台中,您的子網路分別命名為「公有子網路」和「私有子網路」。) 然後,跳至 Create a Lambda execution role for your VPC (為 VPC 建立 Lambda 執行角色)。

建立 VPC 元件

  1. 在 VPC 中建立一個或多個新的子網路。在建立過程中,針對 Name (名稱) 標籤,新增一個名稱,以幫助您辨識哪些是公有子網路,哪些是私有子網路。例如,將一個命名為 Public Subnet,其他的命名為 Private Lambda (或者,若為多個私有子網路,則為 Private Lambda 1Private Lambda 2 等等)。
    注意:最佳實務是跨不同的可用區域建立多個私有子網路以實現冗餘,如此一來,Lambda 可為函數維持高可用性
  2. 建立網際網路閘道並將其連接到 VPC
  3. 建立 NAT 閘道。在建立過程中,針對 Subnet (子網路),選擇您想要公開的子網路。(例如,Public Subnet,如果您之前已命名。)
    注意:有關建立後測試 NAT 閘道的幫助,請參閱測試 NAT 閘道

為您的子網路建立和修改路由表

注意:與 Amazon VPC 連線的 Lambda 函數在發出請求時會隨機選取關聯的子網路。您的函數使用的所有子網路都應具有相同的組態,以防止 Lambda 使用錯誤設定的子網路導致的隨機錯誤。

  1. 在 Amazon VPC 主控台的路由表窗格中,為 VPC 建立兩個自訂路由表
    秘訣:在建立過程中,針對 Name (名稱) 標籤,新增一個名稱,以幫助您辨識與路由表關聯的是哪個子網路。例如,將一個命名為 Public Subnet,其他的命名為 Private Lambda
  2. 將公有子網路路由表 (Public Subnet) 與要公開的子網路相關聯。
  3. 向該路由表新增一個路由。指定以下內容:
    針對 Destination (目的地),輸入 0.0.0.0/0
    針對 Target (目標),選擇 Internet Gateway (網際網路閘道),然後選擇您建立的網際網路閘道的 ID (igw-123example)。
    選擇 Save routes (儲存路由)。關聯的子網路現為公有子網路。
  4. 將其他路由表 (Private Lambda) 與私有子網路相關聯。
  5. 向該路由表新增一個路由。指定以下內容:
    針對 Destination (目的地),輸入 0.0.0.0/0
    針對 Target (目標),選擇 NAT Gateway (NAT 閘道),然後選擇您建立的 NAT 閘道的 ID (nat-123example)。(如果使用的是 NAT 執行個體,改為選擇 Network Interface (網路介面)。)
    選擇 Save routes (儲存路由)。

注意:確保 NAT 閘道的路由處於 active (有效) 狀態。如果已刪除 NAT 閘道且您還沒有更新路由,則它們處於 blackhole 狀態。如需詳細資訊,請參閱更新您的路由表

設定網路 ACL

您的 Amazon VPC 中的預設網路存取控制清單 (ACL) 允許所有傳入和傳出流量。如果您變更了網路 ACL 規則 (或您計劃對其進行變更),請確保仍允許來自您的 Lambda 函數的傳出請求。另外,請確保根據您的 VPC 組態的需求允許傳入流量:

如需詳細資訊,請參閱 Amazon VPC 中的網際網路流量隱私

為 VPC 建立 Lambda 執行角色

  1. 在 AWS Identity and Access Management (IAM) 主控台的角色窗格,選擇 Create role (建立角色)。
  2. Create role (建立角色) 頁面,執行以下操作:
    針對選取受信任實體的類型,確認已選取 AWS service (AWS 服務)。
    針對選擇使用案例,選擇 Lambda
    選擇 Next: Permissions (下一步:許可)。
  3. Attach permissions policies (附加許可政策) 下,搜尋 AWSLambdaVPCAccessExecutionRole。選取具有該名稱的政策,然後選擇 Next: Tags (下一步:標籤)。
  4. 若您希望的話,還可以新增標籤,然後選擇 Next: Review (下一步:檢閱)。
  5. Review (檢閱) 下,執行以下操作:
    針對角色名稱,輸入此 Lambda 執行角色的名稱。例如,lambda_vpc_basic_execution
    (選擇性) 針對角色描述,編輯您偏好設定的描述。
    選擇 Create role (建立角色)。

如需詳細資訊,請參閱 AWS Lambda 執行角色

設定 Lambda 函數

  1. 在 AWS Lambda 主控台的函數窗格,選擇您想要連線到 Amazon VPC 的函數的名稱。
  2. Configuration (組態) 窗格,在 Execution role (執行角色) 下,針對現有角色,選擇您建立的 IAM 執行角色。(例如,lambda_vpc_basic_execution。)
  3. Configuration (組態) 窗格,在 VPC 下,執行以下操作:
    針對 Virtual Private Cloud (VPC),選擇您的 VPC。
    針對子網路,選取您建立的私有子網路。透過它們的子網路 ID (和名稱,若已命名) 進行辨識。
    針對安全群組,選擇一個安全群組。
    注意:預設安全群組允許所有傳出網際網路流量,且已足夠滿足大多數使用案例。如需詳細資訊,請參閱 VPC 的安全群組
  4. 選擇 Save (儲存)。