本頁面說明如何疑難排解您在部署 Cloud Endpoints 設定時可能會遇到的一些錯誤。您看到的錯誤訊息包含專案的專屬資訊。例如,您可能會看到包含專案 ID 的錯誤訊息。在這個頁面上,您會看到諸如 YOUR_PROJECT_ID 的預留位置值。
完成每個步驟後,請再次執行 gcloud endpoints services deploy
指令,確認是否已解決問題。
無法轉換為服務設定
ERROR: (gcloud.endpoints.services.deploy) INVALID_ARGUMENT:
Cannot convert to service config. http: undefined field <unknown>
on message <RequestType>
請檢查 .proto
檔案,確認通訊協定緩衝區訊息和
轉碼對應之間是否有不相符的欄位。
例如,.proto
檔案若出現以下情形,就會發生這種錯誤。Unary
的對應選項指定名稱為 undefined
的欄位,但 Request
訊息定義並沒有該欄位。
rpc Unary(Request) Response { option (google.api.http) { get : "/{undefined}" }; } message Request { string defined = 1; }
存取專案設定遭拒
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
- 如果您在
api_config.yaml
檔案的name
欄位中設定了自訂網域 (例如example.com
),則必須先驗證網域名稱才能部署服務設定。 - 如果您使用
cloud.goog
網域,請確認name
欄位的值採用下列格式,且專案 ID 正確無誤:API_NAME.endpoints.YOUR_PROJECT_ID.cloud.goog
排解其他錯誤
如果您收到未列於此處的錯誤,或是上述資訊無法解決問題,請再次執行 gcloud
指令,並加上用於顯示偵錯資訊的標記:
gcloud --verbosity=debug endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml