API 閘道部署模型

關於 API 元件

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

  1. API 設定:上傳 API 定義時建立的 API 設定。您可以將 API 定義建立為 OpenAPI 規格。如果您的 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 設定。該服務帳戶只會指派存取後端服務所需的角色。這樣一來,您就能限制與 API 設定相關聯的權限。

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

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

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

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

關於將資源調度率降至零

API Gateway 是可縮放至零的服務。也就是說,在沒有流量時,所有閘道執行個體都會遭到刪除。當流量增加時,系統會視需要建立新的執行個體來處理負載。 Google Cloud會自動控制縮放至零的功能,您不需要設定或管理這項功能。

使用負載平衡器

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

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

設定 API 的 SSL 存取權

API Gateway 支援對部署至閘道的 API 進行 HTTPS 存取。由於 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 和 API 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 設定。

後續步驟