Cloud Billing Data: Where AWS, GCP and Azure Costs Come From
The invoice is a summary. The detail you need for per-resource and per-team analysis lives in each provider's billing export, and each export has its own limits.
Cloud billing is the record of what each provider charged you, broken down by service, SKU, account and, if you configure it, individual resource. Every provider gives you two layers: an interactive console view for browsing, and a bulk export of line items for analysis. The console is enough to spot a trend. Anything that allocates cost to teams, reconciles against the invoice or explains an anomaly needs the export, so the first practical decision is which export to switch on and how early.
AWS: Cost Explorer and Data Exports
Cost Explorer is the console view. It aggregates by service, account, tag and more, and offers unblended, amortized, blended and net views of the same spend (explained in amortized vs unblended cost). Its resource-level detail is limited: you can enable resource-level data for chosen services “at daily granularity for the past 14 days”, it becomes available within 48 hours of enabling, and costs for services without it appear under “No resource ID”.
Data Exports is the bulk layer. AWS describes Cost and Usage Report 2.0 (CUR 2.0) as “the new and recommended way to receive your detailed AWS cost and usage data.” It delivers line items to an S3 bucket, including the commitment detail the console summarises: for example, No Upfront and Partial Upfront Savings Plans produce a recurring-fee line item every hour of the billing period.
Google Cloud: billing export to BigQuery
Google’s detailed data path is Cloud Billing export to BigQuery, which exports billing data “automatically throughout the day to a BigQuery dataset.” You enable each export type separately:
- Standard usage cost: account, invoice date, services, SKUs, projects, labels, locations, cost, usage, credits, adjustments and currency.
- Detailed usage cost: everything in standard plus resource-level cost, such as an individual VM or SSD. GKE detail additionally requires cost allocation to be enabled.
- Pricing and CUD metadata exports for rate and commitment analysis, and a FOCUS usage cost export (Preview) normalised to the FinOps Open Cost and Usage Specification.
Google’s own advice is that “timing is important”: it recommends enabling the BigQuery export at the same time you create the Cloud Billing account, so switch it on before you need it. Note that GCP line items carry credits (such as committed-use and sustained-use discounts) separately from gross cost, so the cost column alone overstates what you pay.
Azure: Cost Management exports
Azure Cost Management shows costs in two datasets, Actual Cost (reconciles to the invoice) and Amortized Cost (reservation and savings plan purchases spread across the term). For bulk analysis you create exports, a recurring task that writes Cost Management data to an Azure storage account on a daily or monthly basis. Exports can also be produced in the FOCUS format, which Microsoft says “combines actual and amortized costs.”
What makes billing data hard to use
- Resource granularity varies. AWS Cost Explorer keeps resource-level data for 14 days; CUR 2.0 and GCP’s detailed export keep the per-resource lines.
- Not every charge has a resource. Taxes, fees, data transfer and rows AWS marks with no resource ID cannot be matched to a single resource, so they must be reported as unallocated rather than silently dropped.
- Commitments move cost in time. Billed views put purchase fees on the purchase date; amortized views spread them. Pick one per report.
- Currency. Accounts billed in different currencies need conversion before they can be summed.
How ZopNight uses billing data
ZopNight reads billed cost from AWS Cost Explorer (or, opt-in, the customer’s CUR 2.0 export in S3, which lifts the 14-day resource-level limit), Azure Cost Management (amortized) and the GCP BigQuery export (net of credits), and matches line items to discovered resources. Charges that match no resource, such as data transfer, taxes and fees, are kept as unattributed spend so totals reconcile with the invoice, and multi-currency accounts are converted to USD with date-specific exchange rates. Read-only access is sufficient for this: billing and discovery need no write permission. Billing data then drives cost allocation and budgets.
Questions we get a lot.
If yours isn't here, email us and we'll answer directly.
How far back does AWS Cost Explorer show per-resource costs?
Resource-level data in Cost Explorer is available at daily granularity for the past 14 days, for the services you enable it for. For longer per-resource history, use a Cost and Usage Report 2.0 export.
When should I enable the GCP billing export to BigQuery?
Google recommends enabling Cloud Billing data export to BigQuery at the same time you create the Cloud Billing account, to get a more comprehensive set of billing data.