fizz.today

Ratchet budgets: locking in cloud savings with AWS Budgets

I cut our AWS bill from $3,105 in March to a $48/day run rate in April — $834/month in quantified savings across an epic’s worth of cleanup. The question was how to make sure it stays down.

Monthly budgets catch overruns after the fact. By the time you get the alert, you’ve been overspending for weeks. Daily budgets catch it the same day — but a fixed daily budget doesn’t ratchet down as you ship savings.

So I started adding a new daily budget every time the run rate dropped. Each one is set at the new daily average and alerts at 101% and 110%:

$132.01/day  — original baseline ($3,960/mo)
$118.70/day  — first ratchet after early wins ($3,561/mo)
 $77.00/day  — current run rate ($2,310/mo)
 $33.33/day  — target ($1,000/mo)

The older budgets stay in place. They’re already passing — that’s the point. If spend creeps back up past any previous ratchet level, the alert fires immediately. Each budget is a one-way valve that locks in a savings milestone.

The $33.33/day budget at the bottom is the goal, not the current state. It fires every day right now because I’m spending $48/day, not $33. That’s fine — it’s a reminder of where I’m headed, not a false alarm. When I hit it, I’ll add a new ratchet below it.

I manage these in Terraform so the thresholds, subscribers, and ratchet history are version-controlled:

resource "aws_budgets_budget" "daily_ratchet_2300" {
  name         = "Daily Cost Budget under 2300"
  budget_type  = "COST"
  limit_amount = "77.00"
  limit_unit   = "USD"
  time_unit    = "DAILY"

  notification {
    comparison_operator       = "GREATER_THAN"
    threshold                 = 101
    threshold_type            = "PERCENTAGE"
    notification_type         = "ACTUAL"
    subscriber_email_addresses = ["devops@ramparts.dev"]
  }
}

The progression from $132 to $119 to $77 to $33 tells the story of the cleanup. Each ratchet is a commit message for a cost reduction that stuck.

#aws #finops #platformengineering