迁移Google Cloud Container Registry至Artifact Registry遇RESOURCE_EXHAUSTED错误求助
问题根源
执行gcloud artifacts docker upgrade migrate批量迁移多项目时,命令会调用Cloud Asset API的analyzeIamPolicy接口校验IAM权限。短时间内高频请求该接口会触发API的速率限制,导致返回429错误,这类细分的速率配额可能不会在常规项目/组织配额页面中显示。
解决方案
逐个项目迁移并添加间隔
放弃批量指定多个项目,改为逐个执行迁移命令,每完成一个项目后等待5-10分钟再处理下一个,避免短时间内API请求过载:gcloud artifacts docker upgrade migrate --projects=单个项目ID检查Cloud Asset API的细分配额
进入Cloud Console的API库,找到「Cloud Asset API」,查看其配额详情,重点关注analyzeIamPolicy接口的分钟级/小时级请求速率限制。部分速率配额不会在全局配额页面展示,需到对应API的配额页查看。申请Cloud Asset API配额提升
如果确认是配额不足,在Cloud Console的配额页面找到Cloud Asset API对应的analyzeIamPolicy配额项,提交配额提升申请,说明用于Container Registry到Artifact Registry的迁移场景,请求更高的请求速率。用脚本控制迁移速率
编写shell脚本遍历项目列表,自动执行迁移并添加固定间隔,避免手动操作的疏漏:# 替换为你的项目列表 PROJECT_LIST=("project-1" "project-2" "project-3") for PROJECT_ID in "${PROJECT_LIST[@]}"; do echo "开始迁移项目: $PROJECT_ID" gcloud artifacts docker upgrade migrate --projects=$PROJECT_ID # 等待5分钟(300秒),可根据实际情况调整 sleep 300 done验证IAM权限完整性
确保执行迁移命令的账号拥有cloudasset.analyzeIamPolicy权限,虽然首个项目迁移成功,但后续项目可能存在权限配置差异,可通过以下命令检查:gcloud projects get-iam-policy 目标项目ID --filter="bindings.permissions:cloudasset.analyzeIamPolicy"
内容的提问来源于stack exchange,提问作者xaphod

