我如何将 AWS 账单削减至 $0,同时确保 46GB 备份(只用 1 条命令) 🚀
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 账单。
你是如何处理基础设施退役的?在评论中分享你的做法吧!