API 閘道部署模型

關於 API 元件

在 API Gateway 上定義的 API 包含兩個主要元件:

  1. API 設定:上傳 API 定義時建立的 API 設定。您會以 OpenAPI 規格建立 API 定義。如果 API 管理 Cloud Run 上的 gRPC 服務,您可以透過 gRPC 服務定義和設定定義 API。

    每次上傳 API 定義時,API Gateway 都會建立新的 API 設定。也就是說,您可以建立 API 設定,但之後無法修改。如果您稍後在 OpenAPI 規格或 gRPC 服務定義中編輯 API 定義,然後上傳編輯後的 API 定義,系統就會建立新的 API 設定。

  2. 閘道:以 Envoy 為基礎的高效能可擴充 Proxy,用於代管已部署的 API 設定。將 API 設定部署至閘道時,會建立 API 用戶端用來存取 API 的外部網址。

下圖顯示這些元件:

API Gateway 窗格中的 API 定義會顯示三個 API 設定元件和三個閘道元件。

關於將 API 設定部署至閘道

API 設定部署至閘道,讓 API 用戶端存取 API:

在三個範例 API 中,API 設定會部署至閘道,讓 API 用戶端可以存取 API。

閘道:

  • 部署至特定 Google Cloud 區域。區域是可供您部署資源的特定地理區域。 Google Cloud

  • 必須代管 API 設定。您無法建立空白閘道,也就是沒有 API 設定的閘道。不過,建立閘道後,您可以更新閘道,將一個 API 設定換成另一個。

  • 只能代管單一 API 設定。您無法將多個 API 設定部署到同一個閘道。

然後分別管理每個已部署的閘道。您可以對每個閘道執行下列操作:

  • 啟動/停止/刪除閘道
  • 查看記錄檔和指標
  • 查看追蹤資訊

選擇 Google Cloud 區域

每個閘道都會部署到 Google Cloud上的特定地理區域。API Gateway 支援下列 Google Cloud 部署區域:

  • asia-northeast1
  • australia-southeast1
  • europe-west1
  • europe-west2
  • us-east1
  • us-east4
  • us-central1
  • us-west2
  • us-west3
  • us-west4

定義已部署 API 設定的端點

將 API 設定部署至閘道時,API Gateway 會在 gateway.dev 網域中為閘道建立專屬網址。API 用戶端隨後會使用下列格式的網址,存取已部署的 API 設定:

https://GATEWAY_ID-HASH.REGION_CODE.gateway.dev

其中 GATEWAY_ID 是閘道名稱,HASH 是部署 API 時產生的專屬雜湊碼,REGION_CODE 則是部署閘道的 Cloud 地理位置代碼。

例如:

my-gateway-a12bcd345e67f89g0h.uc.gateway.dev

設定服務帳戶來部署 API 設定

在閘道上部署的 API 設定會使用與服務帳戶相關聯的權限執行,而這些權限是授予服務帳戶的角色所提供。因此,您通常會定義個別的服務帳戶來建立 API 設定。然後只將該服務帳戶指派給存取後端服務所需的角色。這樣一來,您就能限制與 API 設定相關聯的權限。

除了存取後端服務所需的角色,服務帳戶也必須取得下列權限:

  • iam.serviceAccounts.actAs 權限。「服務帳戶使用者」角色也具有此權限。

  • 存取後端服務所需的權限。舉例來說,如果後端是以 Cloud Function 實作,則服務帳戶至少應指派 Cloud Functions 叫用者角色。如果是 Cloud Run 後端,則角色為「Cloud Run Invoker」。限制與 API 設定相關聯的權限,可進一步保護後端系統。

詳情請參閱「設定開發環境」。

關於將資源調度率降至零

API Gateway 是可縮減至零的服務。也就是說,如果沒有任何流量,系統會刪除所有閘道執行個體。流量增加時,系統會視需要建立新的執行個體來處理負載。 Google Cloud會自動控制縮減至零的程序,您不需要設定或管理。

使用負載平衡器

在區域中部署的每個閘道都包含整合式負載平衡器,可管理用戶端對部署至閘道的 API 的要求。您不必為每個閘道分別建立負載平衡器。

在不同地區的閘道上部署相同 API 時,您必須建立負載平衡器。接著,負載平衡器會將 API 要求導向不同區域。詳情請參閱「將 API 部署至多個區域」。

設定 API 的 SSL 存取權

API Gateway 支援透過 HTTPS 存取部署至閘道的 API。由於 API 部署至 gateway.dev 網域,Google 會在與閘道整合的負載平衡器上建立及管理 SSL 憑證。您不必建立或上傳自己的憑證。

設定網域名稱伺服器

根據預設,API 用戶端會向 gateway.dev 網域提出要求,以存取已部署的 API,如上圖所示。

自訂網域名稱適用於 API Gateway,搭配 API Gateway 的 HTTP(S) 負載平衡搶先版使用。如要自訂網域名稱,請建立負載平衡器來使用自訂網域名稱,然後將要求導向已部署 API 的 gateway.dev 網域。詳情請參閱「使用 API Gateway 的自訂網域」。

在同一個 API 中部署多個 API 設定

您只能將單一 API 設定部署至閘道。不過,您可以在同一個 API 中,將多個 API 設定部署至多個閘道。

本節說明兩種情境,您可能會在單一 API 內的多個閘道上部署多個 API 設定。

將 API 設定部署至相同區域中的多個閘道

建構 API 時,API 開發人員通常會建立開發、測試和正式環境,其中:

  • 開發人員會使用開發環境建立 API。
  • 暫存環境用於測試 API,為發布至正式版環境做準備。
  • 外部 API 用戶端只能在正式版環境中存取 API。

如要支援這類開發環境,請定義多個 API 設定。舉例來說,您可能有多個開發中的 API 設定、一個在測試環境中測試的 API 設定,以及一個部署至正式環境的 API 設定。API Gateway 可讓您在單一 API 中建立多個 API 設定,然後將每個 API 設定部署至不同的閘道:

在 API 1 中,有三個 API 設定 (分別是 API Config Dev、API Config Stage 和 API Config Prod) 部署到三個對應的閘道。

在這個範例中,您有三個不同的 API 設定:devstageprod。接著,您會將每個 API 設定部署到不同的閘道,每個閘道會定義自己的專屬端點網址。

將 API 設定部署至多個區域

您通常會將 API 部署到多個 Google Cloud 區域。在多個區域部署可帶來多項優勢,包括縮短要求延遲時間 (因為要求會導向在地理位置上靠近用戶端的區域執行的 API),以及提升可靠性 (因為一個區域發生故障不會影響在其他區域執行的 API)。

如要將 API 部署至多個區域,請將 API 設定部署至每個區域的閘道。每個 API 設定都專屬於部署的區域,因為必須參照該區域的後端服務。

在下圖中,API 1 和 2 部署至單一區域,API 3 則部署至多個區域:

API 1 和 API 2 部署至區域 1,API 3 則使用負載平衡器部署至區域 1、區域 2 和區域 3。

在這個範例中,部署至 API 3 閘道的每個 API 設定都有專屬的網址端點,格式如下:

https://my-gateway1-a12bcd345e67f89g0h.uc.gateway.dev
https://my-gateway2-b12cde345f67g89h0i.en.gateway.dev
https://my-gateway3-c12bde345g67h89i0j.uw.gateway.dev

然後使用「API Gateway 的 HTTP(S) 負載平衡」預先發布版設定負載平衡器,處理 API 要求並將要求轉送至適當區域。詳情請參閱「為 API Gateway 建立多區域部署作業」。

更新 API

如要更新已部署的 API,請編輯 OpenAPI 規格中的 API 定義,然後上傳規格。上傳新規格會建立新的 API 設定。

API Gateway 支援零停機時間更新模型,也就是說,在部署更新後的 API 設定期間,API 會繼續處理要求。不過,在部署新版 API 設定的期間,部分要求可能仍會由舊版 API 設定處理。

如果您已在多個區域和閘道中部署 API 設定,則必須分別在每個區域重新部署更新後的 API 設定。

後續步驟