排解 Cloud Endpoints 設定部署問題

本頁面說明如何疑難排解您在部署 Cloud Endpoints 設定時可能會遇到的一些錯誤。您看到的錯誤訊息包含專案的專屬資訊。例如,您可能會看到包含專案 ID 的錯誤訊息。在這個頁面上,您會看到諸如 YOUR_PROJECT_ID 的預留位置值。

完成每個步驟後,請再次執行 gcloud endpoints services deploy 指令,確認是否已解決問題。

無法轉換為服務設定

ERROR: unknown location: http: In path template '[PATH]': unexpected end of input '/'.'

當您的 OpenAPI 文件中的一或多個路徑結尾包含斜線 (/) 字元時,就會顯示此錯誤。如要解決此問題,請移除所有路徑中結尾的斜線。例如,OpenAPI 文件中的以下程式碼片段就會導致此錯誤:

paths:
  "/echo/":
    post:
      description: "Echo back a given message."

如要解決這個問題,請從 /echo/ 中移除結尾的斜線:

paths:
  "/echo":
    post:
      description: "Echo back a given message."

存取專案設定遭拒

ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Not allowed to get project settings for project YOUR_PROJECT_ID

  1. 請再次使用 gcloud CLI 進行驗證,確認您已使用具備存取錯誤訊息中顯示的專案權限的帳戶進行驗證:
    gcloud auth login

    系統將開啟新的瀏覽器分頁,並提示您選擇一個帳戶。

  2. 確認錯誤訊息中顯示的專案 ID 對應於您打算部署 Endpoints 設定的 Google Cloud 專案:
    gcloud projects list
  3. 確認 gcloud CLI 的專案 ID 已設為目前的專案,而且正確無誤:
    gcloud config set project YOUR_PROJECT_ID

呼叫端沒有權限

ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Caller does not have permission 'servicemanagement.services.create' on project YOUR_PROJECT_ID

第一次部署 Endpoints 設定時,Service Management 會為您的 API 建立代管服務。如要建立代管服務,您必須至少在專案層級擁有編輯者角色。在 Service Management 建立代管服務之後,重新部署 Endpoints 設定的最低必要權限是擁有服務的服務設定編輯者角色 (roles/servicemanagement.configEditor)。詳情請參閱「授予 API 的存取權」。

無法驗證網域名稱的擁有權

ERROR: (gcloud.endpoints.services.deploy) PERMISSION_DENIED:
Ownership for domain name YOUR_DOMAIN_NAME on project YOUR_PROJECT_ID cannot be verified

  • 如果您已在 OpenAPI 文件的 host 欄位中設定自訂網域 (例如 example.com),則必須先驗證網域名稱,才能部署 OpenAPI 文件。
  • 如果您使用 cloud.goog 網域,請確認 host 欄位的值採用下列格式,且專案 ID 正確無誤:
    API_NAME.endpoints.YOUR_PROJECT_ID.cloud.goog
  • 如果您使用 appspot.com 網域 (僅支援 App Engine),請確認 host 欄位的格式正確無誤,且專案 ID 正確無誤:
    YOUR_PROJECT_ID.appspot.com

排解其他錯誤

如果您收到未列於此處的錯誤,或是上述資訊無法解決問題,請再次執行 gcloud 指令,並加上用於顯示偵錯資訊的標記:

gcloud --verbosity=debug endpoints services deploy openapi.yaml

後續步驟