AWS bills you for what you use, and it is easy to lose track of spending, especially in a new account where you are trying out services. A billing alarm sends you an email when your estimated charges pass an amount you choose, so a forgotten resource does not turn into a surprise bill. This tutorial shows how to set one up in a few minutes.

Quick answer

  1. Turn on Receive CloudWatch Billing Alerts in Billing preferences.
  2. Switch the console Region to US East (N. Virginia). Billing metrics only exist there.
  3. In CloudWatch, create an alarm on the EstimatedCharges metric with your dollar threshold.
  4. Create an SNS topic with your email address and confirm the subscription email.

A billing alarm only warns you. It does not stop services or cap your spending.

Before you start

  • You need access to the AWS Management Console, as the root user or as an IAM user with billing permissions.
  • IAM users cannot see billing by default. If you use an IAM user, the root user has to turn on IAM user and role access to Billing information in the account settings first.
  • You need an email address that you check often.

Step 1: Enable billing alerts

  1. Sign in to the AWS Management Console and open the Billing and Cost Management console.
  2. In the left menu, choose Billing preferences.
  3. Next to Alert preferences, choose Edit.
  4. Select Receive CloudWatch Billing Alerts. If you see a Free Tier alerts option, select that too.
  5. Choose Save preferences.

It can take a little while after this before billing data shows up in CloudWatch.

Step 2: Switch to the US East (N. Virginia) Region

This is the step most people miss. AWS stores billing metric data only in US East (N. Virginia) (us-east-1). If you create the alarm in any other Region, you will not see the billing metric. Use the Region selector at the top right of the console and choose US East (N. Virginia).

Step 3: Create the alarm in CloudWatch

  1. Open the CloudWatch console and choose Alarms, then Create alarm.
  2. Choose Select metric, then Billing, then Total Estimated Charge.
  3. Select the EstimatedCharges metric with the currency USD, and choose Select metric. The values are always in US dollars.

Step 4: Set the threshold

  1. For Statistic, choose Maximum.
  2. For Period, choose 6 hours. Billing data updates only a few times a day, so a shorter period does not help.
  3. Under Conditions, choose Static and Greater than.
  4. Enter your limit in dollars, for example 10 if you want a warning when estimated charges pass $10.
  5. Choose Next.

Step 5: Set up the email notification

  1. Under Notification, choose In alarm.
  2. Select Create new topic, and give it a name such as BillingNotifications.
  3. Enter your email address and choose Create topic.
  4. Choose Next.

Step 6: Name the alarm and create it

  1. Give the alarm a clear name, such as MonthlyBillingAlarm-10USD.
  2. Review the settings and choose Create alarm.
  3. Open the confirmation email from AWS Notifications and click Confirm subscription. Check your spam folder if you do not see it. Until you confirm, no alerts will be sent.

How to test the alarm

If you create an alarm when your charges are already above the threshold, it goes straight into the ALARM state. To test it, create a temporary alarm with a very low threshold, such as $1, once your account has some estimated charges, and check that the email arrives. Delete the test alarm afterwards.

What a billing alarm cannot do

  • It does not stop your services. You still have to shut down the resources that are costing you.
  • It is not instant. Billing data lags behind your usage, so set your threshold lower than the amount you really cannot afford.
  • It tracks the month so far. Estimated charges reset at the start of each month.

CloudWatch billing alarm vs AWS Budgets

 

CloudWatch billing alarm

AWS Budgets

What it tracks

Total estimated charges for the month

Cost or usage, and you can filter by service, account or tag

Alerts

Email or SNS when the threshold is crossed

Email or SNS when actual or forecasted spend passes a percentage of your budget

Region

Must be US East (N. Virginia)

No Region switch needed

Best for

A simple total-spend warning

More control and forecasts

Many people use both. Set one simple billing alarm, then add a budget for finer control. If you create more than one alarm, use different thresholds, for example $10, $50 and $100, so you can see spending escalate.

Troubleshooting

Problem

Fix

You cannot see the Billing metric in CloudWatch

Enable billing alerts, switch to US East (N. Virginia), and wait a little

You never receive an email

Confirm the SNS subscription email and check spam

You cannot open Billing preferences as an IAM user

Ask the root user to enable IAM access to Billing information

The alarm shows INSUFFICIENT_DATA

It is new. Wait for the first data point

The alarm goes to ALARM immediately

Your estimated charges are already above the threshold

FAQs

Will AWS stop my services when I reach my limit?

No. A billing alarm only sends a notification. Stop or delete the resources yourself.

Is a billing alarm free?

CloudWatch’s free tier covers a small number of alarms, so one billing alarm is usually free or very cheap. Check the current CloudWatch pricing page to be sure.

Why can I only create it in N. Virginia?

AWS stores billing metrics in that Region, so the alarm has to be created there. It still covers your whole account’s estimated charges.

Can I track one service instead of the total?

Yes. CloudWatch also has per-service EstimatedCharges metrics, and AWS Budgets can filter by service.

How do I protect my account further?

Turn on multi-factor authentication for the root user and for your IAM users.

This tutorial is for general information. AWS console screens and menu names change from time to time, so check the current AWS documentation if a screen looks different.

Sources: AWS documentation: Create a billing alarm to monitor your estimated AWS charges