本頁面說明如何疑難排解您在部署 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
- 請再次使用 gcloud CLI 進行驗證,確認您已使用具備存取錯誤訊息中顯示的專案權限的帳戶進行驗證:
gcloud auth login
系統將開啟新的瀏覽器分頁,並提示您選擇一個帳戶。
- 確認錯誤訊息中顯示的專案 ID 對應於您打算部署 Endpoints 設定的 Google Cloud 專案:
gcloud projects list
- 確認 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