MAXOPS ADVENTURES ‹ All issues
PAGE 1 / 1
The Cost Sentinel holds a glowing invoice whose figures resolve from pale estimates into solid gold numbers.
FIG. 01 — COVER
MaxOps Adventures · Issue №7

THE REAL
BILL

From List Prices to What You Actually Paid

Every saving MaxOps quotes starts as a public list price. If you hold Reserved Instances or Savings Plans, that number is wrong — and this is how to fix it.

Two price tags hang from the same server: a large pale one reading list price and a small solid one reading what you paid.
FIG. 02 — TWO PRICES
The problem · The sticker is not the receipt

THE PRICE ON THE
SHELF ISN'T WHAT
YOU PAID

Cost Sentinel

By default I price everything from AWS's public list. It's honest, it needs no extra access, and it's enough to rank what's wasteful. But it's the sticker price — not your receipt.

A Reserved Instance or a Savings Plan can cut what you actually pay for a resource substantially. Price that resource at list and the saving looks larger than it is. Recommend deleting it on that basis and the reasoning was built on a number nobody was ever charged.

Newcomer

So the findings are wrong?

Cost Sentinel

The findings hold — an idle resource is idle whatever it costs. It's the amounts that drift. And amounts are what people take to a budget meeting.

An enormous itemised ledger unrolls, each line naming a single resource and an hour.
FIG. 03 — THE LEDGER
The source · Your itemised bill

THE COST AND
USAGE REPORT

The Cost and Usage Report — everyone says CUR — is the most detailed billing data AWS produces. Not a monthly total, not a per-service summary: one line per resource, per usage type, per hour, with the discounts already applied.

01
It is not on by default
AWS only writes a CUR once you ask for one, into an S3 bucket you own. Nothing exists retroactively — the export starts producing data from the day it is created.
02
It is enormous
Hundreds of columns, millions of rows for a large account. That is why it lands as compressed Parquet in S3 rather than something you open in a spreadsheet.
03
It knows your discounts
This is the part that matters here. The CUR is where Reserved Instance and Savings Plan coverage is attributed back to the resource that consumed it.
One m5.xlarge, one month, three ways of counting
List price (what MaxOps uses by default)$140.16 / mo
Unblended — what AWS charged this month$0.00 / mo
Net amortized — the reservation spread across its term$83.22 / mo

MaxOps uses net amortized cost. It is the only one of the three that answers "what does keeping this resource actually cost me?"

Unblended reads $0 because the reservation was paid for up front, months ago. Delete the resource on that basis and you would expect to save nothing.

EXHIBIT A — THE SAME RESOURCE
The concept · The one piece of jargon worth learning

AMORTIZED,
NOT UNBLENDED

Cost Sentinel

If you buy a year of capacity up front, the month you pay looks expensive and the eleven that follow look free. Neither is what the resource costs you.

Amortized cost spreads that up-front payment evenly across the term it bought. So a reserved instance shows a steady monthly figure rather than one spike and eleven zeroes. Net means after discounts. MaxOps reads net amortized cost throughout.

Newcomer

Why does that choice matter to me?

Cost Sentinel

Because it is the number that changes if you act. Delete an unreserved resource and you stop paying. Delete a reserved one and you keep paying until the term ends — amortized cost is what shows you the difference.

Settings ▸ Cost Data
1 · Cost and Usage Report exportDone
2 · First bill delivered by AWSDone
3 · Local cost cacheNot set up
Summarise billing data
4 · Pricing from actual costNot set up

The page never remembers which step you are on. It asks AWS and your own machine what is true, every time you open it.

EXHIBIT B — THE PAGE
The shape of it · Four steps, one page

WHAT YOU'RE
ACTUALLY DOING

01
Ask AWS to produce the bill
Create the export. A one-time administrative act in the account that pays the bills.
02
Wait for the first delivery
Up to 24 hours, and nothing you can hurry. This step needs nothing from you at all.
03
Summarise it locally
Reduce millions of billing lines to one figure per resource per month, stored on your machine.
04
Switch pricing over
Tell MaxOps to prefer the bill over the list. Reversible at any time, from the same page.

Because the page detects rather than remembers, it is safe to close the tab, come back tomorrow, or set part of this up by hand. It reflects whatever is actually there.

The Sentinel holds two distinct keys: a small worn one labelled read and a heavier one labelled setup, kept on separate rings.
FIG. 04 — TWO KEYS
Access · The scan role can't do this, on purpose

WHY THIS ASKS FOR
A SECOND SET
OF KEYS

Cost Sentinel

The role I scan with is read-only. It cannot create a bucket, register an export, or run a query. That is not an oversight — it is the promise the role exists to make.

Setting up cost data genuinely needs to create things. Rather than widen the scanning role and quietly break that promise, MaxOps uses a separate profile for setup only. Scans keep using the read-only role no matter what you choose here.

Newcomer

I don't have a profile with those permissions.

Cost Sentinel

Then let me make one. Create role builds MaxOpsCostDataRole scoped to exactly this job — the report bucket, the export, the queries. Nothing else. If your own credentials can't create roles either, download the policy and hand it to someone who can.

The Sentinel sits patiently beside an empty bucket, watching a slow sunrise, an hourglass at rest.
FIG. 05 — THE WAIT
Step two · The part you cannot rush

COME BACK
TOMORROW

Once the export exists, AWS writes the first file on its own schedule — usually within 24 hours. There is no button for this. The step will read Waiting on AWS, and that is the correct state, not a fault.

Newcomer

It's been a day and it still says waiting.

Cost Sentinel

Then check the export still exists and points at the bucket I manage. If step one has turned red, it will say so — and the button on it will say Repair rather than Create.

Nothing is lost by leaving it. The page is a live view, not a wizard holding your place: reopen it whenever you like and it will tell you where things stand.

Before you confirm
Queries to run13
Months2025-09 → 2026-09
Report size1.3 MB
Estimated cost$0.00

Athena bills per terabyte scanned. The estimate is an upper bound — it assumes every query reads the whole export.

Nothing is spent until you press the button. Cancel costs nothing.

EXHIBIT C — THE ESTIMATE
Step three · The step that costs money

TURNING MILLIONS
OF LINES INTO
ONE NUMBER

Cost Sentinel

Your bill is too large to read directly, so I ask Athena to reduce it: for each resource, in each month, the total net amortized cost. That summary lands on your machine as a small file.

This is the one step in MaxOps that spends money, so it is the one step that shows you a bill first. Athena charges for the data each query scans. For most accounts a summary costs a few cents or nothing at all — but you see the estimate before you agree to it.

Newcomer

Do I have to run this every day?

Cost Sentinel

No. Re-run it when you want fresher figures. Only the current month changes; the ones already summarised are settled.

The Sentinel throws a heavy switch and a wall of pale estimated figures turns solid and gold.
FIG. 06 — THE SWITCH
Step four · And what changes

PRICED FROM
THE BILL

The last step is a switch. Once it is on, any resource that appears in your bill is priced from what it actually cost — discounts included. Anything not in the bill keeps its list price, so nothing goes blank.

01
Findings get truer amounts
The same resources are flagged, but what you would save by acting is now grounded in what you were charged.
02
Rightsizing gets sharper
A reserved instance stops looking like an easy win. The recommendation reflects that you have already paid for it.
03
It takes effect on the next scan
Existing findings keep the figures they were computed with. Re-scan to see them repriced.
Cost Sentinel

And it is a switch, not a door. Turn it off and I go back to list prices without losing anything you built.

The Sentinel points at a deliberate gap in an otherwise complete ledger rather than filling it in.
FIG. 07 — THE GAP
Honesty · Where the number stops

WHAT THIS
WON'T TELL YOU

Cost data makes the amounts real. It does not make them complete, and it is worth knowing where the edges are.

01
Only what the bill itemises
A resource AWS does not bill per-resource will not appear. It keeps its list-price estimate, and the page says how many resources were matched so you can tell.
02
Only from the export forward
A CUR created today has no data about last year. History accumulates from the day you create it — which is the best argument for creating it early.
03
It won't match Cost Explorer exactly
Both are correct; they attribute reservations differently. Expect the same order of magnitude, not the same cents.
Cost Sentinel

Where I could not measure something, I say so rather than filling the gap. A number I invented would be worse than an honest absence.

A step that needs you
1 · Cost and Usage Report exportError

The credentials in use aren't allowed to call bcm-data-exports:ListExports.

Setup is using the read-only scan role, which deliberately cannot do this. Choose an AWS profile under Setup credentials above.

Repair export
EXHIBIT D — A RED STEP
When it breaks · The message names the fix

A STEP THAT
TURNS RED

A red step always carries two things: the exact permission or resource at fault, and what to do about it. If a fix exists, the button beside it performs that fix.

01
A permission is missing
The message names the AWS action that was refused. Either pick a profile that has it, or let MaxOps create the role that does.
02
The table points somewhere else
Usually a leftover from an earlier or hand-made export. Repair export points it back at the one MaxOps manages. No data in S3 is touched.
03
A job failed
The failure stays on the page with the AWS error and the time it happened, until a later run of that same step succeeds.
MaxOps Adventures · Issue №7 · The End

FOUR STEPS.
ONE HONEST
NUMBER.

List prices tell you what a resource would cost a stranger. Your bill tells you what it costs you. Once the two are connected, every saving MaxOps quotes is one you could actually bank.