如何清理AWS账户中由离职开发人员通过本地Terraform创建且无状态文件的遗留基础设施?
如何清理AWS账户中由离职开发人员通过本地Terraform创建且无状态文件的遗留基础设施?
这种情况确实挺闹心的,我之前团队也遇到过类似的糟心事,给你分享几个实用的办法,不用手动一个个删到崩溃:
先梳理全量资源,定位目标资源
首先得搞清楚这个开发到底创建了哪些资源,推荐用AWS的命令行工具快速排查:- 跑
aws resourcegroupstaggingapi get-resources,这个命令能列出大部分带标签的AWS资源,如果离职开发给资源加过特定标签(比如自己的名字、专属项目前缀),可以加--tag-filters Key=Creator,Values=xxx来精准过滤。 - 如果没标签,就按创建时间筛选:比如在AWS控制台的「资源组」页面,选择对应的资源类型,设置创建时间范围(匹配该开发在职的时间段),导出资源清单;或者用CLI按类型查询,比如查EC2实例:
aws ec2 describe-instances --filters Name=launch-time,Values=2024-01-01T00:00:00Z,2024-06-01T23:59:59Z。
- 跑
用Terraform导入补状态,批量销毁
这是最稳妥的方法,相当于把现有资源“纳入”Terraform管理后再清理:- 本地新建一个临时的Terraform配置目录,先定义你要清理的资源类型,比如要删EC2实例,就写个简单的配置块:
resource "aws_instance" "leftover" { # 这里不用填参数,导入后Terraform会自动匹配 } - 然后用
terraform import aws_instance.leftover i-xxxxxx(把i-xxxxxx换成实际的实例ID)把资源导入状态文件。 - 重复导入所有目标资源后,直接跑
terraform destroy就能批量删除,还能自动处理资源依赖,比手动删省心太多。注意导入前要确认配置和实际资源匹配,别误导入其他团队的资源。
- 本地新建一个临时的Terraform配置目录,先定义你要清理的资源类型,比如要删EC2实例,就写个简单的配置块:
用AWS CLI批量删除同类型资源
如果资源类型单一、有规律(比如都是某个前缀的S3桶,或者都是测试用的EC2),可以用CLI批量操作:- 比如删除所有状态为
available的闲置EBS卷:aws ec2 describe-volumes --filters Name=status,Values=available --query 'Volumes[*].VolumeId' --output text | xargs aws ec2 delete-volume --volume-id - 再比如删除前缀为
dev-test-的S3桶:for bucket in $(aws s3 ls | grep "dev-test-" | awk '{print $3}'); do aws s3 rb s3://$bucket --force; done - 操作前记得加
--dry-run参数测试,比如aws ec2 delete-volume --volume-id vol-xxxxxx --dry-run,确认不会误删重要资源。
- 比如删除所有状态为
关键注意事项
- 优先处理付费资源:比如EC2、RDS、Elasticache这些会持续产生账单的资源,先停服或者删除,避免额外开销。
- 备份为先:操作前用AWS Backup给关键资源做快照,或者导出资源清单留底,万一误删能快速恢复。
- 处理依赖关系:有些资源有层级依赖,比如要先删EC2实例,才能删对应的安全组、弹性IP,不然会报错删不掉。
备注:内容来源于stack exchange,提问作者T.UK
相关产品推荐
相关产品推荐

