google_spanner_instance cost estimation
Globally-consistent, horizontally-scalable SQL database. $0.90/node-hour ($657/month) for regional, $3/node-hour for multi-region. Storage $0.30/GB-month regional, $0.50/GB-month multi-region. Processing Units offer 1/1000th node granularity.
Cloud Spanner is Google's globally-consistent SQL database used for Ads, Play, and other large Google services. The google_spanner_instance resource creates the instance; databases and IAM are separate. Pricing has nodes (or processing units) and storage components.
Node pricing: - Regional (single region): $0.90/node-hour ($657/month per node) - Multi-region (e.g., nam-eur-asia1): $3.00/node-hour ($2,190/month per node) - Dual-region (e.g., nam3): $2.00/node-hour ($1,460/month per node)
Processing Units (PU) offer finer granularity. 1 node = 1000 PU. Minimum is 100 PU ($65.70/month regional). Useful for small workloads that don't justify a full node.
Storage pricing: - Regional: $0.30/GB-month - Multi-region: $0.50/GB-month
Backup pricing: $0.10/GB-month for backups, free until they exceed the database size.
When Spanner wins: - Global apps requiring cross-region strong consistency - Workloads needing relational SQL plus horizontal scalability - Migrations off sharded MySQL/PostgreSQL where consistency matters - Financial/regulated workloads needing ACID across regions
Spanner pricing reality: even the minimum production setup (1 node, regional) is $657/month before storage. Workloads that fit DynamoDB ($1.25/M writes) or PostgreSQL on Cloud SQL ($300/month) usually pay far less. Spanner's price reflects unique capabilities, not commodity database needs.
Recent additions: Spanner Free Tier (5 GB storage, 100 PU) and Spanner Granular Instance Configurations (smaller instances for dev/test).
c3x estimates Spanner based on num_nodes or processing_units, config (region vs multi-region), and storage allocated.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "google_spanner_instance" "main" {
name = "prod-spanner"
config = "regional-us-central1"
display_name = "Production Spanner"
processing_units = 1000 # 1 node equivalent
labels = {
env = "production"
}
}
resource "google_spanner_database" "app" {
instance = google_spanner_instance.main.name
name = "app-db"
ddl = [
"CREATE TABLE users (id INT64, email STRING(255)) PRIMARY KEY (id)",
]
}Pricing dimensions
What you actually pay for when you provision google_spanner_instance.
| Dimension | Unit | What's being charged |
|---|---|---|
| Regional node hours | per node-hour | Spanner nodes in a single region. 1000 PU = 1 node. $0.90/node-hour ($657/month) |
| Multi-region node hours | per node-hour | Multi-region configurations (e.g., nam-eur-asia1) spanning multiple regions with strong consistency. $3.00/node-hour ($2,190/month) |
| Regional storage | per GB-month | Storage in a regional instance. $0.30/GB-month |
| Multi-region storage | per GB-month | Storage in a multi-region instance, replicated across regions. $0.50/GB-month |
| Backup storage | per GB-month | Backup storage above the database size. Backups within DB size are free. $0.10/GB-month |
Optimization tips
Common ways to reduce google_spanner_instance cost without changing the workload.
Use Processing Units for small workloads
Up to 90% on small workloadsBelow 1 node of capacity, use PU (100-900 PU range). Minimum 100 PU at $65.70/month is 10x cheaper than the previous 1-node minimum. Right for low-volume production or staging.
Avoid multi-region unless required
70% on regional vs multi-regionMulti-region is 3.3x more expensive than regional. Only use when business genuinely requires cross-region strong consistency (financial, regulated, global SaaS). For most apps, regional + cross-region read replicas (cheaper) suffices.
Use committed use discounts
20-40% on commitment1-year commits save 20%; 3-year save 40%. For steady production Spanner, commits are essential. Spanner CUDs cover both nodes and processing units.
Right-size with autoscaler
20-40% on variable workloadsSpanner autoscaler (GA in 2024) adjusts capacity based on CPU and storage. For variable workloads (daily peaks), autoscaling saves 20-40% vs provisioning for peak.
Consider alternatives for small databases
80-90% on small workloadsIf you have under 10 GB of data and modest QPS, Cloud SQL PostgreSQL or Firestore is 5-10x cheaper than Spanner. Only choose Spanner when its unique features (horizontal scale, multi-region consistency) are required.
FAQ
Is Spanner overkill for a 10 GB database?
Almost always yes. Spanner's minimum 100 PU at $65/month is fine, but you're paying for capabilities (horizontal scale, multi-region consistency) you don't need at 10 GB. Cloud SQL PostgreSQL or AlloyDB is cheaper. Reserve Spanner for workloads with genuine horizontal scaling needs.
Can I run Spanner dev/test cheaper than production?
Yes. Use the smallest configuration (100 PU regional, ~$65/month). The Spanner Emulator runs locally for free during development. For CI tests, spin up minimum-PU instances and delete after test runs.
How does Spanner pricing compare to AlloyDB?
AlloyDB (Google's managed PostgreSQL) is much cheaper for relational workloads under a single region. AlloyDB starts around $300/month vs Spanner's $657/month. Choose Spanner only when you need multi-region consistency or scale beyond AlloyDB's limits.
Does multi-region really justify the 3x premium?
For globally-distributed apps needing strong consistency, yes. Building this manually (sharding + 2PC + custom protocols) is hugely expensive in engineering time. For most apps, multi-region async replication (which is cheaper) is sufficient — eventually-consistent reads from regional copies.
Related resources
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including google_spanner_instance.