The Answer Everyone Wants and Nobody Is Giving Honestly
Which cloud is cheapest? AWS, Azure, or GCP?
Every article you will find on this topic gives you the same unsatisfying answer: "it depends on your workload." That is technically true and practically useless. So let me give you something more useful.
For most general-purpose compute, AWS Graviton and GCP Tau T2D are neck and neck and both beat comparable Azure instances by 15 to 25%. For Windows workloads, Azure wins by a landslide if you have existing licenses, sometimes by 80%. For managed Kubernetes, Azure AKS is free while AWS EKS costs $73 per month per cluster. For large-scale analytics, GCP BigQuery is cheaper than almost every alternative. For serverless at low volume, all three are close. At high volume, containers beat all three.
This is the data. We will go category by category, show you the actual numbers, and tell you the pricing tricks each provider hides in their documentation that their sales teams will never bring up.
How to Read This Comparison
Pricing changes. These numbers reflect 2026 on-demand rates for the US East region on each provider. On-demand is the worst-case price. Commitments (Reserved Instances on AWS, Committed Use Discounts on GCP, Reserved VM Instances on Azure) reduce costs by 30 to 60% and shift the comparison differently. We will call out where commitments change the winner.
For multi-cloud environments where you are genuinely choosing where to place workloads, this guide is your decision framework. For single-cloud teams wondering if the other side is greener, this is your reality check.
Compute Cost Comparison: General Purpose
The most common instance comparison: 4 vCPU, 16GB RAM, general purpose, Linux.
| Provider | Instance | On-Demand/hr | Monthly (730 hrs) | 1-Year Commitment |
|---|---|---|---|---|
| AWS | m7g.xlarge (Graviton) | $0.1632 | $119 | $75 (37% savings) |
| AWS | m7i.xlarge (Intel) | $0.2016 | $147 | $92 (37% savings) |
| GCP | e2-standard-4 | $0.134 | $98 | $68 (30% CUD) |
| GCP | t2d-standard-4 (AMD) | $0.1360 | $99 | $69 (30% CUD) |
| Azure | D4s v5 | $0.192 | $140 | $88 (37% savings) |
| Azure | D4ps v5 (ARM) | $0.154 | $112 | $70 (37% savings) |
What the numbers mean: GCP is cheapest on-demand for general purpose. AWS Graviton and GCP are close on committed pricing. Azure ARM instances (D-series ps) are competitive when committed but expensive on-demand.
The hidden advantage for GCP: Sustained Use Discounts apply automatically to any instance that runs more than 25% of the month. By the time an instance has been running the full month, you have already received up to a 30% discount with zero commitment and zero paperwork. This changes the on-demand comparison significantly for stable workloads.
The GCP math: That e2-standard-4 at $0.134/hr on-demand, running all month, effectively costs $68 due to automatic sustained use discounts. The same calculation makes GCP on-demand pricing for always-on workloads nearly match its 1-year committed price.
Compute Cost Comparison: Windows
This is where the comparison flips completely, and Azure wins by a margin that shocks most engineers.
Running Windows Server on a comparable 4 vCPU, 16GB VM:
| Provider | Instance | Linux On-Demand/hr | Windows On-Demand/hr | Windows Premium |
|---|---|---|---|---|
| AWS | m7i.xlarge | $0.2016 | $0.4992 | +148% |
| GCP | n2-standard-4 | $0.1900 | $0.4428 | +133% |
| Azure | D4s v5 | $0.192 | $0.388 | +102% |
| Azure + Hybrid Benefit | D4s v5 | $0.192 | $0.192 | +0% |
Azure Hybrid Benefit lets you bring your existing Windows Server licenses from on-premises to Azure, paying only for the underlying compute. If your organization already owns Windows Server licenses (most enterprise companies do), Azure charges you the Linux price for Windows compute.
That is a $0.196/hr savings per instance, or $143/month per 4-vCPU VM. Scale this across a fleet of 50 Windows servers and you are looking at $7,150/month saved compared to AWS or GCP. That is $85,800/year from this one licensing trick.
If you run Windows workloads and are not on Azure, or are on Azure but have not enabled Hybrid Benefit, this is likely the single highest-ROI optimization available to you.
Kubernetes (Managed) Cost Comparison
This is the comparison that surprises nearly everyone who has not specifically researched it.
Control plane cost per cluster per month:
| Provider | Service | Control Plane Fee | Notes |
|---|---|---|---|
| AWS | EKS | $73/month | $0.10/hr, mandatory |
| GCP | GKE Standard | $73/month | $0.10/hr |
| GCP | GKE Autopilot | $0 | Free control plane, billed per pod |
| Azure | AKS | $0 | Control plane is always free |
Azure AKS charges nothing for the control plane. You pay only for the VM nodes you run. This is a permanent, structural cost advantage over AWS EKS.
For a company running 5 Kubernetes clusters (dev, staging, QA, production, DR), the difference is:
- AWS EKS: $73 x 5 = $365/month in cluster fees ($4,380/year)
- Azure AKS: $0 in cluster fees
That $4,380/year buys real infrastructure. On AWS, it pays for nothing.
GKE Autopilot goes further: no control plane fee AND no charge for unscheduled capacity. You pay only for the pod-level CPU and memory requests that are actually scheduled and running. This makes Autopilot potentially the cheapest option for clusters that are not consistently full.
For clusters that run at high utilization (over 70% of node capacity used most of the time), GKE Standard or EKS with right-sized nodes is typically cheaper because you are paying for raw node capacity. For clusters that have variable utilization, GKE Autopilot or AKS (zero control plane) are the winners.
Our Kubernetes cost optimization guide covers how to calculate the optimal mode for your specific workload patterns.
Storage Cost Comparison: Object Storage
Storing and serving data at scale. These are the base storage costs, but the real cost story is in egress.
| Provider | Service | Storage (per GB/mo) | GET requests (per 10K) | Egress to internet (per GB) |
|---|---|---|---|---|
| AWS | S3 Standard | $0.023 | $0.004 | $0.09 |
| GCP | Cloud Storage Standard | $0.020 | $0.004 | $0.12 |
| Azure | Blob Storage Hot | $0.018 | $0.004 | $0.087 |
| Cloudflare R2 | R2 | $0.015 | $0.36 | $0.00 |
| Backblaze B2 | B2 | $0.006 | $0.004 | $0.01 |
For storage-only workloads where you primarily write and read within the same cloud, Azure is cheapest. For high-egress workloads, Cloudflare R2's zero egress fee changes the calculation entirely.
The real calculation for high-traffic storage: If you store 10TB and serve 50TB of data per month to the internet:
- AWS S3: $230 (storage) + $4,500 (egress) = $4,730/month
- Azure Blob: $184 (storage) + $4,350 (egress) = $4,534/month
- GCP Cloud Storage: $200 (storage) + $6,000 (egress) = $6,200/month
- Cloudflare R2: $150 (storage) + $0 (egress) = $150/month
At high egress volumes, the provider you choose for compute becomes almost irrelevant for object storage. R2 wins by a factor of 30. Our full cloud storage pricing comparison goes deeper on this across different usage patterns.
One detail teams miss about GCP: GCP offers free egress to Cloudflare CDN and other selected CDN partners. If you serve your GCP-stored data through Cloudflare as the CDN layer, the GCP egress fees disappear. This makes GCP + Cloudflare CDN competitive with R2 for many content delivery use cases.
Database Cost Comparison: Managed PostgreSQL
PostgreSQL is the most common managed database workload. Here is what it actually costs across providers for a common production configuration: 2 vCPU, 8GB RAM, 100GB storage, single availability zone.
| Provider | Service | Instance | On-Demand/mo | 1-Year Reserved |
|---|---|---|---|---|
| AWS | RDS for PostgreSQL | db.t4g.large | $105 | $66 |
| GCP | Cloud SQL for PostgreSQL | db-n1-standard-2 | $103 | $72 (CUD) |
| Azure | Azure Database for PostgreSQL | Standard_D2s_v3 | $137 | $87 |
| Azure | Flexible Server Burstable | Standard_B2ms | $46 | N/A |
The Azure Flexible Server Burstable tier is something most teams never find because Azure does not lead with it. It uses burstable CPU instances (like the B-series) that are significantly cheaper for workloads that do not need constant CPU. A development or lightly-loaded staging database on Standard_B2ms costs $46/month versus $105 on AWS RDS.
GCP has its own equivalent: db-g1-small (shared core, 1.7GB RAM) at $13/month and db-f1-micro (shared core, 600MB RAM) at $9/month. These are not suitable for production but are genuinely excellent for development databases, each developer's personal environment, or integration test databases.
For production databases requiring Multi-AZ (two regions, failover), pricing roughly doubles. At that scale, consider Aurora Serverless v2 on AWS, which scales compute down to 0.5 ACUs when idle and can significantly undercut a fixed RDS instance for databases with variable traffic patterns.
Serverless Function Cost Comparison
For infrequently called code, serverless functions are the clear winner over any container or VM. Here is the comparison for a 512MB, 100ms average function at various invocation volumes.
| Monthly Invocations | AWS Lambda | Azure Functions | GCP Cloud Functions |
|---|---|---|---|
| 1 million | $0.00 (free tier) | $0.00 (free tier) | $0.00 (free tier) |
| 10 million | $9.20 | $9.00 | $9.00 |
| 50 million | $46 | $45 | $45 |
| 100 million | $92 | $90 | $90 |
All three providers are nearly identical for pure serverless function pricing. The meaningful differences show up in adjacent factors:
- Free tier: AWS Lambda gives 1 million free requests per month permanently. Azure and GCP match this.
- Maximum execution time: Lambda supports up to 15 minutes, Azure Functions up to 10 minutes, GCP Cloud Functions (2nd gen) up to 60 minutes
- Container-based serverless: GCP Cloud Run is priced per request during actual execution with no minimum billing, and it scales to zero between requests. This makes Cloud Run cheaper than AWS Fargate for bursty workloads that have idle periods, because Fargate charges by the task-second regardless of whether requests are flowing.
The threshold where serverless loses: At 200 million invocations/month, a dedicated container running on a small VM handles the load at roughly $12 to $15/month while Lambda costs $180+. For any high-throughput endpoint, the serverless pricing model is not designed for your use case. The detailed breakdown of the serverless vs container decision is in our guide to cloud cost optimization for modern infrastructure.
Networking and Egress: The Cost Nobody Shows You Upfront
Here is what all three providers have in common: they charge aggressively for data leaving their network, and they make the billing opaque by design.
| Traffic Type | AWS | Azure | GCP |
|---|---|---|---|
| Egress to internet (per GB) | $0.09 | $0.087 | $0.12 |
| Cross-AZ (same region) | $0.01/GB each way | $0.01/GB each way | $0.01/GB each way |
| Cross-region (same cloud) | $0.02/GB | $0.02/GB | $0.01/GB (some pairs) |
| To CDN partners | Standard egress | Standard egress | Free to Cloudflare, Fastly |
| Ingress | Free | Free | Free |
Two non-obvious facts that affect your bill:
AWS cross-AZ traffic stacks: In a microservices architecture with services spread across availability zones, you pay $0.01/GB each way, or $0.02/GB for any data that crosses an AZ boundary. This is per-hop. If a request travels through 4 services across 2 AZs, you pay $0.02/GB x 4 service-to-service calls. In a busy microservices environment, cross-AZ traffic can easily cost $2,000 to $8,000/month in hidden charges, billed under "EC2-Other" where nobody looks.
GCP Standard Tier network pricing: GCP's default routing uses Premium Tier, which keeps traffic on Google's private backbone. Standard Tier routes through public internet and costs 30 to 40% less for egress. For batch jobs, analytics pipelines, and cross-cloud data flows that are not latency-sensitive, switching to Standard Tier at the VM or project level is free money. Almost nobody knows this option exists.
For teams running multi-cloud architectures, our guide on multi-cloud cost optimization strategies covers how to architect around these egress charges specifically.
Analytics and Data Warehousing
If you run large-scale data processing and analytics, GCP has a structural advantage most teams discover too late.
BigQuery vs Athena vs Synapse:
| Service | On-Demand Query Cost | Storage | Notes |
|---|---|---|---|
| GCP BigQuery | $5/TB scanned | $0.02/GB/mo | Scales to zero, no cluster management |
| AWS Athena | $5/TB scanned | S3 at $0.023/GB/mo | Similar query pricing |
| Azure Synapse | $5/TB scanned | $0.022/GB/mo | But Dedicated SQL Pool has min spend |
| AWS Redshift | $0.25/node-hr minimum | Included | Even smallest cluster = $180/month |
| GCP BigQuery Editions | $0.04-0.08/slot-hr | $0.02/GB/mo | For large committed workloads |
On pure query-based analytics, BigQuery, Athena, and Synapse Serverless are priced identically at $5/TB scanned. The practical advantages of BigQuery are:
- No minimum spend: if you run zero queries, you pay nothing for compute
- Columnar storage is natively compressed, so your "effective" TB scanned is often 40 to 70% lower than raw data size
- Streaming ingestion from GCP services is free up to 1TB/month
- BigQuery ML lets you train models directly in SQL without spinning up separate compute
Where BigQuery loses: if you are on AWS and your data already lives in S3, moving it to BigQuery for analytics incurs egress costs. Athena querying data in S3 incurs no egress. For AWS-native analytics stacks, Athena + S3 + Glue is typically cheaper than BigQuery because there is no data migration and no egress tax.
The Workload Placement Decision Matrix
Based on all the comparisons above, here is the honest placement guide for choosing where to run each workload type:
| Workload Type | Best Provider | Why | When to Override |
|---|---|---|---|
| General compute (Linux) | GCP or AWS Graviton | Cheapest on-demand + automatic SUDs on GCP | If team expertise strongly favors one provider |
| Windows compute | Azure | Hybrid Benefit eliminates the Windows premium | If no existing Windows licenses |
| Managed Kubernetes | Azure AKS or GKE Autopilot | Zero control plane fee | EKS if team is AWS-native and already committed |
| Object storage (high egress) | Cloudflare R2 or Backblaze B2 | Zero or near-zero egress | If deep integration with a specific provider is needed |
| Object storage (low egress) | Azure Blob | Cheapest storage rate | Negligible difference at low scale |
| Analytics / data warehouse | GCP BigQuery | No minimum, per-query, built-in compression | AWS Athena if data already lives in S3 |
| Development databases | GCP or Azure | Shared-core instances as low as $9/month | Not for production |
| Production PostgreSQL | AWS RDS or Cloud SQL | Similar pricing, choose by primary cloud | Azure if already heavily committed to Azure |
| Serverless functions | Any (pricing is equivalent) | Choose by ecosystem fit | Cloud Run if bursty and container-based |
| AI/ML training | AWS or GCP | Deepest GPU inventory, best spot options | Azure for teams using Azure OpenAI or M365 |
The Three Discount Strategies That Change Everything
After all the base pricing comparisons, the single biggest factor in your actual bill is how you use commitment discounts. Each provider has a different approach.
AWS Savings Plans: Commit to a $/hour spend, get 30 to 40% off. The Compute Savings Plan is the most flexible (applies across instance types, sizes, regions, and operating systems). The risk: you commit to a dollar amount, and if you over-commit, you pay for unused discount. Right-size before committing.
GCP Committed Use Discounts + Sustained Use Discounts: CUDs give you 37 to 55% off for committing to specific vCPU and memory amounts. SUDs give you automatic discounts of up to 30% for instances running most of the month with zero commitment. For variable workloads, SUDs often outperform CUDs because there is no lock-in risk. For stable, predictable workloads, CUDs give deeper discounts than SUDs.
Azure Reserved VM Instances: Up to 37% off for 1-year, up to 66% off for 3-year commitments. The key advantage: Azure reservations are exchangeable within the same VM family, so if you switch from D4s v5 to D8s v5, you can apply the reservation to the new instance. This makes Azure reservations less risky than comparable AWS EC2 Instance Savings Plans.
For multi-cloud teams trying to optimize commitment strategy across all three providers, our cloud financial management guide covers how to build the right commitment split.
Support Plan Costs: The Comparison Nobody Does
Most cost comparisons ignore support plans. But if you run production infrastructure, a business-tier support plan is not optional. Here is what it costs:
| Provider | Business Support | Enterprise Support | Notes |
|---|---|---|---|
| AWS | Greater of $100 or 10% of monthly bill | $15,000/month minimum | At $50K/month spend = $5,000/month for Business |
| GCP | $150/month flat + 3-9% of usage | $250/month + % of usage | Significantly cheaper at high spend |
| Azure | $300/month flat for Standard | $1,000/month for Professional Direct | Microsoft also bundles support with EA agreements |
At $50,000/month cloud spend:
- AWS Business Support: $5,000/month
- GCP Enhanced Support: $150 + (50,000 x 0.03) = $1,650/month
- Azure Standard Support: $300/month flat
Support costs are not optimization targets, but they are real costs that belong in your total cost of ownership calculation. At high spend levels, AWS support becomes a meaningful expense that GCP and Azure do not match.
Frequently Asked Questions
Is AWS cheaper than GCP or Azure?
It depends entirely on the workload. For Windows compute, Azure wins by 40 to 80% with Hybrid Benefit. For general Linux compute with automatic discounts, GCP's Sustained Use Discounts make it competitive with or cheaper than AWS for always-on workloads. For Kubernetes, Azure AKS is free while AWS EKS charges $73/month per cluster. For high-egress storage, neither AWS, Azure, nor GCP is cheapest: Cloudflare R2 at zero egress is. AWS has the broadest service catalog and deepest ecosystem, which has indirect cost value for teams that benefit from it.
Which cloud is cheapest for Kubernetes?
Azure AKS has no control plane fee, making it the cheapest managed Kubernetes option when you account for all costs. GKE Autopilot is also free for the control plane and adds the benefit of per-pod billing for variable workloads. AWS EKS charges $73/month per cluster regardless of size. For a company running 5 clusters, the control plane cost difference between AKS and EKS is $4,380/year.
What is GCP Sustained Use Discount and how does it work?
GCP Sustained Use Discounts (SUDs) automatically reduce the cost of Compute Engine instances that run for significant portions of the billing month. The discount starts when an instance has been running 25% of the month and increases incrementally, reaching up to 30% off for a full month of runtime. No opt-in, no commitment, no paperwork required. This means GCP's effective on-demand price for always-on workloads is 20 to 30% lower than the advertised rate, making direct on-demand comparisons to AWS and Azure misleading when SUDs apply.
Is Azure Hybrid Benefit worth it for Windows workloads?
Yes, if you have existing Windows Server licenses from on-premises with active Software Assurance. Azure Hybrid Benefit lets you bring those licenses to Azure and pay only the Linux VM rate for Windows compute. For Windows Server Standard licenses, Hybrid Benefit typically saves 40 to 68% versus AWS or GCP Windows pricing. For Windows Server Datacenter licenses, the savings can reach 80%. This is one of the highest single-move ROI opportunities in cloud cost optimization for enterprise organizations.
Should I use GCP BigQuery or AWS Athena?
If your data already lives in AWS S3, use Athena. Moving data from S3 to BigQuery incurs egress costs that offset or eliminate the savings. If you are building a new data warehouse or your data does not have a strong home provider, BigQuery has practical advantages: automatic compression that reduces scanned bytes by 40 to 70%, no cluster management, and native scaling to zero. For mixed workloads, BigQuery's ML capabilities can also eliminate the need for separate ML infrastructure. For detailed storage comparisons, see our cloud storage pricing guide.
How does GCP Standard Tier network pricing work?
GCP defaults to Premium Tier network routing, which keeps traffic on Google's private backbone for better performance. Standard Tier routes egress traffic over the public internet and costs 30 to 40% less in most regions. You configure this per instance or per project. For workloads where latency is not critical (batch transfers, data pipelines, cross-cloud egress, backup flows), Standard Tier delivers the same functional result at meaningfully lower cost. This setting is not surfaced prominently in the GCP console and is missed by the majority of GCP users.
Which cloud has the cheapest development database?
GCP Cloud SQL's db-f1-micro (shared vCPU, 614MB RAM) costs approximately $9/month, making it the cheapest managed PostgreSQL option for individual developer databases. Azure's Flexible Server Burstable Standard_B1ms costs about $15/month and provides more reliable performance with its burstable CPU. AWS RDS db.t4g.micro costs approximately $16/month. For teams with many developers each needing their own database environment, the GCP option saves roughly $84/developer/year compared to AWS.
Picking the Right Cloud Is Only Half the Battle
The cloud comparison data is useful, but here is the truth: most teams are not overpaying because they are on the wrong cloud. They are overpaying because they are on the right cloud but running it the wrong way.
The Windows team that should be on Azure but is not enabling Hybrid Benefit is on the right cloud, losing money anyway. The team running 10 Kubernetes clusters on AWS paying $730/month in control plane fees for infrastructure that would be free on AKS. The team storing high-egress data in S3 at $4,500/month when R2 would cost $150.
The savings are in knowing the specific tricks each provider offers and applying them before your bill arrives, not after.
To find out exactly how much you are overpaying across your current cloud setup, take our free Cloud Waste and Risk Scorecard. It identifies provider-specific optimization opportunities in under five minutes.
For help executing a workload-by-workload cost analysis across your AWS, Azure, or GCP environment, our Cloud Cost Optimization and FinOps team does this every day. And if the analysis suggests a migration is worth it, our Cloud Migration service handles the transition.
Related reading:
- Multi-Cloud Cost Optimization: 7 Strategies to Stop Paying Double Across AWS, Azure, and GCP
- Multi-Cloud FinOps in 2026: How to Manage Costs Across AWS, Azure, and GCP
- Kubernetes Cost Optimization: The 2026 Guide to Cutting Your K8s Bill
- Cloud Cost Optimization for Modern Infrastructure: Containers, Kubernetes, and Serverless
- Cloud Financial Management in 2026: 7 FinOps Strategies That Cut Waste by 40%
- Cloud Storage Pricing Comparison 2026: S3 vs Azure Blob vs GCP vs R2
External resources: