本页面介绍如何排查您在部署 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
中的映射选项会指定 Request
消息定义中不存在的名为 undefined
的字段。
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 创建托管式服务。如需创建托管式服务,您必须至少拥有项目级层的 Editor 角色。在 Service Management 创建托管式服务后,您必须至少具备该服务的 Service Config Editor 角色 (roles/servicemanagement.configEditor) 才能重新部署 Endpoints 配置。如需了解详情,请参阅授予对 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