我如何将 AWS 账单削减至 $0,同时确保 46GB 备份(只用 1 条命令) 🚀

发布: (2026年5月11日 GMT+8 13:11)
4 分钟阅读
原文: Dev.to

Source: Dev.to

介绍

管理云基础设施常常像在实用性和成本之间进行平衡。当我需要关闭整个 AWS 账户并保留 46 GB 的备份时,若仅通过 AWS 控制台手动操作会留下隐藏资源和持续费用。本文展示了我如何将发现、备份和清理步骤自动化为单条命令的工作流。

资源映射

在备份之前,我必须准确了解当前运行的内容。仅在 EC2 仪表盘上快速浏览是不够的,于是我使用脚本遍历账户并绘制每个依赖关系。

检查 Lambda 环境变量

Lambda 的环境变量常常包含隐藏的 RDS 连接字符串、MongoDB URI 或 API 密钥,这些在各服务的仪表盘中不可见。通过提取这些变量,我确保识别到所有数据源,而不仅仅是代码本身。

备份命令

有了资源映射后,终端接管工作。以下是我针对每项服务使用的核心命令。

S3 存储桶

aws s3 sync s3://my-bucket-name ./backup/s3/my-bucket-name

aws s3 sync 只复制新建或已更改的文件,适合大容量存储桶的高效备份。

Lambda 函数

# Get the function details
aws lambda get-function --function-name MyFunction

注意: 在 JSON 响应中查找 Code.Location URL——这就是可用于下载 ZIP 文件的临时签名链接。

关系型数据库

pg_dump -h [endpoint] -U [user] -d [dbname] -f backup.sql

我跳过快照,直接使用 pg_dump(PostgreSQL)或 mysqldump(MySQL)导出原始 .sql 文件。

NoSQL(DynamoDB)

aws dynamodb scan --table-name MyTable --output json > MyTable.json

完整的表扫描会将整个数据集导出为可移植的 JSON 格式。

清理:消除沉默的费用杀手

在本地验证了 46 GB 备份后,我运行清理脚本终止仍会产生费用的资源。

# EC2 instances
aws ec2 terminate-instances --instance-ids i-12345...

# Load balancers
aws elbv2 delete-load-balancer --load-balancer-arn ...

# Elastic IPs (often overlooked)
aws ec2 release-address --allocation-id eipalloc-...

# RDS instances (skip final snapshot to avoid storage costs)
aws rclone delete-db-instance --db-instance-identifier my-db --skip-final-snapshot

冗余:将备份存储在 AWS 之外

备份只有在至少存放在两个地点时才算完整。我使用 rclone 将整个本地 backup/ 文件夹同步到 Google Drive,实现了 AWS 生态系统之外的地理冗余。

rclone sync ./backup/ remote:backup-folder

结论

通过自动化发现、提取和清理阶段,我消除了人为错误,确保“关灯”后不再有昂贵的灯泡燃烧。最终得到的是有文档记录的多地点备份以及 $0 的 AWS 账单。

你是如何处理基础设施退役的?在评论中分享你的做法吧!

0 浏览
Back to Blog

相关文章

阅读更多 »