GCP vs AWS — Service Comparison
This is the service-mapping lookup table. For the conceptual mental-model shifts an AWS engineer needs (resource hierarchy, additive IAM, global VPC, pricing model differences), see the companion doc
from-aws.md.
Core Philosophy Difference
graph TB
classDef history fill:#ff9900,stroke:#cc7a00,color:#fff
classDef adoption fill:#e67e22,stroke:#ba6018,color:#fff
classDef infra fill:#4285f4,stroke:#2a56c6,color:#fff
classDef data fill:#34a853,stroke:#1e7e34,color:#fff
classDef k8s fill:#fbbc05,stroke:#c79000,color:#333
subgraph AWS["AWS — breadth first"]
A1["20 years in market<br/>150+ services"]:::history
A2["Dominant enterprise adoption<br/>most compliance certifications"]:::adoption
A3["Every use case has an official service<br/>sometimes 2-3 overlapping ones"]:::history
end
subgraph GCP["GCP — engineering first"]
G1["Built on Google's own infra<br/>~70+ services, tighter surface"]:::infra
G2["BigQuery, Bigtable, Spanner<br/>data & analytics born here"]:::data
G3["GKE — reference Kubernetes implementation<br/>Google created Kubernetes"]:::k8s
end
| Dimension | AWS | GCP |
|---|---|---|
| Market share (cloud infra, ~2024) | ~32% | ~11% |
| Enterprise adoption | Dominant | Growing |
| Kubernetes | EKS (solid) | GKE (best-in-class, invented K8s) |
| Data/Analytics | Redshift, Athena, EMR | BigQuery (simpler, often cheaper) |
| ML/AI | SageMaker, Bedrock | Vertex AI, TPUs, best for training |
| Networking | Complex but powerful | Global VPC, simpler model |
| Pricing | Pay-per-resource | Sustained use discounts automatic |
AWS has roughly 3x GCP's cloud market share. Does that mean AWS's Kubernetes and data-warehouse offerings are technically ahead of GCP's equivalents?
Service-by-Service Mapping
Compute
| Use case | AWS | GCP |
|---|---|---|
| VMs | EC2 | Compute Engine |
| Managed K8s | EKS | GKE |
| Serverless containers | Fargate, App Runner | Cloud Run |
| Serverless functions | Lambda | Cloud Functions |
| Batch compute | Batch | Cloud Batch |
| Spot/preemptible VMs | Spot Instances | Preemptible VMs (Spot VMs) |
Storage and Databases
| Use case | AWS | GCP |
|---|---|---|
| Object storage | S3 | Cloud Storage |
| Block storage | EBS | Persistent Disk |
| File storage | EFS | Filestore |
| Relational DB | RDS | Cloud SQL |
| Managed Postgres | Aurora Postgres | Cloud Spanner, AlloyDB |
| Global ACID DB | Aurora Global | Spanner (better: true global) |
| NoSQL key-value | DynamoDB | Firestore, Bigtable |
| Wide-column | DynamoDB single-table | Bigtable (better for time-series) |
| Data warehouse | Redshift | BigQuery |
| In-memory cache | ElastiCache | Memorystore (Redis/Memcached) |
| Time-series | Timestream | Bigtable |
Networking
| Use case | AWS | GCP |
|---|---|---|
| VPC | VPC (region-scoped) | VPC (global — one VPC, all regions) |
| Load balancer | ALB/NLB/CLB | Cloud Load Balancing |
| CDN | CloudFront | Cloud CDN |
| DNS | Route 53 | Cloud DNS |
| Private connectivity | PrivateLink, VPN | Private Service Connect, Cloud VPN |
| Cross-region connectivity | Transit Gateway | Cloud Router + HA VPN |
Key networking difference:
graph TD
classDef awsvpc fill:#ff9900,stroke:#cc7a00,color:#fff
classDef gcpvpc fill:#4285f4,stroke:#2a56c6,color:#fff
classDef subnet fill:#34a853,stroke:#1e7e34,color:#fff
classDef note fill:#7f8c8d,stroke:#616a6b,color:#fff
subgraph AWS_MODEL["AWS — one VPC per region"]
AVPC1["VPC — us-east-1<br/>10.0.0.0/16"]:::awsvpc
AVPC2["VPC — eu-west-1<br/>10.1.0.0/16"]:::awsvpc
AVPC1 -->|"VPC Peering<br/>or Transit Gateway"| AVPC2
ANOTE["Two separate networks.<br/>Nothing routes across regions<br/>until you configure it."]:::note
end
subgraph GCP_MODEL["GCP — one VPC, global"]
GVPC["VPC: my-vpc<br/>spans every region"]:::gcpvpc
US["Subnet: us-central1<br/>10.0.1.0/24"]:::subnet
EU["Subnet: europe-west1<br/>10.0.2.0/24"]:::subnet
GVPC --> US
GVPC --> EU
US -.->|"private IP, same VPC<br/>Google's backbone"| EU
GNOTE["One network. Every subnet<br/>routes to every other subnet<br/>automatically."]:::note
end
us-east-1 and eu-west-1 are two separate networks with separate CIDR ranges — nothing routes between them until you explicitly set up VPC Peering or attach both to a Transit Gateway, then update route tables on both sides. Every additional region repeats this setup.
us-east-1 (10.0.0.0/16) and a separate VPC in eu-west-1 (10.1.0.0/16) start out as two isolated networks — nothing routes between them by default.
A GCP VPC already has subnets in us-central1 and europe-west1. Do you need to set up anything like VPC Peering or a Transit Gateway before a VM in one subnet can reach a VM in the other?
Observability
| Use case | AWS | GCP |
|---|---|---|
| Metrics | CloudWatch | Cloud Monitoring |
| Logs | CloudWatch Logs | Cloud Logging |
| Traces | X-Ray | Cloud Trace |
| Dashboards | CloudWatch | Cloud Monitoring, Grafana |
| Audit logs | CloudTrail | Cloud Audit Logs |
AI/ML
| Use case | AWS | GCP |
|---|---|---|
| ML platform | SageMaker | Vertex AI |
| LLM APIs | Bedrock (Claude, Llama, etc.) | Vertex AI (Gemini, etc.) |
| Custom training | SageMaker Training | Vertex AI Training, TPUs |
| TPU access | No | Yes (Google's custom AI chips) |
| Managed notebooks | SageMaker Studio | Vertex AI Workbench |
GCP TPUs: Google's Tensor Processing Units give 10-100× better price/performance for LLM training vs GPUs on any cloud. If you're training large models, GCP is often cheaper.
You want to train a large model and need TPU access. Can you provision TPUs on AWS?
GCP Unique Advantages
1. Global VPC
Single VPC spanning all regions — no peering needed. Add a subnet in Tokyo, your London VM can reach it without configuration.
2. BigQuery Pricing
BigQuery: $5/TB scanned, $0.02/GB storage. AWS Redshift: $0.25/hour for smallest cluster (even when idle). For sporadic analytics, BigQuery is often 10× cheaper.
3. Sustained Use Discounts
GCP automatically gives discounts for VMs running >25% of the month — no upfront commitment required. AWS requires Reserved Instances (1-3 year commitment) for equivalent discounts.
4. GKE Quality
GKE gets Kubernetes features first (it's the reference implementation). Autopilot mode — true serverless Kubernetes — doesn't exist on AWS/Azure.
5. Spanner — True Global ACID
AWS Aurora Global has replication lag (seconds). Spanner provides globally consistent transactions with ~10ms latency using TrueTime (atomic clocks).
You provision the smallest Redshift cluster and a BigQuery dataset for the same sporadic analytics workload, then run zero queries all weekend. Which one keeps billing you?
AWS Unique Advantages
1. Service breadth
AWS has services GCP doesn't: AppSync (GraphQL), Kinesis Data Firehose simplicity, CodePipeline, many enterprise integrations.
2. Enterprise ecosystem
AWS has the most ISV integrations, compliance certifications, and enterprise support.
3. Mature marketplace
AWS Marketplace has thousands of third-party products pre-configured.
4. On-premises hybrid
AWS Outposts, AWS Local Zones — better on-prem story than GCP Distributed Cloud.
A company has heavy existing on-premises infrastructure and wants the smoothest hybrid-cloud story. Per this doc, is that a point in AWS's or GCP's favor?
When to Choose Which
- Your team already knows AWS.
- You need maximum service breadth.
- Enterprise compliance requirements — AWS has the most certifications.
- Strong on-prem hybrid requirements.
- Analytics-heavy workload — BigQuery is hard to beat.
- K8s-native platform — GKE Autopilot, Workload Identity.
- Training large ML models — TPUs.
- Multi-region global application — global VPC simplicity.
- Cost optimization for data warehousing.
You leave VMs running continuously all month on both AWS and GCP without pre-purchasing anything (no Reserved Instances, no committed-use contracts). Do both clouds discount that usage automatically?