Deep dive
The landscape
| Tier | Providers | Strength | Weakness |
| Hyperscaler | AWS, GCP, Azure | 200+ managed services, 30+ regions, IAM, compliance (SOC 2, HIPAA, FedRAMP) | Price of compute and egress, complexity of the bill |
| Commodity cloud | Hetzner, OVHcloud, Scaleway, DigitalOcean, Vultr, Akamai (Linode) | 3-10x cheaper compute, bundled traffic | Few managed services, fewer regions, smaller quotas |
| Bare metal | Hetzner dedicated, OVH, Latitude.sh, Equinix-style colocation | Lowest cost per core and per TB, full NVMe speed | You own hardware failures, slower provisioning |
| Edge platform | Cloudflare, Fastly, Bunny, Vercel/Netlify on top | Global PoPs, cheap or free bandwidth, Workers/edge functions | Limits on CPU time, memory, runtime APIs |
| GPU neocloud | CoreWeave, Lambda, RunPod, Vast.ai, Nebius, Crusoe | GPUs at 2-4x below hyperscaler on-demand | Capacity varies, thinner networking/storage services |
Price orders of magnitude (2026-ish, on demand, check the pricing page)
| Item | AWS / GCP / Azure | Hetzner / OVH | Cloudflare |
| 2 vCPU / 8 GB VM | order of $60-80/month | order of €8-20/month | n/a |
| 16-core dedicated server, 64-128 GB, 2x NVMe | order of $500-900/month as VM | order of €60-150/month | n/a |
| Object storage | $0.020-0.026/GB-month | order of €5-6/TB-month | R2 $0.015/GB-month |
| Internet egress | $0.08-0.12/GB (first 100 GB/month free on AWS) | bundled TBs, then about €1/TB | $0 (R2, CDN) |
| Cross-zone traffic | $0.01/GB each way (AWS, Azure similar) | free inside a location | n/a |
| Managed Postgres, 2 vCPU / 8 GB, HA | order of $250-350/month | self-run, or small managed offers | D1 (SQLite) only |
| H100 GPU-hour | order of $4-8 | rare | n/a |
Rule of thumb: 1 TB served from a hyperscaler costs about $90; the same terabyte from a Hetzner server is inside the bundle.
Decision table
| Situation | Choice | Why |
| Startup, small team, needs managed DB, queues, auth fast | One hyperscaler, one region | Managed services save engineer time, which costs more than the premium at small scale |
| Steady load, > ~$5k/month compute, team can run Linux | Hetzner/OVH VMs or bare metal | 3-10x lower, predictable bill |
| Serves many TB/month (video, downloads, game patches) | Cloudflare/Bunny CDN in front, R2 or bare metal origin | Egress at $0.09/GB dominates everything else |
| Enterprise customers ask for compliance attestations, VPC peering, private links | Hyperscaler (where the customer is) | Contracts and procurement, not tech |
| GPU training or batch inference | Neocloud or spot GPUs | 2-4x cheaper per GPU-hour |
| Latency-critical global API (< 50 ms everywhere) | Edge platform + regional origins | PoPs within ~20 ms of most users |
| Data residency in the EU | EU region of any provider; EU providers ease legal review | GDPR and Schrems II reviews |
| Spiky load, idle most of the day | Serverless on a hyperscaler or Cloudflare Workers | Pay per request, scale to zero |
Code
Price a workload before choosing; egress and storage usually decide it.
/// Rough monthly cost model; plug in the current pricing-page numbers.
fn monthly(vms: f64, vm_price: f64, egress_tb: f64, egress_per_gb: f64,
included_tb: f64, storage_tb: f64, storage_per_tb: f64) -> f64 {
let egress = (egress_tb - included_tb).max(0.0) * 1000.0 * egress_per_gb;
vms * vm_price + egress + storage_tb * storage_per_tb
}
fn main() {
// 10 VMs, 50 TB/month served, 20 TB stored (order-of 2026 prices)
let hyperscaler = monthly(10.0, 140.0, 50.0, 0.085, 0.0, 20.0, 23.0);
let hetzner = monthly(10.0, 30.0, 50.0, 0.001, 10.0 * 20.0, 20.0, 6.0); // 20 TB included per server
println!("hyperscaler ~${hyperscaler:.0}/month, hetzner ~${hetzner:.0}/month");
// hyperscaler ~$6110/month, hetzner ~$420/month
}
Efficiency
- Cost: the meters are VM-hours, GB stored and GB sent to the internet; for bandwidth-heavy products egress dominates. Hetzner EU cloud servers include 20 TB of traffic per month (Hetzner traffic docs) and R2 has no egress bandwidth charge (R2 pricing), both as of 2026-10. Other prices on this page are order of. Bound: egress price, not CPU.
- Levers:
- serve downloads from zero-egress storage or a bundled-traffic server — removes the per-GB line (R2 pricing; Hetzner traffic docs) — bandwidth-heavy products
- commitments on the steady floor — up to 72 % off covered compute (AWS Savings Plans User Guide) — steady base on a hyperscaler
- spot for interruptible work — up to 90 % off (AWS Spot Instances page) — batch, CI, rendering
- keep chatty traffic in one region and zone — cross-region and cross-cloud transfer is billed as egress (order of) — replicas, pipelines
- commodity bare metal for steady cores — 3-10x lower per core (order of, price lists in Sources) — teams that can run Linux
- Naive → standard → state of the art:
- everything on one hyperscaler at on-demand list price · baseline
- commitments on the floor, spot for batch · up to 72 % / 90 % off the covered part
- hyperscaler control plane, commodity compute, CDN or zero-egress storage for the heavy bytes · egress line near zero
Implementation notes
- Hybrid is normal: hyperscaler for managed control-plane pieces (auth, DNS, small DB), commodity servers for heavy compute and bandwidth. Put a VPN (WireGuard) or the provider's private network between them.
- Pick the region next to your users and your data; cross-region and cross-cloud transfer is billed as egress.
- Hyperscaler "free tier" and startup credits hide the real run-rate; model the post-credit bill on day one.
- Quotas: new accounts on every provider start with low vCPU/GPU limits. Request increases before launch.
Pitfalls
- NAT gateways: order of $0.045/GB processed on AWS on top of egress; a chatty service pulling images through NAT can cost more than its VMs.
- Public IPv4 addresses are billed on AWS (about $3.6/month each since 2024).
- Cross-AZ replication traffic of a database or Kafka cluster is billed both ways and is often the largest line item.
- Commodity providers can lock accounts on abuse reports or failed KYC; keep backups and DNS outside the provider.
- Comparing list prices only: hyperscaler commitments and spot change the answer for steady fleets.
Implementations
| name | lang | repo | install | verdict | licence | health | as_of | notes |
| Infracost | Go | infracost/infracost | brew install infracost | — | — | — | — | cost estimate from Terraform plans |
| OpenCost | Go | opencost/opencost | n/a (Kubernetes install via Helm, see docs) | — | — | — | — | cost allocation for Kubernetes |
| Hetzner Cloud CLI (hcloud) | Go | hetznercloud/cli | brew install hcloud | — | — | — | — | create and manage Hetzner servers |
| AWS CLI | Python | aws/aws-cli | n/a (installer per AWS docs) | — | — | — | — | cost and usage queries from the shell |
Sources
- AWS, Amazon EC2 On-Demand Pricing and EC2 Data Transfer pricing (web pages). pricing
- Hetzner Online, Cloud and Dedicated Root Server price lists (web pages). cloud · dedicated · traffic
- Cloudflare, R2 pricing (web page). pricing
- Sarah Wang and Martin Casado, The Cost of Cloud, a Trillion Dollar Paradox, Andreessen Horowitz, 2021. post