本頁面說明如何將您 API 的後端程式碼和可擴充服務 Proxy (ESP) 部署至 Google Kubernetes Engine 及 Compute Engine。
雖然部署步驟會因您 API 的託管平台而有所不同,但一定會有個步驟為 ESP 提供服務名稱,也會有個選項將 ESP 設定為使用最新部署的 Endpoints 服務設定。有了這項資訊,ESP 就可以取得您 API 的 Endpoints 設定,進而讓 ESP 代理要求和回應,以便 Cloud Endpoints 管理您的 API。
必備條件
本頁假設您已經:
準備進行部署
Compute Engine
如要讓 Endpoints 管理您的 API,您必須為您的 API 安裝並設定 ESP 及後端伺服器程式碼。此外,您也必須在您的 Compute Engine VM 執行個體上安裝 Docker,才能執行 Container Registry 中免費提供的 ESP Docker 映像檔。
部署之前的準備:
在您將 API 和 ESP 部署到 Compute Engine 之前,請先完成以下步驟:
- 建立、設定和啟動您的 VM 執行個體。
- 在您的 VM 執行個體上安裝 Docker Enterprise Edition (EE) 或 Docker Community Edition (CE)。
- 為您的後端伺服器程式碼建立 Docker 容器。
- 將容器推送至 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 映像檔。您必須先完成以下步驟才能將 API 和 ESP 部署至 GKE:
- 將您的容器化應用程式部署至容器叢集。GKE 說明文件中所述的一般步驟包括: - 將您的應用程式封裝至 Docker 映像檔中。
- 將這個映像檔上傳至登錄檔。
- 建立容器叢集。
- 將您的應用程式部署至叢集。
- 將您的應用程式公開發佈到網際網路。
 
- 確定您可以成功: - 啟動 API 的伺服器。
- 傳送要求至您的 API。
 
部署您的 API 和 ESP
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- 使用您的容器名稱取代 YOUR_API_CONTAINER_NAME。
- 將Google Cloud 專案 ID 替換為您在推送映像檔時使用的Google Cloud 。YOUR_PROJECT_ID
- 使用您的映像檔名稱取代 YOUR_IMAGE。
 
- 使用您的容器名稱取代 
- 取得 API 的服務名稱。這是您在服務設定 YAML 檔案的 - name欄位中指定的名稱。
- 執行 ESP Docker 映像檔的執行個體: - sudo docker run \ --detach \ --name=esp \ --publish=80:9000 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --http2_port=9000 \ --backend=grpc://YOUR_API_CONTAINER_NAME:8000- 使用您的服務名稱取代 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選項。
- 如要重新啟動 ESP,請執行 - docker run指令。
如需啟動 ESP 時可指定的完整選項清單,請參閱 ESP 啟動選項一文。
GKE
如何將 ESP 部署至 GKE:
- 取得您 API 的服務名稱。 
- 開啟您的部署資訊清單檔案 (稱為 - deployment.yaml),並在- containers區段中新增下列內容:- containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http2_port=9000", "--service=SERVICE_NAME", "--rollout_strategy=managed", "--backend=grpc://127.0.0.1:8000" ] ports: - containerPort: 9000- 使用您的 API 服務名稱取代 - SERVICE_NAME。
- 使用 - 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。如果您未取得成功的回應,請參閱排解回應錯誤
傳送一些要求後,您可以:
- 如要查看 API 活動圖表,請前往「Endpoints」 >「Services」。要求可能需要一些時間才能反映在圖表中。 
- 在 Cloud Logging 頁面中查看您的 API 要求記錄。