本頁面說明如何將 API 的後端程式碼和可擴充服務 Proxy (ESP) 部署到 Google Kubernetes Engine、Compute Engine 和 App Engine 彈性環境。
雖然部署步驟會因您 API 的託管平台而有所不同,但一定會有個步驟為 ESP 提供服務名稱,也會有個選項將 ESP 設定為使用最新部署的 Cloud Endpoints 服務設定。有了這項資訊,ESP 就可以取得您 API 的 Endpoints 設定,進而讓 ESP 代理要求和回應,以便 Endpoints 管理您的 API。
必要條件
本頁假設您已經:
準備進行部署
App Engine
只要額外透過簡單的設定步驟 (如下列步驟所述) 就可以部署您的 API,進而將 API 交由 Endpoints 代管,如同將任何應用程式部署到 App Engine 彈性環境。請按照 App Engine 說明文件進行下列操作:
- 整理您的設定檔。
- 建立
app.yaml
設定檔 - 如果您的應用程式是以微服務為基礎,請參閱部署多個服務應用程式說明文件以瞭解針對各項服務設定
app.yaml
檔案的相關資訊。
您可以使用 gcloud app deploy
指令將您的 API 部署到 App Engine。這個指令會使用 Container Builder 服務自動建構容器映像檔,然後將映像檔部署到 App Engine 彈性環境。
部署之前的準備:
- Google Cloud 專案的擁有者必須先建立 App Engine 應用程式。
- 確認您的使用者帳戶擁有必要權限。
Compute Engine
如要讓 Endpoints 管理您的 API,您必須為您的 API 安裝並設定 ESP 以及後端伺服器程式碼。您必須在 Compute Engine VM 執行個體上安裝 Docker,才能執行 Artifact Registry 中免費提供的 ESP Docker 映像檔。
部署之前的準備:
下列內容會從較高的層次概要說明您在 Compute Engine 部署 API 和 ESP 之前必須採取的步驟。一般來說,您需要進行在 Compute Engine 上執行後端伺服器程式碼時通常需要的所有步驟。
- 建立、設定和啟動您的 VM 執行個體。請參閱 Compute Engine 說明文件。
- 在您的 VM 執行個體上安裝 Docker Enterprise Edition (EE) 或 Docker Community Edition (CE)。請參閱安裝 Docker 說明。
- 為您的後端伺服器程式碼建立 Docker 容器。請參閱 Cloud Build 說明文件。
- 將容器推送至 Artifact Registry 或其他登錄檔。
- 確認您能夠完成下列操作:
- 連線至 VM 執行個體。
- 執行 Docker 映像檔以在 VM 執行個體上啟動您的後端伺服器。詳情請參閱 Docker 執行參考資料。
- 傳送要求至您的 API。
GKE
當您在 Google Cloud 主控台中建立叢集時,根據預設,授予叢集服務帳戶的 OAuth 範圍包含 Endpoints 要求的範圍:
- Service Control:已啟用
- Service Management:唯讀
使用 gcloud container clusters create
指令或使用第三方設定檔建立叢集時,請確認已指定下列範圍:
"https://www.googleapis.com/auth/servicecontrol"
"https://www.googleapis.com/auth/service.management.readonly"
詳情請參閱何謂存取權範圍?
部署之前的準備:
只要在您的部署資訊清單檔案中加入一個小區段,就可以在您的容器叢集和容器化應用程式上執行 ESP Docker 映像檔。下列內容會從較高的層次概要說明您在 GKE 部署 API 和 ESP 之前必須採取的步驟。一般來說,您需要進行在 GKE 上執行後端伺服器程式碼時通常需要的所有步驟。
- 將您的容器化應用程式部署至容器叢集。GKE 說明文件中所述的一般步驟包括:
- 將您的應用程式封裝至 Docker 映像檔中。
- 將這個映像檔上傳至登錄檔。
- 建立容器叢集。
- 將您的應用程式部署到叢集。
- 將您的應用程式公開發布到網際網路。
- 確認您能夠完成下列操作:
- 啟動 API 的伺服器。
- 傳送要求至您的 API。
部署您的 API 和 ESP
App Engine
如何將 API 和 ESP 部署至 App Engine:
- 取得您 API 的服務名稱。這是您在 OpenAPI 文件的
host
欄位中指定的名稱。 - 編輯
app.yaml
,並新增名為endpoints_api_service
的區段,其中包含了服務名稱。您可以從教學課程使用app.yaml
檔案中來做為模型:Java Python Go PHP Ruby NodeJS 將您的 API 服務名稱替換為
ENDPOINTS-SERVICE-NAME
。 例如:endpoints_api_service: name: example-project-12345.appspot.com rollout_strategy: managed
rollout_strategy: managed
選項可將 ESP 設為使用最新部署的服務設定。指定此選項時,在您部署新服務設定後 5 分鐘內,ESP 會偵測到變更並自動開始使用新設定。建議您指定此選項而非讓 ESP 使用特定的設定 ID。如果您的應用程式以微服務為基礎,則必須在每個
app.yaml
檔案中加入endpoints_api_service
區段。 - 儲存
app.yaml
檔案 (或多個檔案)。 - 將後端程式碼和 ESP 部署到 App Engine:
gcloud app deploy
因為您已將 endpoints_api_service
區段加入 app.yaml
檔案,因此 gcloud app deploy
指令會設定獨立容器中的 ESP,並部署至您的 App Engine 彈性環境。所有的要求流量都會透過 ESP 轉送,且 ESP 代理往返 (執行後端伺服器程式碼的) 容器的要求與回應。
如果您必須將 ESP 設定為使用特定的設定 ID:
- 在您
app.yaml
檔案的endpoints_api_service
區段中新增config_id
欄位,並將這個欄位設為特定的設定 ID。 - 移除
rollout_strategy: managed
或將rollout_strategy
設定為fixed
。fixed
選項會將 ESP 設定為使用您在config_id
中指定的服務設定。 - 重新部署 API 和 ESP:
gcloud app deploy
建議您不要長時間將 ESP 設定為使用特定的設定 ID,否則在您部署更新的服務設定後,必須重新啟動 ESP 才能使用新的設定。
如何移除特定的設定 ID:
- 從
app.yaml
檔案中移除config_id
選項。 - 新增
rollout_strategy: managed
選項。 - 發出
gcloud app deploy
指令
使用 rollout_strategy: managed
選項時,請勿在 app.yaml
檔案中加入 config_id: YOUR_SERVICE_CONFIG_ID
。如果那樣做,gcloud app deploy
就會失敗並顯示下列錯誤:
config_id is forbidden when rollout_strategy is set to "managed".
當您第一次將 API 部署到 App Engine 彈性環境時,可能會因為系統設定虛擬機器 (VM) 和其他基礎架構而發生延遲。詳情請參閱 App Engine 說明文件中的確保成功部署。
Compute Engine
如何利用 Docker 將您的 API 和 ESP 部署到 Compute Engine:
- 連線到您的 VM 執行個體。將您的 VM 執行個體名稱替換為
INSTANCE_NAME
。gcloud compute ssh INSTANCE_NAME
- 建立自己的容器網路,名稱為
esp_net
:sudo docker network create --driver bridge esp_net
- 執行後端伺服器程式碼的映像檔執行個體,並連線到
esp_net
容器網路:sudo docker run \ --detach \ --name=YOUR_API_CONTAINER_NAME \ --net=esp_net \ gcr.io/YOUR_PROJECT_ID/YOUR_IMAGE:1.0
- 將您的容器名稱替換為
YOUR_API_CONTAINER_NAME
。 - 將
YOUR_PROJECT_ID
替換為您在推送映像檔時使用的 Google Cloud 專案 ID。 - 將您的映像檔名稱替換為
YOUR_IMAGE
。
- 將您的容器名稱替換為
- 取得您 API 的服務名稱。這是您在 OpenAPI 文件的
host
欄位中指定的名稱。 - 執行 ESP Docker 映像檔的執行個體:
sudo docker run \ --name=esp \ --detach \ --publish=80:8080 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=YOUR_API_CONTAINER_NAME:8080
- 將
SERVICE_NAME
改為您的服務名稱。 - 將您的 API 容器名稱替換為
YOUR_API_CONTAINER_NAME
。
--rollout_strategy=managed
選項可將 ESP 設為使用最新部署的服務設定。指定此選項時,在您部署新服務設定後 5 分鐘內,ESP 會偵測到變更並自動開始使用新設定。建議您指定此選項而非讓 ESP 使用特定的設定 ID。 - 將
如果您必須將 ESP 設定為使用特定的設定 ID:
- 加上
--version
選項並設定為特定的設定 ID。 - 移除
--rollout_strategy=managed
選項或將--rollout_strategy
設定為fixed
。fixed
選項會將 ESP 設定為使用您在--version
中指定的服務設定。 - 再次發出
docker run
指令。
如果您同時指定 --rollout_strategy=managed
和 --version
選項,則 ESP 一開始會使用您在 --version
中指定的設定,但隨後會在代管模式下執行並取得最新的設定。
建議您不要長時間將 ESP 設定為使用特定的設定 ID,否則在您部署更新的服務設定後,必須重新啟動 ESP 才能使用新的設定。
如何移除特定的設定 ID:
- 在
docker run
的 ESP 標記中,移除--version
選項。 - 新增
--rollout_strategy=managed
選項。 - 發出
docker run
指令以重新啟動 ESP。
如需啟動 ESP 時可指定的完整選項清單,請參閱 ESP 啟動選項。
GKE
如何將 ESP 部署到 GKE:
- 取得 API 服務名稱,這是您在 OpenAPI 文件
host
欄位中指定的名稱。 - 開啟您的部署資訊清單檔案 (稱為
deployment.yaml
檔案),並將下列內容加入容器區段:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http_port=8081", "--backend=127.0.0.1:8080", "--service=SERVICE_NAME", "--rollout_strategy=managed" ]
使用您的 API 服務名稱取代
SERVICE_NAME
。--rollout_strategy=managed"
選項可將 ESP 設為使用最新部署的服務設定。指定此選項時,在您部署新服務設定後 5 分鐘內,ESP 會偵測到變更並自動開始使用新設定。建議您指定此選項而非讓 ESP 使用特定的設定 ID。 - 使用 kubectl create 指令啟動 Kubernetes 服務:
kubectl create -f deployment.yaml
如果您必須將 ESP 設定為使用特定的設定 ID:
- 在您的部署資訊清單檔案中,新增
--version
選項並將其設定為特定的設定 ID。 - 移除
--rollout_strategy=managed
或將--rollout_strategy
設定為fixed
。fixed
選項將 ESP 設定為使用您在--version
中指定的服務設定。 - 啟動 Kubernetes 服務:
kubectl create -f deployment.yaml
如果您同時指定 --rollout_strategy=managed
和 --version
選項,則 ESP 一開始會使用您在 --version
中指定的設定,但隨後會在代管模式下執行並取得最新的設定。
建議您不要長時間將 ESP 設定為使用特定的設定 ID,否則在您部署更新的服務設定後,必須重新啟動 ESP 才能使用新的設定。
如何移除特定的設定 ID:
- 在您的部署資訊清單檔案中,移除
--version
選項。 - 新增
--rollout_strategy=managed
。 - 啟動 Kubernetes 服務:
kubectl create -f deployment.yaml
如需啟動 ESP 時可指定的完整選項清單,請參閱 ESP 啟動選項。
追蹤 API 活動
部署 ESP 和您的 API 後端後,您可以使用 curl
或 Postman 之類的工具,將要求傳送到您的 API。如果您未取得成功的回應,請參閱排解回應錯誤一文。
傳送一些要求後,您可以:
在「Endpoints」>「Service」(服務) 上查看 API 的活動圖表。
要求可能需要一些時間才能反映在圖表中。在 Cloud Logging 頁面中查看您的 API 要求記錄。
後續步驟
- 排解 App Engine 彈性環境部署的問題。
- 在 Compute Engine 上排解 Endpoints 的問題。
- 在 Google Kubernetes Engine 上排解 Endpoints 的問題。