上个月有个客户气冲冲甩给我一张 $12,000 的账单,说“我们业务一点没涨,怎么比上个月多了 $4,000?” 我花了俩小时翻了翻他账号,发现光是三台测试机忘了关就跑了整整 28 天。这类事我见得太多,今天拎 7 个最常见也最隐蔽的配置坑,你对着自己的账号看一眼就能捡回不少钱。

坑 1:测试环境“永远在线”

很多团队的习惯是:EC2 开起来就不管了。开发测完、联调结束、甚至项目都上线了,那几台用于验证的实例还在跑。它们往往还配了不低的规格(比如 m5.4xlarge),一个月一台就奔着 $400 去了。

怎么办? 给测试环境统一打上 Environment: Test 标签,然后开 Instance Scheduler——设定晚上 9 点自动关机,早上 9 点自动开机。如果完全没人的项目,直接手动终止(Terminate),别停(Stop),Stop 还收 EBS 存储费。

坑 2:EBS 卷越配越大、越存越多

EC2 挂了,EBS(相当于云硬盘)的账单还挂着。很多人创建实例时默认选了 100GB 的 gp3 或 gp2,用完也不清理。更常见的是:旧实例删了,但 EBS 卷没跟着删,后台留着一堆“孤盘”(Unattached Volumes),每个月白交几十上百美金。

怎么办? 去 EC2 控制台的 Volumes 页面,按状态排序,把所有 available 状态的卷全筛出来。跟团队确认一遍没用了就删。另外,gp3 比 gp2 便宜约 20%,新建存储卷时直接选 gp3,除非有特殊的 IOPS 需求。

坑 3:S3 桶里全是“僵尸文件”

S3 的账单看一眼存储量,很多人直接吓一跳——好几十 TB,但日常用的只有几个 GB。剩下的是什么呢?三年前的 CI/CD 构建产物、线上环境的 debug 日志、没删除的旧版本前端资源。

怎么办?S3 生命周期(Lifecycle):日志类数据 30 天后转 S3 Glacier Instant Retrieval(冷存储,便宜不少),90 天后转 S3 Glacier Deep Archive(最冷最便宜)。同时把 S3 版本控制(Versioning) 的过期策略配好,比如只保留最近 3 个版本,旧的自动清掉——这步很多人忘了配,导致版本越堆越多,费用翻倍。

坑 4:NAT Gateway 的“过路费”在悄悄流血

这个坑我每次讲都有人拍大腿。NAT Gateway(让私有子网的机器访问外网的网关) 除了按小时收费,还按“处理的数据量”收费——每 GB 收 $0.045 左右。问题是,私有子网里的 EC2 去 S3 下载东西、去 DynamoDB 读数据,默认全都走 NAT Gateway 转发,这笔“过路费”一个月可能比实例本身还贵。

怎么办? 为 S3 和 DynamoDB 分别创建 Gateway VPC Endpoint(不收费的专用通道),然后在路由表里把去往这些服务的流量指向 Endpoint,完全绕过 NAT Gateway。操作就几步,省下的钱立竿见影。

坑 5:Elastic IP 闲置着也在扣钱

每个 Elastic IP(固定公网 IP)只要不关联在运行的 EC2 实例上,就按小时收闲置费。有人申请了 10 个弹性 IP,只用了 3 个,剩下 7 个空挂在那里,一个月悄无声息花掉 $60 多。

怎么办? 去 VPC 控制台看 Elastic IP 列表,把 Not associated 状态的全释放(Release)。用多少申多少,别囤。

坑 6:RDS 买错了“变速箱”

RDS(托管数据库)的计费有个细节:存储和 IOPS(每秒读写次数)是分开收费的。很多人买了预置 IOPS 的存储(io1/io2),但实际数据库的读写压力根本没到那个级别,白白付了 IOPS 的费用。

怎么办? 大部分中小业务选 gp2 或 gp3 存储类型就够了。gp3 默认 3000 IOPS 和 125 MB/s 吞吐量,中小型数据库完全够用。非要选 io2 的话,确认你的数据库真的需要那么高的 IOPS,别“买跑车当菜车开”。

另外,RDS 的备份存储默认保留 7 天,这 7 天的备份是计入账单的。如果业务允许,把备份保留期缩到 2~3 天(尤其测试库),能省一点是一点。

坑 7:预留实例“买错了型号”

预留实例(Reserved Instance,相当于包年包月批发价) 买了就后悔——因为买的是“特定型号、特定区域、特定操作系统”,一旦架构调整换了实例族,这张“优惠券”就废了。

怎么办? 改买 Savings Plan(更灵活的包年包月承诺),尤其是 Compute Savings Plan——不限定实例族、不限定区域、甚至可以跨 Linux/Windows。贵一点点(折扣比专用预留实例低 1~2 个百分点),但灵活度大了不止一个量级。如果你手头已经有 Reserved Instance 觉得买错了,可以在预留实例到期前不再续购,转而用 Savings Plan 做新承诺。


直接给结论:

先把“坑 1、坑 2、坑 5”走一遍——关测试机、删孤盘、释放闲置 EIP,这三步零成本、五分钟内完成,大概率能砍掉当月账单 10%~15%。然后花一小时配坑 3 的 S3 生命周期和坑 4 的 VPC Endpoint,这两个是持续性省钱动作。最后检查坑 6 和坑 7,如果涉及 RDS 存储类型和预留实例策略,跟团队确认好业务规划再动手。