DEV Community

Cover image for AWS vs Azure vs GCP Pricing in 2026: Compute, Storage, and Network Compared
Muskan
Muskan

Posted on

AWS vs Azure vs GCP Pricing in 2026: Compute, Storage, and Network Compared

AWS vs Azure vs GCP Pricing in 2026: Compute, Storage, and Network Compared

The on-demand price for equivalent compute is almost identical across AWS, Azure, and GCP. A 4-vCPU, 16GB RAM instance costs roughly $0.19 per hour on any of the three in US regions.

That's by design. Cloud providers track each other's list prices and match on headline compute. The actual price differences are in egress charges, Kubernetes control plane fees, block storage rates, and how flexible each provider's discounting model is.

This post compares all five categories with current pricing so you know where the gaps are before they show up on your invoice.

The Part That Is Identical (And the Part That Isn't)

Equivalent 4-vCPU, 16GB RAM instances across providers (US East regions):

Instance On-demand/hr 1-year committed/hr 3-year committed/hr
AWS m5.xlarge $0.192 $0.121 (37% off) $0.083 (57% off)
Azure D4s_v5 $0.192 $0.115 (40% off) $0.077 (60% off)
GCP n2-standard-4 $0.191 $0.121 (37% off) $0.077 (60% off)

On-demand: a dead heat. At 1-year committed, Azure is marginally cheaper. At 3-year committed, Azure and GCP reach 60% off on-demand, about 3 percentage points deeper than AWS.

The raw discount depth matters less than most teams assume. The more significant question is what you're committing to and how flexible the commitment is when your instance mix changes.

Compute: Commitment Flexibility Is the Real Variable

All three providers charge roughly the same on-demand. All three offer 30-60% discounts for committed use. The structure of that commitment is where they diverge.

AWS Savings Plans let you commit to a dollar amount of compute spend per hour. That commitment applies to any EC2 instance running in any region, any size, any family. You commit to spending $10/hr of EC2 and AWS credits whatever you actually run. For teams that right-size aggressively or shift workloads across instance types, this is the most forgiving model.

GCP Committed Use Discounts (CUDs) are resource-based. You commit to a specific number of vCPUs and GB of memory in a given region. The discount applies to any instance consuming those resources, regardless of instance family or size. You get 37% off 1-year and 55% off 3-year automatically, with no upfront payment required. More flexible than Azure within a region, less flexible than AWS across regions.

Azure Reserved Instances commit to a specific instance family in a specific region. The reservation can be made instance-size flexible within that family (so a D4s_v5 reservation covers D2s_v5 and D8s_v5 as well), and you get one exchange per reservation. For stable, predictable workloads running the same instance family: Azure's 60% 3-year discount is competitive. For teams that shift frequently across families: the commitment becomes a constraint.

Architecture diagram

The practical takeaway: if your workload is stable and you know which instance families you run, Azure or GCP 3-year committed pricing reaches 60% off. If you right-size frequently and shift across instance types, AWS Savings Plans avoid commitment lock-in.

Object Storage: Azure Wins on Unit Price, Read Costs Flip the Math

Standard-tier object storage per GB per month (US regions):

Provider Storage/GB/month PUT per 10k ops GET per 10k ops Archive tier/GB
AWS S3 Standard $0.023 $0.05 $0.004 $0.004 (Glacier Instant)
Azure Blob Hot $0.018 $0.055 $0.0044 $0.00099 (Archive)
GCP Cloud Storage Standard $0.020 $0.05 $0.004 $0.0012 (Archive)

Azure Blob Hot is 22% cheaper per GB than S3 and 10% cheaper than GCS. For a team storing 1PB of data, that's a $5,000/month difference versus S3.

The unit price advantage holds for write-heavy, read-rarely workloads: backups, log archives, training data snapshots. But for workloads with high read volume, API operation charges start to matter. GET pricing across all three providers is nearly identical, so the operation charge advantage disappears at high read rates.

Cold and archive storage inverts the comparison further. Azure Archive at $0.00099/GB/month is by far the cheapest for long-term retention. But Azure charges $0.02/GB retrieval. S3 Glacier Instant Retrieval costs $0.004/GB/month with $0.01/GB retrieval. GCS Archive at $0.0012/GB/month has a $0.01/GB retrieval fee.

The decision rule: if you write once and retrieve rarely (compliance archives, DR snapshots), Azure Archive is cheapest. If you retrieve regularly for processing or analysis, S3 or GCS archive pricing is lower total cost once retrieval charges are included.

Block Storage: GCP Is Noticeably More Expensive

Kubernetes PersistentVolumeClaims, database disks, and stateful workloads all use block storage. This is a continuous cost: every provisioned GB bills every month regardless of usage.

Provider SSD per GB/month HDD per GB/month
AWS EBS gp3 $0.08 $0.045
Azure Premium SSD v2 $0.113 base $0.045
GCP Persistent Disk SSD $0.17 $0.04

GCP Persistent Disk SSD costs $0.17/GB/month. EBS gp3 costs $0.08/GB/month. That's 112% more for the same capacity. For a GKE cluster with 10 nodes each using 100GB persistent volumes, the annual GCP overage versus AWS is $1,080, per cluster.

Azure Premium SSD v2 pricing is more complex. The base rate is $0.113/GB/month, but you pay separately for IOPS above 3,000 ($0.006 per IOPS/month) and throughput above 125MB/s ($0.048 per MB/s/month). For low-IOPS staging workloads, the base rate is the dominant cost and it sits between EBS and GCP. For high-IOPS databases, the provisioned IOPS charges push Azure significantly higher.

GCP does offer Hyperdisk Balanced as a newer SSD option at $0.084/GB/month, which closes most of the gap with EBS gp3. The catch: Hyperdisk is not the default in GKE deployments and requires explicit StorageClass configuration. Teams running standard GKE deployments get Persistent Disk SSD by default and pay the higher rate until they specifically switch.

Network Egress: The Bill Nobody Budgets For

Egress pricing is where teams get surprised at scale. The cost is invisible during architecture design and only appears once data volumes grow.

Transfer type AWS Azure GCP
Internet egress (first 10TB/month) $0.09/GB $0.087/GB $0.12/GB (first 1TB), $0.11/GB next 9TB
Inter-region (same continent) $0.02/GB $0.02/GB $0.01/GB (within US)
Same-region (compute to storage) Free Free Free (GCS to GCE same region)
Ingress Free Free Free

GCP has the highest internet egress rate at $0.12/GB for the first terabyte. For a team pushing 100TB/month to the internet:

  • AWS: $9,000/month
  • Azure: $8,700/month
  • GCP: $11,090/month ($120 for first TB, then $0.11/GB for remaining 99TB)

GCP partially compensates with the lowest inter-region rate within the US at $0.01/GB. AWS and Azure both charge $0.02/GB for cross-region transfer. For a disaster recovery setup replicating 500TB/month between US regions, that's $60,000/year on AWS versus $30,000/year on GCP: a $30,000 annual difference from one architectural choice.

The other GCP advantage: egress from Cloud Storage to Compute Engine within the same region is free. AWS charges for S3-to-EC2 transfer even within the same region if it exits the VPC. For data-intensive workloads reading large datasets from object storage into compute (ML training, analytics pipelines), GCP's same-region free egress removes a consistent line item.

The bottom line on egress: if your primary cost is serving data to the internet at high volume, avoid GCP. If your primary cost is cross-region replication or reading from object storage to compute, GCP's rates are competitive.

Kubernetes Control Plane: AKS Is Free, EKS Costs $73/Month Per Cluster

This is the most underappreciated pricing difference in multi-environment Kubernetes deployments.

Provider Control plane fee 10-cluster annual cost Free tier
AWS EKS $0.10/hr per cluster $8,760/year None
Azure AKS $0 $0 Always free
GCP GKE Standard $0.10/hr per cluster $7,884/year First zonal cluster free

AKS charges nothing for the Kubernetes control plane. You pay for the VMs in your node pools and nothing else for cluster management. EKS charges $73/month regardless of whether the cluster runs 3 nodes or 300. GKE charges the same, with a single free zonal cluster per billing account.

A platform team running 10 clusters (production, staging, QA, per-environment dev, team sandboxes) pays:

  • AWS: $8,760/year in control plane fees
  • Azure: $0
  • GCP: $7,884/year (10 clusters minus the 1 free)

That's $8,760 of pure overhead eliminated by AKS. For organizations with many small, short-lived clusters (feature branch environments, per-PR review clusters), the gap grows further.

The counterargument: EKS has deeper AWS service integrations (IAM Roles for Service Accounts, AWS Load Balancer Controller, EFS CSI driver) that have more mature operational tooling than AKS equivalents. The control plane fee is real money, but it does not represent the only tradeoff.

What Actually Determines Your Cloud Bill

After comparing individual line items, the pattern is clear: no provider wins across every category.

Category Winner Runner-up
On-demand compute Tie Tie
3-year committed compute Azure / GCP (tie) AWS
Commitment flexibility AWS GCP
Object storage unit price Azure GCP
Block storage AWS Azure
Internet egress Azure AWS
Inter-region transfer GCP Tie
Kubernetes control plane Azure GCP

Provider selection is a smaller cost driver than team behavior. Three patterns account for most cloud overspend, and all three are identical across providers.

Idle non-production environments. Staging, QA, and dev clusters run 24/7 on EKS, AKS, and GKE alike. During nights and weekends, you pay for compute that no developer is using. That is 65-70% of non-prod compute hours wasted, regardless of your cloud. zopnight (https://zop.dev/zopnight) handles this across all three clouds: it suspends non-production workloads during off-hours and wakes them automatically when needed.

Over-provisioned nodes. Teams provision staging at production scale. Production needs headroom for traffic spikes. A staging cluster that runs 12 daily test jobs does not need the same node count as production.

Underused reservations. Teams buy reserved capacity without matching it to actual baseline usage. Unused reservations are sunk cost. The fix is to right-size the commitment to match stable baseline usage, then use on-demand for burst capacity above that.

The provider you're on matters less than fixing these three patterns. Switching from AWS to GCP does not eliminate $150,000/year in idle staging compute. It just moves the problem to a different invoice.

Pick the provider that fits your architecture: AKS for many small clusters, GCP for data-intensive workloads with heavy cross-region replication, AWS for maximum ecosystem maturity and commitment flexibility. Then cut the idle compute problem regardless of which one you chose.

Top comments (0)