排解 Cloud Endpoints 設定部署問題

本頁面說明如何疑難排解您在部署 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

  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

  • 如果您在 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

後續步驟