為 API Gateway 建立多區域部署作業
本教學課程說明如何設定 HTTP(S) 負載平衡器,為 API Gateway 啟用多區域部署。
建立 HTTP(S) 負載平衡器來支援 API Gateway 的多區域部署作業,可從多個區域提供服務,進而提升服務可用性並縮短延遲時間。您可以使用跨區域路由,從離使用者最近的可用區域提供要求,進一步縮短延遲時間並提高正常運作時間。
在本教學課程中,您將設定單一非區域網址配置,適用於全球各地,但會從最接近的 API Gateway 部署作業處理使用者要求。完成這項設定後,系統會將要求轉送至可為使用者提供最低延遲的區域。如果最近的區域無法使用或容量不足,要求會轉送至其他區域,確保服務可用性。
事前準備
設定多區域部署作業前,請按照 API Gateway 快速入門導覽課程,部署 Cloud Run 服務並建立指向該服務的閘道。
在本教學課程中,您會將服務部署至兩個不同的區域。舉例來說,您可以部署兩個 API Gateway 執行個體:
my-gateway-eu至歐洲區域my-gateway-us至美國境內區域
設定權限
在本教學課程中,您會在雲端專案中建立無伺服器網路端點群組 (NEG) 和外部 HTTP(S) 負載平衡器。您必須具備專案擁有者或編輯者角色,或是下列 Compute Engine IAM 角色:
| 工作 | 必要角色 |
|---|---|
| 建立負載平衡器和網路元件 | 網路管理員 |
| 建立及修改 NEG | Compute 執行個體管理員 |
| 建立及修改 SSL 憑證 | 安全管理員 |
建立 SSL 憑證資源
如要建立 HTTPS 負載平衡器,必須在負載平衡器的前端新增 SSL 憑證資源。無論是 Google 代管的 SSL 憑證,還是自行管理的 SSL 憑證,都可用於建立 SSL 憑證資源。
Google 代管的憑證。建議使用這類憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。如要建立 Google 代管的憑證,您必須擁有網域和該網域的 DNS 記錄,才能佈建憑證。如果您還沒有網域,可以透過 Google Domains 取得。此外,您還需更新網域的 DNS A 記錄,指向上一個步驟中建立的負載平衡器 IP 位址。如需詳細的操作說明,請參閱「使用 Google 代管的憑證」。
自行簽署的憑證。如果目前不想設定網域,可以使用自行簽署的 SSL 憑證進行測試。
本教學課程假設您已建立 SSL 憑證資源。
如果您不要建立 SSL 憑證資源 (或 Google 代管的憑證所需的網域),但想測試這個程序,您仍可按照本頁的說明操作,設定 HTTP 負載平衡器。
建立 HTTP 或 HTTPS 負載平衡器
為每個 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區域的my-gateway-us為api-gateway-serverless-neg-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測試,或在瀏覽器中前往網址,確認閘道是否收到流量。例如:none https://my-app-domain您應該會看到 Cloud Run 服務生成的回應。舉例來說,這可能是「Hello World」HTML 網頁,或是後端服務直接產生的其他預期回應。這表示要求會通過負載平衡器,後端服務會指示負載平衡器將要求傳送至閘道。
注意事項
導入 API Gateway 的多區域部署作業前,請先考量下列事項:
API Gateway 不支援健康狀態檢查。如先前所述,如果閘道或後端服務在某個區域傳回錯誤,但該區域的整體 API 閘道基礎架構可用且有容量,HTTP(S) 負載平衡器不會將流量導向其他區域。
如要在單一轉送規則中合併不同區域,必須採用進階級定價。如要進一步瞭解如何計算價格和用量,請參閱「網路服務級別定價」。
最佳做法
使用多區域服務時,建議使用全球複製的代管資料儲存解決方案 (例如 Cloud Spanner),確保所有資料都能在全球範圍內管理。