成本
复制 复制
账单在部分月份上撒谎:当 RI 作为 1 号的单笔费用入账时,如何预测 AWS 成本
发布于 2026年7月10日

背景:在月底之前验证节省
一个交易型应用经历了成本优化:RDS rightsizing 和预留实例采购。管理层在月中的问题是:"节省真的到位了吗?"。轨迹:一月 1,670 美元(基线)→ 三月 1,220 美元(-27%,部分月份)→ 四月预测约 724 美元(-57%)。难点是推算部分月份的四月而不撒谎。
陷阱:幼稚的按比例分摊会高估
本能是拿截至今天的花费乘以本月的比例。这会因两个原因失效:
变更的部分收益。rightsizing 在 15 号生效(本月 16 天收益);RI 在 22 号(9 天)。之前的日子仍然昂贵——按整月均值推算会混淆费率。
No-Upfront RI 不分摊。它作为一笔费用出现,通常在 1 号,相当于整月——而非按日成本。把累计值乘以本月比例会把 RI 算两次。
No-Upfront 预留实例是一次性落地的固定费用,不是被稀释的按小时成本。在按比例分摊时把它当作可变项,是projection部分月份时最常见的错误。
正确的公式
把固定与可变分开,只对可变项按比例分摊:
本月预测 = (RI 固定,整月金额)
+ (截至今天的可变成本 ÷ 已过天数 × 本月天数)
+ (对总额的税)
把 RI 当作单笔费用的校验:
r6g.xlarge No-Upfront: 0.248 美元/小时 × 24 × 30 ≈ 178.56 美元/月
账单实际: 178.76 美元 ✓ (作为 1 行入账,而非每小时 720 笔)把 RI 移出按比例分摊、并正确推算可变项后,预测命中约 724 美元(-57%)——管理层看到的是正确的数字,而非被错误方法抬高的数字。
如何拉取数字
aws ce get-cost-and-usage \
--time-period Start=2026-04-01,End=2026-04-30 \
--granularity MONTHLY --metrics UnblendedCost \
--group-by Type=DIMENSION,Key=USAGE_TYPE \
--query 'ResultsByTime[].Groups[].{T:Keys[0],V:Metrics.UnblendedCost.Amount}' --output table
# HeavyUsage = RI(固定);BoxUsage = 按需(按比例分摊的可变项)经验教训
1. No-Upfront RI 是单笔费用,不是按小时成本。把整月金额加一次;永远不要对它按比例分摊。
2. 按比例分摊只适用于可变项(BoxUsage)。预测前把 HeavyUsage 与 BoxUsage 分开。
3. 月中的变更只有部分收益。在 15/22 号生效的 rightsizing/RI 只在随后的日子里节省;不要按整月均值推算。
结论
优化成本是一半工作;不撒谎地证明优化是另一半。部分月份的 AWS 账单把 1 号落地的固定费用与按日的可变成本混在一起——幼稚的按比例分摊会把 RI 算两次。把固定与可变分开后,-57% 的预测在最终发票上站住了脚。