Skip to content
AWS aws cost 6 min read

AWS Budgets & Alerts

AWS Budgets is the service that watches your spending and your usage, then tells you the moment things start to drift off plan. You set a target number — say “$200 a month” — and pick the thresholds where you want to be warned. When your real cost (or your forecasted cost) crosses one of those thresholds, AWS sends you an email or a notification. This is the single most important thing to set up on the first day of a new account, because a forecasted-spend alert can warn you about a runaway cost days before the actual invoice ever arrives.

Why budgets matter

The AWS bill is a “pay-after-you-use” bill. You can spin up an expensive instance, forget about it, and only discover the damage at the end of the month. AWS Budgets closes that gap. It checks your spend several times a day and compares it against the limit you set, so a small mistake gets caught while it is still small.

A key idea to understand up front: a budget alert is a notification, not a brake. AWS will tell you that you crossed a line, but it will not stop your resources on its own. If you want the budget to actually do something — like block new launches — you must attach a budget action (covered below).

Types of budgets

AWS Budgets supports four budget types. Pick the one that matches what you are trying to control.

Budget typeTracksWhen to use
Cost budgetDollars spentThe everyday choice — cap a project, team, or whole account in money terms.
Usage budgetUsage amount (GB, hours, requests)When you care about a quantity, e.g. “no more than 500 GB of S3 storage.”
RI / Savings Plans budgetReservation/commitment utilization & coverageWhen you have Reserved Instances (RIs) or Savings Plans (SPs) and want to be alerted if you are wasting them.
Zero-spend budgetFirst dollar of spendNew or “sandbox” accounts that should cost nothing — alerts you the instant anything is billed.

Tip: The zero-spend budget is a one-click template in the console. If you have an account that is meant to stay free, create it today. It fires the moment your bill goes above $0.01.

Actual vs forecasted alerts

Every cost or usage budget can alert on two different things, and you should usually set up both.

  • Actual — fires when money already spent reaches your threshold (e.g. 80% of budget). This is the “it happened” alert.
  • Forecasted — fires when AWS predicts you will reach your threshold by the end of the period, based on your trend so far. This is the “it’s going to happen” alert, and it is the one that saves you. A forecasted 100% alert can land three or four days before the actual bill would.

A common, robust setup for a monthly cost budget:

  1. Actual at 80% — “heads up, you’re close.”
  2. Actual at 100% — “you’ve hit the limit.”
  3. Forecasted at 100% — “at this rate you’ll blow past the limit.”

Creating a budget in the console

  1. Open the AWS Billing and Cost Management console and choose Budgets in the left menu.
  2. Choose Create budget.
  3. Pick a template (Zero spend budget, Monthly cost budget, etc.) or choose Customize for full control.
  4. Enter a Budget name (e.g. monthly-account-cost), set the Period (Monthly), and enter the Budgeted amount (e.g. 200).
  5. Under Alerts, add a threshold: choose Actual or Forecasted, the percentage, and the email addresses or an Amazon SNS (Simple Notification Service — a pub/sub messaging service) topic to notify.
  6. Add more thresholds as needed, then choose Create budget.

Creating a budget with the CLI

The CLI takes two JSON files: one describing the budget, one describing the notifications. First, create budget.json:

{
  "BudgetName": "monthly-account-cost",
  "BudgetType": "COST",
  "TimeUnit": "MONTHLY",
  "BudgetLimit": { "Amount": "200", "Unit": "USD" }
}

Then notifications.json — this wires up a forecasted 100% alert to email:

[
  {
    "Notification": {
      "NotificationType": "FORECASTED",
      "ComparisonOperator": "GREATER_THAN",
      "Threshold": 100,
      "ThresholdType": "PERCENTAGE"
    },
    "Subscribers": [
      { "SubscriptionType": "EMAIL", "Address": "[email protected]" }
    ]
  }
]

Now create the budget (replace 123456789012 with your account ID):

aws budgets create-budget \
  --account-id 123456789012 \
  --budget file://budget.json \
  --notifications-with-subscribers file://notifications.json

Output:

(no output on success — exit code 0)

Verify it exists:

aws budgets describe-budget \
  --account-id 123456789012 \
  --budget-name monthly-account-cost

Output:

{
    "Budget": {
        "BudgetName": "monthly-account-cost",
        "BudgetLimit": { "Amount": "200.0", "Unit": "USD" },
        "TimeUnit": "MONTHLY",
        "BudgetType": "COST",
        "CalculatedSpend": {
            "ActualSpend": { "Amount": "63.41", "Unit": "USD" },
            "ForecastedSpend": { "Amount": "211.07", "Unit": "USD" }
        }
    }
}

In the result above, actual spend is only $63 but the forecast is $211 — already over the $200 limit. That forecasted alert would fire now, mid-month, giving you time to react.

Cost note: AWS Budgets is effectively free in practice. You get two budgets at no charge, and each additional budget costs $0.02 per day (about $0.60/month). Budget actions add a small charge per action. The savings from one caught mistake dwarf this.

Budget actions — turning alerts into enforcement

If you need a budget to actually enforce a limit, attach a budget action. When a threshold is crossed, AWS can automatically run a remediation step on your behalf:

  • Apply an IAM (Identity and Access Management) policy to a user, group, or role — for example a “deny launching new EC2 instances” policy.
  • Apply a Service Control Policy (SCP) to an AWS Organizations account.
  • Stop running EC2 or RDS instances that match a filter.

Actions can run automatically or wait for your one-click approval. To set one up: in the budget, choose Add action, pick the threshold that triggers it, choose the action type (e.g. Apply IAM policy), select the target policy and principals, and choose whether approval is Automatic or Manual.

# CloudFormation: a cost budget that emails on forecasted overspend
Resources:
  MonthlyBudget:
    Type: AWS::Budgets::Budget
    Properties:
      Budget:
        BudgetName: monthly-account-cost
        BudgetType: COST
        TimeUnit: MONTHLY
        BudgetLimit:
          Amount: 200
          Unit: USD
      NotificationsWithSubscribers:
        - Notification:
            NotificationType: FORECASTED
            ComparisonOperator: GREATER_THAN
            Threshold: 100
            ThresholdType: PERCENTAGE
          Subscribers:
            - SubscriptionType: EMAIL
              Address: [email protected]

Best Practices

  • Create a budget on day one of every new account — a zero-spend budget for sandboxes, a monthly cost budget for everything else.
  • Always add a forecasted alert, not just actual ones — it warns you before the money is gone.
  • Set multiple thresholds (e.g. 80%, 100%, forecasted 100%) so warnings escalate.
  • Send alerts to an SNS topic, not just one inbox, so they can fan out to email, Slack, or a pager and survive someone leaving the team.
  • Use cost allocation tags in budget filters to track spend per team, project, or environment separately.
  • For accounts that must not overspend, attach a budget action (restrictive IAM/SCP policy) — remember alerts alone never stop resources.
  • Review and adjust budget amounts each quarter so they reflect real, current usage.
Last updated June 15, 2026
Was this helpful?