為 API Gateway 建立多區域部署
本教學課程說明如何設定 HTTP(S) 負載平衡器,為 API Gateway 啟用多區域部署。
建立 HTTP(S) 負載平衡器來支援 API Gateway 的多區域部署作業,可從多個區域提供服務,進而提升服務可用性並縮短延遲時間。您可以使用跨區域路由進一步縮短延遲時間,並盡可能延長正常運作時間,因為系統會從最接近使用者的可用區域處理要求。
在本教學課程中,您將設定單一非區域網址配置,該配置可在世界各地運作,但會從最接近的 API Gateway 部署���務使用者要求。透過這項設定,要求會盡可能轉送至可為使用者提供最短延遲時間的���域。如果最近的區域無法使用或容量不足,要求會轉送至其他區域,確保服務可用性。
事前準備
設定多區域部署作業前,請先按照 API Gateway 快速入門導覽課程,部署 Cloud Run 服務並建立指向該服務的閘道。
在本教學課程中,請將服務部署至兩個不同區域。舉例來說,您可以部署兩個 API Gateway 執行個體:
my-gateway-eu至歐洲地區my-gateway-us至美國境內的區域
設定權限
在本教學課程中,您將在 Cloud 專案中建立無伺服器網路端點群組 (NEG) 和外部 HTTP(S) 負載平衡器。您必須具備專案擁有者或編輯者角色,或是下列 Compute Engine IAM 角色:
| 工作 | 必要角色 |
|---|---|
| 建立負載平衡器和網路元件 | 網路管理員 |
| 建立及修改 NEG | Compute 執行個體管理員 |
| 建立及修改 SSL 憑證 | 安全管理員 |
建立 SSL 憑證資源
如要建立 HTTPS 負載平衡器,必須將 SSL 憑證資源新增至負載平衡器的前端。使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。
Google 代管憑證。建議使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。如要建立 Google 代管的憑證,您必須擁有網域和該網域的 DNS 記錄,才能佈建憑證。如果您還沒有網域,可以透過 Google Domains 取得。此外,您還需要更新網域的 DNS A 記錄,將其指向稍後步驟中建立的負載平衡器 IP 位址。如需詳細的操作說明,請參閱「使用 Google 管理的憑證」。
自行簽署的憑證。如果不想立即設定網域,可以使用自行簽署的 SSL 憑證進行測試。
本教學課程假設您���建立 SSL 憑證資源。
如要測試這個程序,但不想建立 SSL 憑證資源 (或 Google 代管憑證所需的網域),您仍可按照本頁的操作說明設定 HTTP 負載平衡器。
建立 HTTP(S) 負載平衡器
為每個 API Gateway 執行個體建立無伺服器 NEG。
網路端點群組 (NEG) 會為負載平衡器指定一組後端端點。無伺服器 NEG 是指向 API Gateway 等服務的後端,如下圖所示:

如要為每個閘道執行個體建立無伺服器 NEG,請執行下列指令:
- SERVERLESS_NEG_NAME 是要建立的無伺服器 NEG 名稱。
- GATEWAY_ID 會指定閘道的名稱。
- REGION_ID 是無伺服器 NEG 的部署區域 (應與閘道區域相符)。
gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \ --region=REGION_ID \ --network-endpoint-type=serverless \ --serverless-deployment-platform=apigateway.googleapis.com \ --serverless-deployment-resource=GATEWAY_ID
例如:
gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg-eu \ --region=europe-west1 \ --network-endpoint-type=serverless \ --serverless-deployment-platform=apigateway.googleapis.com \ --serverless-deployment-resource=my-gateway-eu
重複這個指令,為下一個閘道執行個體建立無伺服器 NEG,並使用第二個閘道執行個體的適當值,例如
us-central1區域中的my-gateway-us的api-gateway-serverless-neg-us。建立後端服務,定義 Cloud Load Balancing 分配流量的方式。
後端服務設定包含一組值,例如用於連線至後端的通訊協定、各種分配和工作階段設定、健康狀態檢查和逾時,如下圖所示:

如要建立後端服務,並將無伺服器 NEG 新增至後端服務做為後端,請執行下列指令:
- BACKEND_SERVICE_NAME 是後端服務的名稱。
- SERVERLESS_NEG_NAME 是在上一個步驟中建立的無伺服器 NEG 名稱。
- REGION_ID 是無伺服器 NEG 的部署區域 (應與閘道區域相符)。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --global \
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --global \ --network-endpoint-group=SERVERLESS_NEG_NAME \ --network-endpoint-group-region=REGION_ID
例如:
gcloud compute backend-services add-backend api-gateway-backend-service \ --global \ --network-endpoint-group=api-gateway-serverless-neg-eu \ --network-endpoint-group-region=europe-west1
重複執行這項指令,將第二個無伺服器 NEG 新增至後端服務,並為第二個無伺服器 NEG 使用適當的值,例如
us-central1區域中的api-gateway-serverless-neg-us(適用於my-gateway-us)。建立網址對應,將連入要求轉送至後端服務,如下圖所示:

如要建立網址對應,請執行下列指令:
- URL_MAP_NAME 是要建立的網址對應名稱。
- BACKEND_SERVICE_NAME 是後端服務的名稱。
gcloud compute url-maps create URL_MAP_NAME \ --default-service BACKEND_SERVICE_NAME
例如:
gcloud compute url-maps create api-gateway-url-map \ --default-service api-gateway-backend-service
這個網址對應只會指定代表單一閘道的後端服務,因此不需要主機規則或路徑比對器。如果您有多個後端服務,可以使用主機規則,根據主機名稱將要求導向至不同服務。使用路徑比對器,根據要求路徑將要求導向不同的服務。
例如:
gcloud compute url-maps add-path-matcher api-gateway-url-map \ --path-matcher-name=my-pm2 \ --default-service=my-host-default-backend \ --path-rules="/video=video-service,/video/*=video-service" \ --new-hosts my-hosts.com
gcloud compute url-maps add-host-rule api-gateway-url-map \ --hosts=my-app-domain \ --path-matcher-name=my-app-path-matcher
如要進一步瞭解主機規則和路徑比對器,請參閱網址對應說明文件。
為目標 Proxy 建立 SSL 憑證,如下圖所示:

如要建立 HTTPS 負載平衡器,HTTPS 目標 Proxy 必須具備 SSL 憑證資源。您可以透過 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。建議使用 Google 代管的憑證。
如要建立 Google 代管的憑證, 您必須擁有網域。如果沒有網域,可以使用自行簽署的 SSL 憑證進行測試。
建立 Google 代管的 SSL 憑證資源:
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME --domains DOMAIN
建立自行管理的 SSL 憑證資源:
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
建立目標 HTTP(S) Proxy,將要求轉送至網址對應,如下圖所示:

如要建立目標 Proxy,請使用下列指令,其中:
- TARGET_HTTP_PROXY_NAME 是要建立的目標 Proxy 名稱。
- URL_MAP_NAME 是您在前一個步驟建立的網址對應名稱。
- 選用:SSL_CERT_NAME 是建立的 SSL 憑證名稱。
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --ssl-certificates=SSL_CERT_NAME --url-map=URL_MAP_NAME
例如:
gcloud compute target-http-proxies create api-gateway-https-proxy \ --ssl-certificates=hello-cert --url-map=api-gateway-url-map
建立轉送規則,將連入要求轉送至 Proxy,如下圖所示:

使用下列指令建立轉送規則,其中:
- HTTPS_FORWARDING_RULE_NAME 是要建立的規則名稱。
- TARGET_HTTP_PROXY_NAME 是要建立的目標 Proxy 名稱。
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --global \ --ports=443
例如:
gcloud compute forwarding-rules create my-fw \ --target-https-proxy=api-gateway-https-proxy \ --global \ --ports=443
使用負載平衡器 IP 位址更新 DNS 記錄
如果您使用自訂網域,則必須完成這個步驟,才能設定網域的 DNS 設定,將網域指向服務的新 IP 位址。如果您使用 Google 管理的憑證(需要網域) 建立 HTTP (S) 負載平衡器,也必須執行這項操作。搭配 DNS 使用時,建議您分配及使用靜態 IP 位址。這個步驟的具體操作說明會因 DNS 供應商而異。
如要將流量傳送至負載平衡器,網域 (在本教學課程中為 my-app-domain) 的 DNS 記錄必須指向負載平衡器的 IP 位址。
如要找出全域轉送規則的 IP 位址,請使用下列指令:
gcloud compute forwarding-rules list
更新網域的 DNS A 或 AAAA 記錄,指向負載平衡器的 IP 位址,這樣傳送至現有自訂網域網址的流量就會改為透過負載平衡器轉送。DNS 可能需要幾秒鐘或幾小時,才能將這項變更傳播至 DNS 伺服器。
請使用
curl或在瀏覽器中造訪下列網址,藉此測試閘道是否可接收到流量。例如:https://my-app-domain測試時,您應該會看到 Cloud Run 服務產生的回應。舉例來說,這可能是「Hello World」HTML 網頁,或是後端服務直接產生的其他預期回應。這表示您的要求會通過負載平衡器,後端服務會指示負載平衡器將要求傳送至閘道。
注意事項
實作 API Gateway 多區域部署前,請先考量下列事項:
API Gateway 目前不支援健康狀態檢查。如上所述,如果閘道或後端服務在某個地區傳回錯誤,但該地區的整體 API 閘道基礎架構可用且有容量,HTTP(S) 負載平衡器不會將流量轉送至其他地區。
如要在單一轉送規則中合併不同區域,必須採用進階級定價。如要進一步瞭解如何計算價格和用量,請參閱「網路服務級別定價」。
最佳做法
使用多區域服務時,建議使用全球複製的代管資料儲存解決方案 (例如 Cloud Spanner),確保所有資料都能在全球範圍內管理。