使用Go调用GCP resourcemanager API列组织文件夹时返回404错误如何解决
问题根因
你遇到的报错和.proto文件没有任何关系,GCP官方的Go客户端已经预编译了所有需要的协议定义,无需自行编写引入。404错误是请求参数或者权限配置不对导致的。
排查解决步骤
- 修正Parent参数格式
ListFoldersRequest的Parent字段不能填组织的显示名称,必须填写组织的数字ID,格式为organizations/[数字ID],你可以登录GCP控制台,进入「IAM与 admin」-「组织设置」页面查看你的组织数字ID。 - 启用Cloud Resource Manager API
你用来认证的GCP项目必须先启用Resource Manager API才能调用,执行以下gcloud命令即可启用:gcloud services enable cloudresourcemanager.googleapis.com - 检查账号权限
你当前使用的GCP认证身份(用户账号或者服务账号)必须持有目标组织的resourcemanager.folders.list权限,最简单的配置是给该账号分配组织层级的「Folder Viewer」角色。
代码优化建议
你现有代码的循环逻辑存在问题,遇到错误之后也会累加尝试次数,可能还没拿到正常结果就提前退出,可以调整为:
for { resp, err := it.Next() if err == iterator.Done { break } if err != nil { log.Println(err) tries++ if tries >=3 { log.Fatalln("超过最大尝试次数,退出") } continue } log.Println(resp) }
内容的提问来源于stack exchange,提问作者Emre Chomko
相关产品推荐
相关产品推荐

