周三下午三点,我盯着AWS账单页面,做了一个决定:彻底关闭这个账户。但前提是,里面46GB的基础设施数据必须完整带走。

手动操作?那是灾难的开始。EC2控制台点一点,RDS快照留一个,S3桶忘删一个——下个月账单照样来敲门。我的目标很简单:把复杂的多服务环境,压缩成"回车键一下,万事俱备"的终端操作。

打开网易新闻 查看精彩图片

第一步不是备份,是摸底。扫一眼EC2仪表盘远远不够,我用脚本爬遍整个账户,绘制依赖关系图。关键技巧藏在Lambda环境变量里——那些字符串里往往埋着RDS连接地址、MongoDB URI、API密钥,服务仪表盘根本看不到。把这些"暗线"挖出来,才能确定哪些数据源必须抽离。

地图就绪,终端接管。各服务的核心命令拆解如下:

S3全量同步:高吞吐文件检索的黄金标准。aws s3 sync只拷贝新增或变更文件,大桶也能高效处理。

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

Lambda代码下载:流程更曲折。先获取临时签名URL,再用它下载ZIP包。

aws lambda get-function --function-name MyFunction

注意:JSON响应里的Code.Location字段就是下载密钥

关系型数据库:跳过快照,直接导出原始SQL文件,本地恢复更灵活。PostgreSQL用pg_dump,MySQL用mysqldump

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

DynamoDB JSON导出:全表扫描转存为可移植的JSON格式。

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

最痛快的环节是看着成本计数器归零。46GB本地备份验证无误后,清理脚本瞄准"沉默的成本杀手":

弹性IP常被忽略,释放它们才能避免闲置时计费:aws ec2 release-address --allocation-id eipalloc-...

RDS实例在确认本地SQL转储100%完整后删除,并跳过最终快照,确保零存储残留:aws rds delete-db-instance --db-instance-identifier my-db --skip-final-snapshot

最后一步:删除CloudFormation堆栈、清空S3桶、解除IAM策略。当终端最后一行命令执行完毕,账单页面刷新——$0.00。46GB数据安静地躺在本地硬盘上,随时可以重建,随时可以点燃。