GCP免实名账号 GCP谷歌云资源回收站功能
GCP免实名账号 凌晨2:17,你刚敲下gcloud compute instances delete prod-db-01 --zone=us-central1-a,回车键还没松开,手机就震了三下——运维群弹出三条消息:
「DB连接池炸了」
「订单流水停了」
「老板说他刚在App里下单失败…」
你盯着终端里那行绿色的Deleted [https://www.googleapis.com/...],感觉CPU温度比服务器还高。
别急——这不是末日片场,是GCP资源回收站(Resource Graveyard)正式上线后的日常彩排。
一、它不是“回收站”,是“急诊室”
先泼一盆冷水:GCP官方文档里压根没叫它“回收站”。这个名字是我硬塞的,因为太贴切——它不存垃圾,只收“濒危资产”。
想象你家厨房有个带计时器的保鲜盒:切错的牛排、煮糊的粥、腌咸的泡菜,扔进去不是为销毁,而是给你30分钟反悔权。资源回收站就是这个保鲜盒,但盒子里装的是虚拟机、磁盘、子网、防火墙规则——所有能被gcloud或控制台一键删掉的核心资源。
关键点来了:它不自动开启,不默认生效,不替你背锅。就像你得手动给冰箱设温度,得先在项目里启用它,它才开始默默记账。
二、怎么开?三步,比煮泡面还简单
第一步:确认你的GCP项目支持
不是所有项目都能用。必须满足两个条件:
• 项目属于组织层级(非独立账号)
• 启用了Cloud Resource Manager API(99%的新项目默认已开)
检查命令:gcloud services list | grep resourcemanager,看到cloudresourcemanager.googleapis.com亮着绿灯就行。
第二步:激活回收站策略
打开Cloud Console → 进入「IAM & Admin」→ 「Resource Hierarchy」→ 点击你的项目 → 右上角「Edit」→ 找到「Resource Deletion Policy」→ 勾选「Enable resource deletion protection」→ 设置保留时长(7天、14天、30天可选)→ Save。
或者更极客一点,用命令行:gcloud projects update YOUR-PROJECT-ID \
--deletion-protection=true \
--deletion-protection-retention-days=14
注意:这里填的是项目级策略,不是每个资源单独设置。一旦开启,所有后续删除操作都自动进“保鲜盒”。
第三步:验证是否生效
删一个测试VM:gcloud compute instances delete test-panic-01 --zone=us-west1-b
别慌!终端会多一行提示:WARNING: This instance will be moved to the resource graveyard and retained for 14 days.
——对,就是这行字,是你和灾难之间最后的防波堤。
三、它到底能救什么?一张表看懂生死线
| 资源类型 | 能恢复? | 恢复后状态 | 特别提醒 |
|---|---|---|---|
| Compute Engine 实例 | ✅ 是 | 完全还原:配置、标签、服务账户、启动脚本全在 | 但磁盘需单独恢复(见下条) |
| 持久化磁盘(PD) | ✅ 是 | 数据原样,挂载关系丢失(需手动重挂) | 快照类资源不进回收站,删了就是真没了 |
| VPC网络 / 子网 | ✅ 是 | 网络拓扑、IP范围、路由表全恢复 | 但依赖它的实例若已删,得先恢复网络再恢复实例 |
| 防火墙规则 | ✅ 是 | 规则内容、方向、目标标签全部复原 | 恢复后不会自动应用到新实例,老实例重启才生效 |
| Cloud SQL 实例 | ❌ 否 | 不支持 | 官方理由很诚实:“数据库删了就得靠备份” |
| Cloud Storage Bucket | ❌ 否 | 不支持 | 用对象版本控制+生命周期策略才是正解 |
四、怎么救?不是Ctrl+Z,是“开棺验尸”式还原
假设你删了prod-db-01,现在想捞回来:
① 查尸体在哪gcloud alpha resource-graveyard list --project=YOUR-PROJECT-ID
输出里你会看到类似:NAME: projects/YOUR-PROJECT-ID/zones/us-central1-a/instances/prod-db-01
TYPE: compute.googleapis.com/Instance
DELETED_AT: 2024-06-15T02:17:33Z
RETAINS_UNTIL: 2024-07-15T02:17:33Z
② 开棺gcloud alpha resource-graveyard restore \
--name="projects/YOUR-PROJECT-ID/zones/us-central1-a/instances/prod-db-01" \
--project=YOUR-PROJECT-ID
几秒后,终端返回:Restored [https://www.googleapis.com/compute/v1/projects/...],此时去Console刷新,实例已复活,状态为PROVISIONING——它正在穿衣服(分配IP、加载镜像、跑启动脚本)。
③ 验尸
别急着连SSH!先查:
• 磁盘是否还在?gcloud compute disks list --filter="instance=prod-db-01"
• 外网IP是否复用?很可能变了,更新DNS或负载均衡配置
• 启动脚本里的curl命令是否还在调用已删的Secret?——回收站不救逻辑错误,只救物理删除。
五、那些它救不了的,你得自己扛
• 删了整个项目?回收站失效。这是GCP的终极核按钮,按下去连灰都不剩。
• 用--quiet --force强删?跳过回收站直送火葬场。建议把这两个flag写进团队禁用词典。
• 删完又删了回收站策略?已进盒的资源照常保留,但新删的不再进盒——就像关掉冰箱电源,但盒里东西还能冷三天。
• 恢复后性能异常?别怪回收站。它只负责“复制粘贴”,不负责“体检”。VM可能因磁盘IO队列积压卡顿,该扩容还是得扩容。
六、最后,给手抖星人的生存包
• 日常防护:所有生产环境项目,强制开启30天保留策略;开发项目设7天,够你睡醒再补救。
• 删除前仪式感:写个alias:alias gcldel='echo "⚠️ 你确定要删?输入YES继续"; read CONFIRM; if [ "$CONFIRM" = "YES" ]; then gcloud compute instances delete "$1"; fi'
• 审计留痕:配合Cloud Audit Logs,设置告警:当resourceGraveyard.restore事件出现,立刻钉钉@你——说明有人刚从鬼门关拉回一台VM,值得庆贺一杯咖啡。
• 终极哲学:回收站不是保险柜,是缓冲垫。真正的高可用,永远建立在“删之前想三秒,删之后有备份,备份之后再删一次备份”的肌肉记忆上。
所以下次再手抖,别急着拔网线、关监控、假装没登录。打开Terminal,敲:gcloud alpha resource-graveyard list
然后深呼吸——你的VM,正在盒子里安静地等你喊它起床。

