

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

# 教學：建置具 cross-account Lambda 代理整合的 REST API
<a name="apigateway-cross-account-lambda-integrations"></a>

您現在可以使用來自不同 AWS 帳戶的 AWS Lambda 函數做為 API 整合後端。每個帳戶可以位於 Amazon API Gateway 可用的任何區域。這可讓您輕鬆地集中管理和分享跨多個 API 的 Lambda 後端函數。

在本節中，我們示範如何使用 Amazon API Gateway 主控台設定跨帳戶 Lambda 代理整合。

## 建立 API Gateway 跨帳戶 Lambda 整合的 API
<a name="apigateway-cross-account-lambda-integrations-create-api"></a>

**建立 API**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 如果這是您第一次使用 API Gateway，您會看到服務功能的介紹頁面。在 **REST API** 下方，選擇 **Build (組建)**。當 **Create Example API (建立範例 API)** 快顯出現時，選擇 **OK (確定)**。

   如果這不是第一次使用 API Gateway，請選擇 **Create API (建立 API)**。在 **REST API** 下方，選擇**組建**。

1.  對於**API 名稱**，輸入 **CrossAccountLambdaAPI**。

1. 在**描述**，請輸入描述。

1. 將 **API 端點類型**保持設定為**區域**。

1. 針對 **IP 位址類型**，選擇 **IPv4**。

1. 選擇**建立 API**。

## 在另一個帳戶建立 Lambda 整合函數
<a name="apigateway-cross-account-lambda-integrations-create-lambda-function"></a>

現在您可以從與您在範例 API 中建立的不同帳戶建立 Lambda 函數。

**在另一個帳戶中建立 Lambda 函數**

1. 透過與您在 API Gateway API 中建立的不同的帳戶登入 Lambda 主控台。

1. 選擇 **Create function (建立函數)**。

1. 選擇 **Author from scratch** (從頭開始撰寫)。

1. 在 **Author from scratch (從頭開始撰寫)** 下，進行下列操作：

   1. 針對 **Function name (函數名稱)**，輸入名稱。

   1. 從 **Runtime (執行時間)** 下拉式清單中，選擇支援的 Node.js 執行時間。

   1. 對於**架構**，請保留預設設定。

   1. 在 **Permissions (許可)** 下，展開 **Choose or create an execution role (選擇或建立執行角色)**。您可以建立角色或選擇現有角色。

   1. 選擇 **Create function (建立函數)** 繼續。

1. 向下捲動到**函數程式碼** 窗格中。

1. 從 [教學：建立具 Lambda 代理整合的 REST API](api-gateway-create-api-as-simple-proxy-for-lambda.md) 輸入 Node.js 函數實作。

1. 選擇 **Deploy (部署)**。

1. 請注意適用於您函數的完整 ARN (在 Lambda 函數窗格的右上角)。在建立跨帳戶 Lambda 整合時會需要用到。

## 設定跨帳戶 Lambda 整合
<a name="apigateway-cross-account-lambda-integrations-create-integration2"></a>

在不同的帳戶有 Lambda 整合函數後，您可以使用 API Gateway 主控台在您的第一個帳戶將其新增至 API。

**注意**  
如果您設定的是跨區域、跨帳戶授權方，新增到目標函數的 `sourceArn` 應使用函數的區域，而非 API 的區域。

在建立 API 之後，請建立資源。一般而言，會根據應用程式邏輯將 API 資源組織為資源樹狀結構。在此範例中，您會建立 **/helloworld** 資源。

**建立資源**

1. 選擇**建立資源**。

1. 讓**代理資源**保持關閉。

1. 將**資源路徑**保持為 `/`。

1. 針對**資源名稱**，輸入 **helloworld**。

1. 讓 **CORS (跨來源資源分享)** 保持關閉。

1. 選擇**建立資源**。

在建立資源之後，請建立 `GET` 方法。將 `GET` 方法與另一個帳戶中的 Lambda 函數整合。

**建立 `GET` 方法**

1. 選取 **/helloworld** 資源，然後選擇**建立方法**。

1. 針對**方法類型**，選取 **GET**。

1. 針對**整合類型**，選取 **Lambda 函數**。

1. 開啟 **Lambda 代理整合**。

1. 針對 **Lambda 函數**，輸入步驟 1 中 Lambda 函數的完整 ARN。

   在 Lambda 主控台中，您可以在主控台視窗的右上角找到適用於您函數的 ARN。

1. 當您輸入 ARN 時，便會出現 `aws lambda add-permission` 命令字串。這個政策會授予您的第一個帳戶對第二個帳戶 Lambda 函數的存取權。將`aws lambda add-permission`命令字串複製並貼到為第二個帳戶設定的 AWS CLI 視窗中。

1. 選擇**建立方法**。

您可以在 Lambda 主控台中查看您的函數適用的更新政策。

**(選用) 查看更新的政策**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 選擇 Lambda 函數。

1. 選擇**許可**。

   您現在應該會看到內含 `Allow` 子句的 `Condition` 政策，其中 `AWS:SourceArn` 為您 API `GET` 方法的 ARN。