Slavik Shynkarenko

notebook № 135 plates · 13 min to read, longer to play ·

Anatomy of a cloud bill

On the rows behind the total

part 2 of 7 in What the cloud costs · by

A cloud invoice is one number. Behind it sits a dataset of millions of rows, each one a tiny multiplication, in three different dialects depending on the provider. This notebook opens it up: what a line item is made of, why one line has four different costs, how big the data really is, and where the surprises hide.

I

plate I · the line item

Every line is a multiplication

Strip a cloud bill down and every line says the same thing: how much of something you used, times the price of one unit of it. Usage times rate. Everything else on the line exists to say what the something was, who used it and when.

What changes from service to service is the unit. Compute is billed in hours or seconds of a machine. Storage in gigabyte-months, a gigabyte kept for a whole month. Network in gigabytes moved. Serverless functions and API calls in requests, often in millions of them. A SKU (the provider’s code for one product at one price in one region) ties the unit to its price.

So the two levers of FinOps are already visible on a single row. Use less of the unit, and you’re doing usage optimisation. Pay less per unit, through commitments, spot or a negotiated rate, and you’re doing rate optimisation. Every saving ever made in the cloud moves one of those two numbers.

Pick “storage”, then move it to the archive tier. Which number on the row did that change?

fig. 13.1~/one-lineservice · usage · rate
One month of one resource, written as a simplified billing row. Rates are illustrative, roughly AWS list prices in one US region in 2026, rounded.
II

plate II · cost types

One line, four costs

Here is where newcomers get lost. A single line of usage can carry four different costs, and all four are correct. The FOCUS standard (plate IV) names them. List cost is the public price. Contracted cost is the price after your negotiated discounts. Billed cost is what the invoice charges for that line, in that period. Effective cost is what the usage really cost once commitments and credits are spread over it.

The difference shows up the moment you buy a commitment upfront. In the month you buy it, the purchase is one big line and the usage it covers is billed at zero. Billed cost says the servers were free. Effective cost says what they actually cost, and that’s the number to show the team that runs them.

Lines also come in kinds. Most are usage, but a bill also carries purchases (commitments, marketplace software), credits (promotions, refunds), taxes and adjustments. Summing a column without filtering by kind is the classic way to count a commitment twice: once when it’s bought, once as it’s used.

Switch between “billed” and “effective” with the upfront commitment on. Then turn on the credit.

fig. 13.2~/four-costswhat applies · which column
One server for one month, $700 at list price. The negotiated discount is 10%, the one-year commitment paid upfront covers it at 35% off, and the credit is $50. Numbers are illustrative.
III

plate III · the dataset

Millions of rows

The invoice is a summary. The bill itself is a dataset that each provider exports for you: AWS writes the Cost and Usage Report into a storage bucket, Azure exports cost details, Google Cloud writes its billing export into BigQuery. At full detail there is a row for every resource, every usage type, every hour.

For a mid-sized company that’s tens of millions of rows a month. It’s why FinOps teams end up running a small data platform: the bill has to be ingested, cleaned, joined with tags and team ownership, and stored for comparisons over years.

Each level of detail answers a different question. The total tells finance what to pay. Per service and account, it tells you which teams to talk to. Per resource and hour, it tells an engineer which machine was idle at 3 a.m. FinOps calls getting this data in, reliably and on time, the data ingestion capability. Nearly everything else depends on it.

Zoom to “per resource”. How many rows did that add, and what question can you answer now?

fig. 13.3~/zoomlevel of detail
An illustrative month for a company spending about $1.2 million a month on one cloud. Row counts are orders of magnitude, not a measurement.
IV

plate IV · FOCUS

Three clouds, three dialects

Every provider invented its own bill. The same idea, say “the cost after discounts”, lives in a different column, with a different name and slightly different rules, in each export. A company on two clouds plus a few SaaS and AI vendors spends real engineering time just translating dialects before anyone can ask a question across them.

FOCUS, the FinOps Open Cost and Usage Specification, is the FinOps Foundation’s answer: one set of column names and definitions that every provider can publish. The big three clouds now offer FOCUS-formatted exports next to their native ones, and more SaaS and AI vendors are following.

The value isn’t the names, it’s the definitions. When every bill agrees on what EffectiveCost means, a cross-cloud report becomes a query, not a project.

Pick “cost after discounts”. How many different ideas of it do the native exports hold?

fig. 13.4~/rosettapick a concept
Simplified column names from AWS’s Cost and Usage Report 2.0, Azure’s cost details and Google Cloud’s BigQuery export, next to FOCUS. Exports have versions and variants. Check the provider’s field reference before writing queries.
V

plate V · data transfer

The line nobody drew

Architecture diagrams show boxes. Bills charge for arrows. Data coming into the cloud is usually free. Data going out is billed by the gigabyte: out to the internet, across regions, and often between availability zones in the same region. Managed network services add their own toll; a NAT gateway charges for every gigabyte it processes, on top of the transfer itself.

None of these lines is big per gigabyte. They hide because they’re spread across many SKUs with names like DataTransfer-Regional-Bytes, and because nobody draws them in the design review. Then traffic grows and the network becomes one of the larger lines on the bill.

Reading the bill is how you find them: group by usage type, sort by cost, and look for transfer. The fixes are architectural, which is why FinOps belongs in design reviews, not just in month-end reports: keep chatty services in one zone, use private endpoints instead of NAT for storage traffic, and put a CDN in front of anything popular.

Turn on “app and database in different zones”, then route storage through the NAT gateway.

fig. 13.5~/arrows-costarchitecture · traffic
A simplified web service. Rates are rounded AWS list prices for one US region: internet egress $0.09/GB, cross-zone $0.01/GB each way, NAT processing $0.045/GB, CDN egress $0.085/GB. Other providers differ in the details, not the shape.

Questions people ask

What is the difference between billed cost and effective cost?

Billed cost is what the invoice charges for a line in that period, so an upfront commitment shows its full price in the month you buy it and the usage it covers looks free. Effective cost spreads the upfront payment, discounts and credits over the usage they apply to, so each hour carries its true price. Use billed cost to reconcile invoices and effective cost to show teams what they spend.

What is FOCUS in FinOps?

FOCUS, the FinOps Open Cost and Usage Specification, is an open standard from the FinOps Foundation for billing data. It defines common columns, such as BilledCost, EffectiveCost, ServiceName and ResourceId, so that exports from AWS, Azure, Google Cloud, SaaS and AI vendors can be joined and compared without translating each provider’s dialect by hand.

Why is data transfer so expensive in the cloud?

Traffic into the cloud is usually free, but traffic out to the internet, between regions and often between availability zones is billed per gigabyte, and managed network services like NAT gateways add their own per-gigabyte processing fee. The charges are small per gigabyte, spread across many lines and easy to miss in design reviews, so they surprise teams once traffic grows.

Related material

elsewhere in the notebooks

further reading

← the Cloud FinOps series · all notebooks