将Google Cloud项目完整进行跨组织迁移,结果1天就搞定这件事
甚至特意写好了逐个迁移GCS的脚本,才发现其实可以直接按项目整体迁移,来自开发者的含泪记录

将Google Cloud项目完整进行跨组织迁移,结果1天就搞定这件事
你好,我是 Terisuke。
今天来聊聊我浪费了大把时间的一段经历。
因为公司要整理云环境,需要把原本在 [email protected] 管理的项目迁移到 [email protected] 的组织中。
一开始我还信心满满地想着:“好,那就用 terraform 和 gcloud 一点一点把 GCS bucket 和 Compute 实例迁过去吧!”
然而,我后来才知道,如果同样是 Google Cloud,其实有办法把整个项目完整搬移过去。
结果就是,我辛辛苦苦写好的 GCS 迁移脚本彻底打了水漂(哭)。
不过,为了不重蹈覆辙,我也顺便把这个方法整理下来作为备忘。
前提条件
这部分非常关键。首先,必须满足以下条件:
- 在两个组织中都拥有所有者(Owner)权限
- 要迁移的项目没有使用 VPC Service Controls 或 Shared VPC
- 未使用 Marketplace 的付费服务(否则需要重新购买)
实际操作的迁移步骤
1. 确认组织 ID
首先确认源组织和目标组织的组织 ID。这在后面的配置中至关重要。
# 移行元組織にログイン
gcloud config set account [email protected]
gcloud organizations list
# DISPLAY_NAME ID DIRECTORY_CUSTOMER_ID
# example-a.com 123456789012 C02xxxxxx
# 移行先組織にログイン
gcloud config set account [email protected]
gcloud organizations list
# DISPLAY_NAME ID DIRECTORY_CUSTOMER_ID
# example-b.com 987654321098 C02yyyyyy
2. 事前确认
在迁移前最好确认以下几项。要是报错之后才发现,那可就太麻烦了。
# VPC Service Controlsの確認(エラーが出ればOK)
gcloud access-context-manager perimeters list
# Shared VPCの確認({}が返ればOK)
gcloud compute shared-vpc get-host-project your-project-id
# 現在の請求アカウントをメモ
gcloud beta billing projects describe your-project-id
3. 配置迁移通道(Migration Corridor)
这是最关键的一步。为了能在组织间移动项目,需要开通“迁移通道”。简单来说,就是让两个组织建立互信关系的配置。
在源组织中,配置允许导出。
# export-policy.yamlを作成
cat > export-policy.yaml << EOF
name: organizations/123456789012/policies/resourcemanager.allowedExportDestinations
spec:
rules:
- values:
allowedValues:
- under:organizations/987654321098
EOF
# ポリシーを適用
gcloud org-policies set-policy export-policy.yaml
在目标组织中,配置允许导入。
# 移行先組織にログイン
gcloud config set account [email protected]
# import-policy.yamlを作成
cat > import-policy.yaml << EOF
name: organizations/987654321098/policies/resourcemanager.allowedImportSources
spec:
rules:
- values:
allowedValues:
- under:organizations/123456789012
EOF
# ポリシーを適用
gcloud org-policies set-policy import-policy.yaml
4. 授予权限
我在这里踩了坑。即便拥有组织所有者权限,也仍然需要项目级别的权限。我是在报错之后才注意到的,需要以下权限:
# 移行元アカウントに戻る
gcloud config set account [email protected]
# プロジェクトと組織に権限を付与
gcloud projects add-iam-policy-binding your-project-id \
--member="user:[email protected]" \
--role="roles/resourcemanager.projectMover"
gcloud organizations add-iam-policy-binding 123456789012 \
--member="user:[email protected]" \
--role="roles/resourcemanager.projectMover"
# 移行先組織にも権限を付与(組織をまたいだ権限付与)
gcloud config set account [email protected]
gcloud organizations add-iam-policy-binding 987654321098 \
--member="user:[email protected]" \
--role="roles/resourcemanager.projectCreator"
5. 正式迁移
准备就绪后,只需一条命令即可完成迁移。
# 移行元アカウントで実行
gcloud config set account [email protected]
gcloud beta projects move your-project-id --organization 987654321098
虽然会弹出警告,但输入 Y 继续即可。迁移还不到 1 分钟就完成了。速度快得让人猝不及防。
6. 更改结算账号
虽然项目已经移动过去了,但结算账号并没有改变。如果忘了这一步,账单就会一直寄给旧组织,麻烦可就大了。
# 移行先アカウントに切り替え
gcloud config set account [email protected]
# 新しい請求先に紐付け
gcloud beta billing accounts list
gcloud beta billing projects link your-project-id --billing-account NEW-BILLING-ID
这里也报了权限错误,因此需要给目标账号授予项目所有者权限。
# 移行元アカウントで実行
gcloud config set account [email protected]
gcloud projects add-iam-policy-binding your-project-id \
--member="user:[email protected]" \
--role="roles/owner"
7. 清理工作
堵上为了迁移而开辟的“安全漏洞”。这一步极其重要,要是忘了,两个组织之间就会一直处于可以随意移动项目的状态。
# 組織ポリシーを削除
gcloud config set account [email protected]
gcloud org-policies delete resourcemanager.allowedExportDestinations --organization=123456789012
gcloud config set account [email protected]
gcloud org-policies delete resourcemanager.allowedImportSources --organization=987654321098
# 組織間の権限も削除
gcloud organizations remove-iam-policy-binding 987654321098 \
--member="user:[email protected]" \
--role="roles/resourcemanager.projectCreator"
迁移后的注意事项
- 继承的 IAM 策略将会丢失。在组织级别授予的权限需要重新配置
- 预算提醒也需要重新设置。新的结算账号不会继承原有的预算设置
- 服务运行确认必不可少。特别是与外部联动的服务,务必要仔细检查
结尾反转:彻底白费的 GCS 迁移脚本
实际上在刚开始动手迁移时,我还专门写了一个通过本地中转来迁移 GCS bucket 的脚本。
我甚至还实现了并行下载、进度显示和错误处理,当时还斗志昂扬地想着:“这下大量 bucket 也能轻松迁移了!”
然而,在得知可以直接整个项目搬移的那一瞬间,这一切全都白费了。
不过嘛,这也算学到了 gsutil 的并行处理以及用 Python 操作 GCS 的知识,而且在无法跨组织移动的情况下也能派上用场,我只能这样安慰自己:这也不算完全白费吧。
总结
只要拥有合适的权限并完成相应配置,Google Cloud 的项目迁移出乎意料地简单。不过,千万别忘了清理安全配置。
如果有其他人要做类似的迁移工作,建议一开始就去查查 gcloud beta projects move 的相关资料。重新发明轮子虽然有趣,但时间是有限的。
话虽如此,真想把写那个 GCS 迁移脚本耗费的 3 天时间拿回来啊。
感谢阅读。
如果你也有过类似的经历,或者正准备进行迁移工作,欢迎在评论区告诉我。咱们一起抱头痛哭吧哈哈。
想在贵公司推进本文的内容?
AI 受托开发的咨询,由 AI 接待「Cloudia」受理。
详细了解AI 基础设施与受托开发Support this article
If this article was helpful, please support us with a tip. You can choose any amount.
相关文章
从Git历史中能看到什么、看不到什么。用Grift核算了4个OSS
本文分开写:按明示的规则,从git历史中能数出什么,数不出什么。对4个真实OSS按仓库做了核算。这不保证人的能力,也不保证记录是完整的。
如何在实现中坚守“不评分、不排名”。Grift CLI在下一版本中确定的5项条件
Grift CLI承诺不给出分数或排名。在2026年10月的核对中发现,虽然在注释中写明了并非排名,但表格仍是按提交次数从多到少排列的。面向发包方、SES销售以及工程师,我们将以通俗易懂的方式阐述对0.8版本设定的5项验收条件。
AI开发与定制开发的估算陷入个人经验化的原因——将估算依据转化为公司资产的方法
本文将解析定制开发的估算因人而异的原因,并讲解如何利用GitHub实际业绩、市场行情和工时明细,打造具有充分说服力的估算依据。同时介绍Grift的应用思路。
