The AWS bill has a reputation for being incomprehensible, and it is partly deserved: you are charged for dozens of different items, in dollars, with technical names and a month in arrears. But it follows a logic, and once you see it you never forget it. This guide goes through where the information is, how to read it and, above all, where the charges nobody remembers signing up for come from.
Before you start: what each thing means
- Cost Explorer
- The AWS screen that shows spend in charts and lets you filter it by service, region, account or tag. It is for understanding; the official bill is on another screen.
- Service
- Each AWS product: EC2 (machines), S3 (files), RDS (databases)... The bill is broken down by service.
- Region
- The place in the world where each thing is (Ireland, Virginia...). You can have spend in a region where nothing is used any more.
- EBS and volumes
- The disks of EC2 machines. They are charged even if the machine is switched off or even deleted, if the disk was left orphaned.
- Snapshot
- A copy of a disk or a machine. It is charged for the space it takes up each month for as long as it exists.
- Elastic IP / public IP
- Fixed internet addresses. AWS charges for them by the hour, whether or not they are in use.
- NAT Gateway
- A piece of networking that lets machines without a public address reach the internet. It charges by the hour and per data even if nobody uses it.
- Data transfer
- What your machines send out to the internet. Coming in is free; going out is charged per GB.
- Tag
- A name = value pair you attach to each resource (for example, Proyecto = tienda) so you can group spend later.
- Free tier
- What AWS gives new accounts for free during the first year. When it is up, those services start being charged.
- Reverse charge
- The VAT mechanism between companies in different EU countries: the seller does not charge VAT and the buyer declares it in their own country. It requires having the VAT number registered in AWS.
Where the bill is
At the top right of the console, in your account menu, go to Billing and Cost Management. There are three screens that matter:
- Bills: the official detail for the month, by service and by region, with taxes at the end. It is what is charged to your card at the start of the following month. You can download the invoice as a PDF.
- Cost Explorer: the same money but in charts and with filters. It is the tool for understanding. The first time you have to enable it and it takes up to a day to have data.
- Budgets: so that it warns you before the month ends.
If you have several accounts joined with AWS Organizations, the payer account sees the total and the breakdown by account; the others only see their own.
Cost Explorer in three clicks
Open Cost Explorer and do this, in this order:
- Period: last 6 months, granularity monthly. You see the trend. If the line goes up and your business does not, you already know you need to look.
- Group by Service. Stacked bars appear: EC2, RDS, S3, "EC2-Other"... Normally two or three services take 80 %.
- Filter by the biggest service and group by Usage type. This is where machine hours are separated from disks, snapshots and data transfer.
Two more filters that save you grief: group by Region (you discover the machine somebody created in Virginia during a test) and by Linked account if you have several. And always check the unblended versus amortized costs option if you pay for anything up front (savings plans, reserved instances): it changes where the money shows up.
The services you do not see
This is the truly useful part. Things that charge every month without anything being "switched on":
| What appears | What it is |
|---|---|
| EC2-Other / EBS | Disks of machines you stopped (stopping does not delete the disk) and disks left orphaned when a machine was deleted without "delete on termination" ticked. |
| EBS Snapshot / Lightsail snapshot | Accumulated snapshots. Each one is charged per GB per month until you delete it. |
| Public IPv4 / Elastic IP | Public IP addresses. AWS charges for them by the hour, whether assigned or not. An Elastic IP from a machine you deleted still costs money. |
| NAT Gateway | A gateway created by a VPC wizard and forgotten. It charges by the hour and per GB even if nobody uses it. |
| Data Transfer | Data out to the internet. Coming in is free, going out is not. A website with lots of images or a backup downloaded every night shows up here. |
| CloudWatch | Logs kept forever and custom metrics. |
| Route 53 | A fixed amount for each hosted zone, plus queries. Test domains you no longer use. |
| RDS | Storage and backups beyond what is included, and the "restored" instance from that scare that nobody deleted. |
| S3 | Besides the space, the requests and old versions of files if you enabled versioning. |
And the most painful one: the end of the free tier. For the first twelve months some services are not charged; when the year is up they appear on the bill as if they were new.
Dollars, euros and taxes
AWS bills in dollars and your bank converts at the day's rate, with its fee; that is why the amount on your statement never matches Cost Explorer exactly. You can change the payment currency to euros in the payment preferences, at the exchange rate AWS applies.
Taxes appear as a separate line at the end of the bill. For an EU company with a valid intra-community VAT number, AWS normally does not charge VAT and applies the reverse charge; for individuals and companies without a registered VAT number, it does charge it. Filling in the Tax settings with the company's VAT number is decisive: otherwise you pay VAT that you will not be able to deduct in the same way afterwards, and the invoice does not serve as a full invoice for your accounts. Each monthly invoice carries the breakdown; check with your accountant how to book it.
Tags: knowing whose each euro is
When you have more than one project or client in the same account, give each resource a tag (for example Proyecto = tienda) and enable it as a cost allocation tag in Billing. From then on Cost Explorer can group by that tag and you know how much each project costs. Untagged resources appear as "no tag"; that bar is your to-do list.
An alert so you never get surprised again
In Budgets, create a monthly cost budget with the amount you consider normal and two alerts: when actual spend exceeds 80 % and when the end-of-month forecast exceeds 100 %. It will arrive by email. It takes two minutes and is the best effort-to-benefit measure in the whole AWS account.
A five-minute monthly routine
- Cost Explorer, last 3 months, by service. Anything new or anything going up?
- By region. Is there spend in a region where you have nothing?
- EC2: available volumes (with no machine) and unassociated Elastic IPs. Delete them or explain why they are there.
- Snapshots older than a year. Would you ever restore them?
- Check that the budget still makes sense.
What can go wrong
Cost Explorer and the bill do not add up
Cost Explorer shows the current month with a delay of hours and the last few days are estimates. The bill closes at the start of the following month and includes taxes and adjustments. Compare closed months, not the current one.
There are charges from a region I do not use
Change the region in the EC2 console and look at volumes, snapshots and IP addresses. It is very common for an old test to still be there. Lightsail has its own console and has to be checked separately.
I have been charged for a support service
AWS support plans (Developer, Business) are signed up for from the console and charged every month as a percentage of spend or a fixed minimum. If you do not need it, cancel it under Support, Plans.
In Simplio
In Simplio the Costs screen shows, for each AWS account you have connected, what has been billed this month to date, the end-of-month forecast and last month, just as Cost Explorer gives it, in dollars and in euros, without opening any console. Next to it, an object-by-object estimate to know how much each machine or database costs per month, and a budget that warns you by email when it is exceeded.
The same task, in AWS and in Simplio
| In the AWS console | In Simplio | |
|---|---|---|
| See what has been billed and the forecast | Billing, Cost Explorer, enable, wait a day, filter: 10 minutes per account | Costs screen: this month, forecast and last month for all your accounts, in dollars and euros |
| Know how much each machine costs | Cost Explorer by resource, with cost allocation tags enabled | Object-by-object estimate on the same screen |
| Cap what each person can create | Does not exist in AWS | Budget per user |