测试环境开了忘关?云上临时资源生命周期管理实战
本内容发表于:2026-05-29 11:07:56
浏览量
1012

测试环境开了忘关?云上临时资源生命周期管理实战

微信图片_2026-05-29_110652_073.png

去年一个客户,月底看账单发现测试环境费用比上个月涨了一倍。一查,有个开发三个月前开了几台高配GPU实例跑模型训练,跑完忘了关。三台g4dn.xlarge,每月近2000美金,跑了三个月没人发现。

开发也很委屈:“我记得关了的。”

这不是个例。我见过太多公司,测试环境、开发环境、临时分支环境,开了忘关,月底账单吓一跳。

测试环境不是生产环境,不需要7x24小时跑。但怎么让它们在不用的时间自动关,才是问题。

今天聊聊云上临时资源生命周期管理。不是那种“要记得关”的废话,而是帮你理清楚:怎么让资源用完自动销毁,不用靠人记。

01 为什么人工标记不管用

很多公司的做法:开资源时打个Tag“过期时间:2025-06-01”,到了时间人工检查关不关。

问题:

  • 人记不住。三个月前开的机器,谁还记得去查?

  • 人懒得查。每次查一遍所有资源,费时费力。

  • 人不敢关。怕关错了影响别人,宁可不关。

那家客户的GPU实例打了Tag“ml-training”,但没写过期时间。后来那个开发离职了,没人知道这机器是干嘛的。不敢关,一直开着。

人工管理一定会漏。要自动化。

02 资源分类:永久 vs 临时

不是所有资源都需要自动销毁。先分类。

永久资源:生产环境、长期运行的数据库、共享服务。不自动关。

准永久资源:预发环境、长期测试环境。非工作时间可关。

临时资源:开发个人环境、分支环境、CI/CD跑出来的实例、实验性资源。用完即焚。

那家客户的GPU实例属于临时资源,应该用完即焚。但没人定义它是什么类型,所以没人管。

03 生命周期管理四步法

第一步:创建时打标签

创建资源时,必须打标签:

  • owner: 谁开的

  • purpose: 干什么用

  • ttl: 存活时长(小时/天)

  • auto-off: 是否允许自动关

自动化创建(如Terraform)可以强制要求这些标签。

第二步:空闲检测

不是所有资源都有明确的ttl。有的资源开了,但没人记得设ttl。需要空闲检测。

检测方法:

  • 最后访问时间:过去7天有没有流量?

  • CPU利用率:过去7天平均CPU<5%?

  • 网络流量:过去7天网络收发几乎为0?

符合条件的,标记为“空闲待回收”。

第三步:预警通知

空闲资源不是直接删。先发通知:

  • 第1天:发邮件/slack给owner,“你的资源空闲7天了,3天后将自动关闭”

  • 第3天:再次提醒,“明天将自动关闭”

  • 第4天:自动关闭,发通知“已关闭”

第四步:自动销毁

关闭不是删。先停止实例(保留磁盘)。观察一段时间没问题,再删除。

  • 关闭后7天:如果无人重启,自动删除

  • 删除后30天:快照保留在冷存储(防止误删)

那家客户后来实现了自动化:Terraform创建时强制打ttl标签;每天扫描超过ttl的资源,自动关机;关机7天后自动删除。三个月后,测试环境成本降了60%。运维负责人说:“以前月底看账单像开盲盒,现在知道下个月大概多少钱。”

04 工具怎么实现

AWS方案

  • 用Tag标记expirationauto-off

  • Config + Lambda:定期扫描不符合策略的资源

  • Systems Manager Automation:执行关机、销毁操作

K8s环境

  • 用Namespace隔离临时环境

  • 设置ResourceQuota限制资源

  • 用CronJob定期扫描Namespace,超过存活时间自动删除

通用脚本

  • 用云SDK列出所有资源

  • 按Tag过滤(owner、ttl、创建时间)

  • 超过存活时间 → 调API关机 → 记录日志

05 文化配套:谁开谁关

光有技术不够。要有制度。

  • 谁创建,谁负责销毁。创建人必须填owner标签。

  • 成本归属。每月出报表,各团队/各人开了多少资源,没关的标注出来。

  • 定期复盘。月底看哪些资源长期闲置没关,改流程或加自动化。

那家客户后来把“测试环境成本”纳入各团队的OKR。每个团队月初有预算,超了要说明。开发开资源时会更小心,开完也会记得关。

写在最后

测试环境开了忘关,不是人懒,是流程没跟上。

那家客户的运维负责人后来总结:“以前靠自觉,月底账单教做人。现在靠自动,开了自动关,忘了也不怕。”

你的测试环境,是靠人记,还是靠自动?