White Paper ← All white papers

GrandLine Architecture Intelligence. Multi-Cloud FinOps Primer

Revision: 2026-Q2 · Audience: FinOps leads, platform engineers, and architects who are asked to "tie cost to architecture" across AWS, Azure, and GCP.

This is not a FinOps methodology document. the FinOps Foundation already writes those better than we could. This paper is about how the three clouds expose cost data, how GrandLine normalises it, and how to align tags, rules, and ownership so your finance team gets the numbers they actually need.

1. Why multi-cloud FinOps is awkward

Each cloud publishes cost data in a different shape, on a different cadence, with different granularity, at a different price. A "resource" in AWS's CUR is not the same row as a "resource" in Azure's Cost Management export, and neither is the same as an entry in a GCP Billing BigQuery dataset. The terms of art. reservation, commitment, committed use. do not line up. Even "tag" does not mean the same thing in Azure (no case enforcement historically) as it does in AWS (case-sensitive since birth).

A team running on one cloud can build a dashboard directly on the native export. A team running on three clouds ends up with a semantic integration problem that looks simple from ten feet away and takes six months to get right. GrandLine does this integration once, normalises it, and pins the results to the architecture graph so cost is a property of a resource, not a row in a spreadsheet.


2. How the three clouds expose cost

2.1 AWS. Cost and Usage Report (CUR 2.0)

2.2 Azure. Microsoft Cost Management + Billing exports

2.3 GCP. Billing BigQuery export

2.4 Side-by-side

Property AWS CUR 2.0 Azure Cost Management GCP Billing BQ
Native destinationS3 (Parquet)Storage Account blob container (CSV)BigQuery (streaming table)
GranularityLine-item per hourMeter per resource per daySKU per project (+ resource for some services)
Tags surfacedResource tags + Cost allocation tagsResource tags + inheritance configProject labels + some resource labels
Amortised commitmentsYes (CUR 2.0)Yes (amortised export)Yes (credit rows)
Reconciliation24 hours24–72 hoursup to 3 days
Tie-back to inventoryARNARM resource idresource.name (partial)

The upshot: AWS has the cleanest per-resource picture, Azure the most uniform tag story, and GCP the freshest data but the most partial resource coverage. You cannot write one query that works on all three; you write one abstraction that does.


3. How GrandLine normalises it

GrandLine ingests all three and writes rows to a single table. CostDaily in the primary schema. with the columns:

(tenantId, accountId, resourceId?, service, date, costUsd, usageQty?, usageUnit?)

Key normalisation decisions:

  1. Currency is USD. We convert Azure and GCP rows using the cloud's own daily FX (from the native export) so we match the customer's invoice. Non-USD primary currencies are supported on Enterprise. the dashboard then shows both the USD normalised value and the customer's native currency.
  2. Service names are canonicalised. AWS AmazonEC2 becomes ec2, Azure Virtual Machines becomes compute, GCP Compute Engine becomes compute. The full provider-native service name is preserved in metadata for drill-down.
  3. Resource linkage is best-effort. When the native row carries a resource identifier, we join to Resource.nativeId. When it does not (AWS "data transfer" without ARN, GCP SKU with no resource export), we attribute to a synthetic resource per (accountId, service) so the charge is still visible but never falsely pinned to a specific VM.
  4. Amortised view by default. We default the dashboard to the amortised commitment view because that is what CFOs ask for.
  5. Idempotent ingestion. The daily ingestion job is idempotent on (tenantId, accountId, resourceId, service, date). reruns do not double-count.

Implementation: packages/connectors-/src/cost/ for the provider readers, packages/finops-core/src/normalise.ts for the canonicalisation, apps/worker/src/cost-ingest.ts for the scheduled job.


4. Tagging strategy. the part your finance team cares about

A good tag strategy is worth more than any cost-optimisation feature. We push our customers (politely) toward four mandatory tag keys across all three clouds:

Why these four and not eight: a tag policy with more than four mandatory keys is not followed. We have seen this repeatedly. Four is the ceiling for consistent adoption.

4.1 Enforcement

4.2 What GrandLine does with them


5. Aligning cost to architecture

The architecture graph is the frame every cost number hangs on.

This lets architects and FinOps practitioners ask. and get answers to. questions that native consoles handle poorly:


6. Recommendations that make sense

The quickest way to lose FinOps credibility is to produce recommendations that are wrong. GrandLine ships a small, conservative set.

6.1 Rightsizing

6.2 Commitment insight (NOT automatic purchase)

6.3 Idle / orphaned resources

6.4 What we do NOT claim


8. Exports, reports, and integrations


9. What to read next


10. Contact

FinOps questions and feature requests: [email protected]. If you are already a customer, file the ticket. FinOps feedback is one of the easiest ways to influence the roadmap because the changes are usually small and contained.