This article compares AWS, GCP, and Azure as cost architecture decisions, not just feature checklists. The $28,000 AWS egress bill is a real-world example of how network topology—specifically inter-region data transfer pricing—can dominate your cloud spend.
★
Think of GCP, AWS, and Azure as the 'Big Three' utility companies for the digital age.
GCP’s global VPC (Virtual Private Cloud) uses a single flat network with internal IPs that never leave Google’s backbone, avoiding the per-GB egress charges AWS and Azure impose for traffic between regions. That’s why GCP can cut egress costs by 40% or more for distributed workloads.
The core insight: your cloud provider choice locks in your network cost model, and that model determines whether your architecture scales economically or bleeds money on data movement.
Beyond egress, the article breaks down compute pricing (EC2 vs Azure VM vs GCE), spot instance behavior, and burstable tiers—where GCP’s sustained-use discounts and committed-use contracts often undercut AWS’s Reserved Instances for variable workloads. It also covers region/zone topology: AWS has the most regions but charges for inter-AZ traffic; GCP’s zones within a region are free to communicate; Azure sits in the middle.
Security is framed as IAM policy enforcement (GCP’s resource hierarchy vs AWS’s account-level permissions vs Azure’s management groups), and cloud-native implementation is evaluated through the lens of Kubernetes (GKE vs EKS vs AKS) and serverless (Cloud Functions vs Lambda vs Azure Functions). The takeaway: pick your provider based on your traffic patterns and operational model, not just raw compute price.
Plain-English First
Think of GCP, AWS, and Azure as the 'Big Three' utility companies for the digital age. AWS is like the established power giant with a tool for every niche; Azure is the massive corporate provider that integrates perfectly with the office equipment you already own; and GCP is the high-tech, specialised firm that offers the fastest, most advanced smart-grid technology. Understanding the differences helps you decide which 'grid' will power your application most efficiently.
⚙ Browser compatibility
Latest versions — ✓ supported
Chrome
Firefox
Safari
Edge
✓
✓
✓
✓
Choosing a cloud provider is no longer just about virtual machines; it's about choosing an ecosystem. AWS, Azure, and GCP each offer a unique philosophy toward infrastructure, data, and developer experience. While they all provide the fundamental building blocks of modern computing—compute, storage, and networking—the way they implement identity, global networking, and managed services varies significantly.
In this guide, we'll break down the architectural nuances of the 'Big Three,' why they were designed with different priorities, and how to navigate their CLI tools to manage resources. By the end, you'll have the technical perspective needed to make an informed multi-cloud or single-cloud decision for your production workloads.
The most important insight that separates senior engineers from the rest? Egress pricing. AWS charges $0.09/GB inter-region. GCP's global VPC eliminates that cost entirely for traffic on its backbone. For a 2PB/month workload, that's $160,000 difference. Not a rounding error — a hiring decision.
Why Cloud Provider Choice Is a Cost Architecture Decision
AWS, GCP, and Azure are cloud platforms that offer compute, storage, and networking services, but their egress pricing and network topology differ radically. The core mechanic: every byte leaving a cloud region incurs a cost, and each provider charges differently for cross-region, cross-VPC, and internet-bound traffic. GCP’s global VPC treats the entire network as a flat fabric, so inter-region traffic uses Google’s backbone at no extra charge beyond standard compute rates. AWS and Azure charge per-GB egress between VPCs and regions, often $0.05–$0.12/GB, which can balloon to $28,000 for 200 TB/month.
In practice, GCP’s single VPC spans regions with internal IPs, eliminating the need for transit gateways or VPC peering costs. AWS requires explicit VPC peering or Transit Gateway attachments, each with per-GB processing fees. Azure uses virtual network peering with similar egress charges. The key property: GCP’s model makes multi-region architectures cost-linear with compute, not super-linear with data movement. For data-heavy workloads like media processing, ML training, or database replication, this difference dominates total cloud bill.
Use GCP when your system moves large volumes of data between regions — think global CDN backends, cross-region analytics pipelines, or disaster recovery replication. Use AWS or Azure when you need specific managed services (Lambda, DynamoDB, AKS) or regulatory compliance zones GCP lacks. The decision isn’t about feature count; it’s about whether your data gravity makes egress the dominant cost driver.
⚠ Egress Is Not Just Internet Traffic
Most teams budget for compute and storage but discover egress costs only after the first $10k bill — inter-region replication and VPC peering charges are the silent budget killers.
📊 Production Insight
A real-time analytics pipeline replicated 10 TB/day across three AWS regions for failover; monthly egress hit $18,000 before anyone noticed.
Symptom: CloudWatch billing alerts showed a steady $600/day increase with no new instances or storage.
Rule of thumb: If your cross-region data transfer exceeds 5 TB/month, model egress cost before choosing a provider — GCP’s global VPC can cut that line item by 40% or more.
🎯 Key Takeaway
Egress pricing is the single largest hidden cost in multi-region architectures — always model it upfront.
GCP’s global VPC eliminates inter-region egress fees; AWS and Azure charge per-GB for every cross-VPC or cross-region byte.
Choose your cloud provider based on data movement patterns, not just compute or service availability.
thecodeforge.io
Gcp Vs Aws Vs Azure
Core Philosophy and Market Position
Each cloud provider started from a different origin, and that history drives their current strengths and weaknesses.
AWS (Amazon, 2006): Launched as an internal infrastructure platform for Amazon's retail operations. The philosophy is 'primitive-first' — offer building blocks that can be composed any way. This leads to breadth over simplicity. AWS has over 200 services, from machine learning (SageMaker) to satellite ground stations (Ground Station). The downside: steep learning curve and complex pricing. Over 80% of enterprises use AWS as their primary cloud.
Azure (Microsoft, 2010): Built to leverage Microsoft's enterprise footprint. The philosophy is 'hybrid-first' — seamless integration with on-premises Active Directory (now Entra ID), Windows Server, SQL Server, and Office 365. Ideal for organizations with existing Microsoft Enterprise Agreements (EAs). The Azure Hybrid Benefit can reduce Windows Server and SQL Server licensing costs by up to 80% compared to other clouds. Second-largest cloud provider, dominant in Fortune 500.
GCP (Google, 2011): Born from Google's internal infrastructure (Borg, Colossus, Spanner). The philosophy is 'data-first' — leverage Google's expertise in AI/ML, big data, and container orchestration. GCP effectively invented Kubernetes (K8s) before open-sourcing it in 2014. The networking layer (global VPC) is unmatched, keeping traffic on Google's private fiber backbone. Third-largest cloud provider but fastest-growing segment in data analytics and AI.
io/thecodeforge/cloud/MultiCloudCLI.shBASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# io.thecodeforge: StandardizingResourceCreation across CLIs
# AWS: Create an EC2Instance (t3.micro is the modern burstable standard)
aws ec2 run-instances \
--image-id ami-0abcdef1234567890 \
--count 1 \
--instance-type t3.micro \
--key-name ForgeKeyPair \
--security-group-ids sg-0858102434db6c694
# Azure: Create a VM with a focused ResourceGroup
az vm create \
--resource-group ForgeProdRG \
--name ForgeWorkerVM \
--image Ubuntu2204 \
--size Standard_B1s \
--admin-username forgeadmin \
--generate-ssh-keys
# GCP: Create a GCEInstance with high-performance networking
gcloud compute instances create forge-app-node \
--project=thecodeforge-prod \
--zone=us-central1-a \
--machine-type=e2-micro \
--network-interface=network-tier=PREMIUM,stack-type=IPV4_ONLY \
--image-family=debian-11 \
--image-project=debian-cloud
Output
Instances starting on AWS, Azure, and GCP...
Mental Model
Cloud Provider Origins Shape Their DNA
AWS started as a retail infrastructure. Azure started in enterprise IT. GCP started in Google's research labs. Each still carries that DNA.
AWS: Primitive-first, build anything, at the cost of complexity.
Azure: Enterprise-first, hybrid-cloud, best for Windows/.NET shops.
GCP: Data-first, AI/ML leadership, best global network.
AWS has the most services (200+), GCP has the most advanced services (Spanner, BigQuery, GKE).
Azure's secret weapon: existing Microsoft enterprise agreements (discounts up to 80% for Windows/SQL).
📊 Production Insight
AWS leads in market share (32% of cloud spend), but GCP is catching up in AI/ML (45% of ML workloads on GCP).
Azure dominates Fortune 500 (95% of Fortune 500 use Azure for some workloads, mostly identity and Windows apps).
Rule: If you're a startup building AI or containers, start with GCP. If you're Windows/.NET, start with Azure. If you need breadth and talent pool, start with AWS.
Choose based on team expertise, existing contracts, and workload type — not just price per hour.
Compute Comparison: EC2 vs Azure VM vs GCE — Spot Instances and Burstable Pricing
Each provider's compute service reflects its design goals. AWS EC2 offers the broadest selection of instance families, including FPGAs (F1), GPU (P4), and Graviton ARM instances. Azure VMs deeply integrate with Windows licenses and offer Reserved Instances with Azure Hybrid Benefit to reduce Windows Server costs. GCE stands out with custom machine types (pick exact vCPU/memory), sustained-use discounts (automatically scale down), and preemptible VMs at up to 90% discount.
Pricing models** differ significantly
AWS: On-demand, Reserved (1/3 years, up to 72% off), Spot (up to 90% off, 2-min eviction notice), Savings Plans (flexible across families).
Azure: On-demand, Reserved (same), Spot VMs (up to 90% off, 30-sec eviction), Hybrid Benefit (use on-prem Windows/SQL licenses in cloud).
GCP: On-demand, Committed Use Discounts (1/3 years, up to 70% off), Preemptible VMs (80% off, 30-sec notice), Sustained Use (automatic 20-30% discount for running >25% of month).
Burstable performance: AWS T-family (t3, t4g) uses CPU credits; Azure B-series uses credits; GCP E2-micro/nano have no burst credits — they're always throttled. T3 unlimited mode allows bursting beyond credit balance at extra cost.
For containerized workloads, GKE runs most efficiently due to Google's Borg lineage; AWS EKS and Azure AKS are close competitors but require more manual tuning for pod density. GKE Autopilot (serverless Kubernetes) eliminates node management entirely — unique among providers.
io/thecodeforge/cloud/ComputeComparison.tfHCL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# io.thecodeforge: Compute resource definitions for comparison
resource "aws_instance""forge_app" {
ami = "ami-0abcdef1234567890"
instance_type = "t3.large"
# no preemptible option natively in AWS; use Spot
}
resource "azurerm_linux_virtual_machine""forge_app" {
name = "forge-app-vm"
resource_group_name = azurerm_resource_group.example.name
location = "East US"
size = "Standard_DS2_v2"
admin_username = "forgeadmin"
network_interface_ids = []
}
resource "google_compute_instance""forge_app" {
name = "forge-app-instance"
machine_type = "e2-standard-2"
zone = "us-central1-a"
allow_stopping_for_update = true
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
}
Output
Three VMs of similar spec, each with provider-specific scaling options.
Mental Model
Compute Philosophy — The Rental Market Analogy
Think of compute as a rental market: AWS has every floor plan, Azure has pre-furnished office space for Windows tenants, GCP lets you build the exact room you need.
AWS: hundreds of instance types → pick the perfect one, or pay for generic.
Azure: Reserved Instances + Hybrid Benefit = Windows cost leader (up to 80% savings).
GCP: custom machine types + sustained use discounts = most flexible pricing for custom workloads.
Preemptible/Spot VMs: GCP's 90% discount best for fault-tolerant batch, but 30-sec eviction notice.
Kubernetes: GKE Autopilot eliminates node management; EKS and AKS require more operational overhead.
📊 Production Insight
AWS spot instances are 90% cheaper but reclaimable within 30 seconds — design for interruption.
Azure spot VMs have up to 5-minute eviction notice — safer for stateful workloads.
GCP preemptibles are 80% discount with 30-second notice and only run 24 hours max.
Rule: use spot for stateless batch (CI/CD, data processing), reserved for persistent services, on-demand for spiky traffic.
UseAzure with Hybrid Benefit — up to 80% savings on Windows Server and SQL Server licensing.
IfCustom ML training (TensorFlow, PyTorch) with variable time
→
UseGCP preemptible VMs + TPU/GPU — best price/performance for AI, but checkpoint every 30 seconds.
IfKubernetes workloads with variable scale
→
UseGKE Autopilot (no node management, pay per pod) for simplicity, EKS with Fargate for AWS-integrated, AKS for Windows containers.
IfPredictable 24/7 workloads (databases, web servers)
→
UseReserved Instances or Committed Use Discounts. AWS Savings Plans most flexible, GCP CUDs per project, Azure RIs per region.
thecodeforge.io
Gcp Vs Aws Vs Azure
Regions and Zones: Where Your Latency and Your Budget Sleep Together
Cloud providers charge different prices for the same compute in different geographic locations. That’s not a footnote; it’s a fist fight with your finance team. AWS’s us-east-1 is cheap because it’s old and crowded. Azure’s Brazil South is expensive because they had to lay undersea cable. GCP’s us-west1 is a steal if your users are on the West Coast. The real trap? Data egress. Moving traffic between regions costs real money. One misrouted backup job can burn through your monthly margin. You pick a primary region based on user latency, but you pick a DR region based on data transfer costs and regulatory compliance. Always calculate egress in your TCO model before you sign. And don’t assume zones within a region are free—they’re not. GCP charges for cross-zone traffic. AWS gives you a few TB free. Azure’s pricing is a spreadsheet nightmare. Test your inter-zone data movement in a proof of failure, not a proof of concept.
RegionCostCheck.ymlYAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// io.thecodeforge — devops tutorial
provider: gcp
project: production-finops
# Compare spot instance cost across zones in ONE region
regions:
- name: us-west1
zone: us-west1-a
spot_price_hourly: 0.0065
- name: us-west1
zone: us-west1-b
spot_price_hourly: 0.0072
- name: us-west1
zone: us-west1-c
spot_price_hourly: 0.0081
# same machine type (e2-small) - price drifts by 20%
# Pick the cheapest zone for your batch jobs or die by a thousand cents.
Output
Zone: us-west1-a -> $0.0065/hr
Zone: us-west1-b -> $0.0072/hr
Zone: us-west1-c -> $0.0081/hr
Savings if you pin to us-west1-a: 20%.
⚠ Production Trap:
You think multi-region HA is a checkbox. It’s a cost multiplier. A three-region active-active setup in AWS can add 40% to your monthly bill from egress alone. Test your bill, not just your ping.
🎯 Key Takeaway
Regions are for latency. Zones are for availability. Both are for budgeting—calculate egress cost before you design your topology.
Security in Google Cloud Platform: IAM Is Not a Suggestion, It’s a Fence
GCP’s security model is built on three pillars: IAM for identity, VPC Service Controls for data boundaries, and Cloud Armor for edge defense. The mistake most teams make is treating IAM like a permissions menu. It’s not. It’s an access graph that attaches to every API call. If your service account has roles/compute.admin on a project, that’s not a role—it’s a loaded weapon. GCP enforces resource-hierarchy inheritance: org -> folder -> project -> resource. If you give a folder-level viewer access, every project under it inherits that view. That’s great for org-wide observability, but deadly if you accidentally give iam.serviceAccountUser at the org level. The real production trick: use custom roles with a deny-by-default principle. And don’t forget VPC Service Controls. They prevent data exfiltration even if a service account key leaks. GCP’s Security Command Center will scream at you for unencrypted buckets and overly permissive firewall rules. Listen to it. Or wait for the audit.
ServiceAccountTighten.ymlYAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// io.thecodeforge — devops tutorial
# CustomIAM role - read-only on Compute but deny on secrets
resource: google_project_iam_custom_role
name: compute_readonly_no_secrets
project: production-12345
role_id: ComputeReadOnlyNoSecrets
title: "Compute Read-Only, No Secrets"
description: "List instances, but never read Secret Manager"
permissions:
- compute.instances.list
- compute.instances.get
- compute.zones.get
# explicitly excluded: secretmanager.versions.access
stage: GA
# Attach to a service account, not a user
# Never use primitive roles (owner/editor/viewer) in production.
Output
Role 'ComputeReadOnlyNoSecrets' created.
Applied to service-account: batch-processor@production-12345.iam.gserviceaccount.com
Instance list: OK
Secret read: DENIED (403)
💡Senior Shortcut:
Use VPC Service Controls to wrap your production project. Even if an attacker gets a service account key, they can’t copy data to a GCS bucket outside your perimeter. It’s the cheapest insurance you never deploy.
🎯 Key Takeaway
IAM is the first fence, VPC Service Controls is the second. If you don’t use custom roles with deny-by-default, you’re one misclick away from a privilege escalation.
Implementing Cloud-Native Projects: Where the Hype Meets Your YAML
Cloud-native isn't a badge of honor. It's a hard constraint on your architecture. GCP, AWS, and Azure all offer managed Kubernetes, but they fundamentally disagree on how you should build stateless, observable systems.
AWS forces you to assemble cloud-native from Lego bricks — EKS, Fargate, App Mesh, and Cloud Map — each with its own IAM policy and bill. You own every piece, which means you also own every failure mode. GCP leans hard into Google's internal dogma: Anthos and GKE with autopilot and built-in config sync. You get less control but faster velocity if your team commits to their way. Azure pitches Azure Kubernetes Service plus Dapr as the magic abstraction layer, betting that microservices complexity needs a framework.
The real test isn't the control plane. It's how your team handles state, secrets, and RBAC across environments. Pick the provider whose native tooling punishes less for your team's weakest skill. I've seen teams burn months on AWS service mesh configs that GKE handles with two annotations. Choose the path of least config resistance.
Don't blindly pick GKE because it's 'simpler'. If your org already runs 20 Fargate tasks and a mature VPC, migrating to GKE's service mesh is a six-month detour. Audit your existing infrastructure debt first.
🎯 Key Takeaway
Your cloud-native cost isn't compute — it's the config complexity your team can realistically operate without a production incident every sprint.
thecodeforge.io
Gcp Vs Aws Vs Azure
Conclusion: Your Decision Matrix Ends at Your Team's Weakest Skill
Stop comparing EC2 instance families by the penny. The cloud provider that wins is the one where your worst developer can deploy without opening a support ticket.
For startups running stateless microservices with a small SRE team: GCP. Its default IAM and GKE autopilot hide enough complexity that one senior can cover three juniors. For enterprises with regulatory baggage and a decade of Active Directory: Azure. You'll waste money on licensing, but the compliance path is paved. For teams that need every possible service and have the ops headcount to manage them: AWS. You'll pay more in engineer-hours than compute, but you'll never hit an architectural ceiling.
The decision framework is brutally simple: Count how many of your engineers can honestly explain the difference between a NAT gateway and a VPC endpoint. If the number is less than three, pick the provider that automates that decision away. If it's more, pick the one with the deepest service catalog. Everything else — regions, spot pricing, security — is just noise your finance team will blame you for later.
Ship fast, break things, but don't let your cloud choice be the thing that breaks.
Provider-Decision-Matrix.ymlYAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// io.thecodeforge — devops tutorial
# Quick decision: evaluate your team's weakest skill
decision:
providers:
- name: GCP
when: "Your team can't explain Kubernetes RBAC without a 30-minute meeting"
risk: "Google deprecates APIs quarterly — plan for migration"
- name: AWS
when: "You have dedicated platform engineers who hate vendor lock-in"
risk: "IAM policy explosion — budget 0.5 FTE just for permissions cleanup"
- name: Azure
when: "Your CISO mandates SSO with existing on-prem AD"
risk: "Cost forecasting is a full-time job — Azure pricing calculator is fiction"
Output
Decision matrix loaded. Apply your team's topography.
💡Production Trap:
The 'multi-cloud' escape hatch is a myth. Running two control planes doubles your cognitive load and guarantees your incident response playbooks are wrong half the time. Pick one, commit, and only multi-cloud if you have a regulatory gun to your head.
🎯 Key Takeaway
Your cloud provider decision is a bet on your team's weakest link — optimize for survivability, not theoretical flexibility.
● Production incidentPOST-MORTEMseverity: high
The $28,000 Egress Shock That Sent the CFO to the ER
Symptom
Monthly AWS bill jumped from $2,500 to $28,000 — all from Data Transfer out ($0.09/GB inter-region). The engineering dashboard showed high traffic to Europe, but the cost anomaly detection hadn't been configured. The CFO received an AWS invoice email on a Friday evening — the team missed the budget alert because they never set it up.
Assumption
The team assumed ingress/egress pricing was similar across providers and across regions. They didn't know that inter-region egress costs can dominate compute costs. They also assumed CloudFront would handle caching — but their dynamic API responses couldn't be cached, so every request still incurred inter-region transfer.
Root cause
Architectural decision to run the database in us-east-1 and the application servers in eu-west-1. Each user request to the European region required the app server to fetch data from the US database. At 1000 requests/second average, data transfer of 200TB/month. Egress cost: 200,000 GB × $0.09 = $18,000 just for DB-to-app transfer. Plus API responses to users: 800,000 GB × $0.08 = $6,400 extra. Total: $24,400 in egress, $3,600 in compute and storage. The team had optimised compute cost (using spot instances) but completely ignored data transfer.
They also didn't realise that GCP's global VPC would have eliminated inter-region egress fees entirely — traffic stays on Google's backbone at no extra cost.
Fix
1. Deployed CloudFront with regional edge caches in Europe — cached static assets reduced egress to 40% of original.
2. For dynamic API responses, moved the database to a multi-region Aurora Global Database with read replicas in eu-west-1. Local reads eliminated cross-region transfer.
3. Added budget alerts at $5,000, $10,000, $20,000 thresholds.
4. Switched inter-region transfer to use AWS Direct Connect with GCP Partner Interconnect, routing traffic through private peering to reduce egress costs (still not free, but negotiated <$0.05/GB).
5. For future projects, evaluated GCP for global deployments — its global VPC eliminates cross-region egress at the network layer, not just for cached assets.
Key lesson
Egress pricing varies 3-5x between providers — GCP is cheapest for inter-region (global VPC), AWS most expensive.
Always model data transfer costs before selecting a primary region. Egress can exceed compute bill by 3x.
Use CDN (CloudFront/Azure CDN/Cloud CDN) as the first layer of egress control.
For dynamic traffic, use multi-region databases (Aurora Global, Spanner) to localise reads, not cross-region replication.
Set up budget alerts on day one. A $28,000 bill without warning is a career-limiting event.
Production debug guideSymptom → Action guide for common cloud provider issues5 entries
Symptom · 01
Application inside AWS needs to read data from GCP Cloud Storage — latency > 1 second
→
Fix
Check if using AWS Direct Connect + GCP Partner Interconnect. Without direct peering, traffic goes over public internet → 100-300ms add. Use GCP's storage transfer service or replicate to S3.
Symptom · 02
Azure VM can't resolve hostname of AWS EC2 instance in same VPC? (no VPC peering exists)
→
Fix
Azure and AWS VPCs cannot be directly peered. Use Azure VPN Gateway + AWS VPN connection or a third-party transit VPC. Verify public DNS resolution.
Symptom · 03
Billing alert triggered — spend 3x normal on a single day
→
Fix
Check for DDoS, egress spikes, misconfigured load balancers (AWS NLB with cross-zone disabled → unnatural traffic patterns). Use AWS Cost Anomaly Detection, Azure Cost Management, GCP Billing Budgets.
Symptom · 04
IAM role assumed in AWS fails to access GCP resource
→
Fix
Cloud providers have incompatible identity systems. Use federation: AWS IAM IdP federation with GCP Workforce Identity Federation. Or use a service account from GCP with delegated access.
Symptom · 05
Kubernetes cluster in GKE costs 30% more than EKS for same workload
→
Fix
GKE's default node pool uses n1-standard machines (older generation). Switch to e2-standard (20% cheaper) or c3 (compute-optimised). Also check if you're using regional cluster (replicates control plane across zones → 3x cost) vs zonal cluster.
★ Cloud Provider Cost & Performance DebugFast diagnostics for cost spikes and performance issues across AWS, Azure, and GCP.
AWS bill skyrocketed — check egress first−
Immediate action
Check Data Transfer out costs in Cost Explorer
Commands
aws ce get-cost-and-usage --time-period Start=2026-04-01,End=2026-04-30 --granularity MONTHLY --metrics "UnblendedCost" --filter "{\"Dimensions\":{\"Key\":\"SERVICE\",\"Values\":[\"AWS Data Transfer\"]}}"
GCP automatically applies sustained use discounts (20-30%) for long-running instances. If not seeing them, check if your instance is preemptible or if you're using committed use discounts incorrectly.
Multi-region latency > 100ms — check global VPC vs peering+
Immediate action
Identify if traffic is going over public internet or private backbone
GCP global VPC keeps traffic on private backbone (lower latency). AWS cross-region peering still incurs public internet routing unless using Direct Connect + peering.
AWS is the most mature platform, ideal for teams needing the widest variety of specialised tools and a massive talent pool.
2
Azure is the strategic choice for organisations with existing Microsoft Enterprise Agreements and deep Entra ID (Active Directory) integration.
3
GCP offers the most advanced Kubernetes experience (GKE) and a superior global network, often delivering better price-to-performance for data analytics and AI workloads.
4
Multi-cloud isn't just a buzzword
it requires Infrastructure as Code (IaC) to manage the operational complexity of diverse providers reliably.
5
Always optimise for 'Managed Services' (PaaS) over 'Virtual Machines' (IaaS) to reduce the operational burden of patching and scaling.
6
The secret to cloud cost control
model egress costs before compute costs. GCP's global VPC can save $160k/year on 2PB/month inter-region traffic.
Common mistakes to avoid
5 patterns
×
Not modelling egress costs before choosing a region
Symptom
AWS monthly bill jumps from $2,500 to $28,000 — all from Data Transfer out ($0.09/GB inter-region). CFO gets an invoice on Friday evening. Team missed the budget alert because they never set it up.
Fix
Always calculate data transfer costs before deployment. Use provider calculators. GCP global VPC eliminates inter-region egress. For AWS, place compute and storage in same region, use CloudFront for caching, and set budget alerts.
×
Not utilising the 'Free Tier' correctly — leaving resources running
Symptom
AWS free tier expires after 12 months, but a t2.micro left running continues accruing charges at standard rate ($8-15/month), causing unexpected monthly bills. Azure and GCP have similar traps (e2-micro free, but only one per region).
Fix
Set up a budget alert on each provider on day one. For AWS, monitor free tier usage in Cost Explorer. For GCP, use 'Always Free' products like Cloud Functions and Cloud Storage but limit request count. Terminate test instances, don't just stop them.
×
Treating S3-compatible APIs as identical across providers
Symptom
An app written with S3 pre-signed URLs works fine on AWS, but when migrated to Azure or GCP, the logic breaks because Blob uses container-based namespaces (different URL patterns) and GCS uses uniform bucket name but different signing mechanism.
Fix
Use abstraction libraries like MinIO SDK (S3-compatible) or provider-agnostic SDKs (Apache jclouds). For multi-cloud object storage, use MinIO gateway as a translation layer. Never hardcode provider-specific URL structures.
×
Assuming IAM roles, policies, and service accounts are interchangeable
Symptom
An AWS IAM role assumed in one account fails to access a GCP resource. AWS uses resource-based policies (S3 bucket policies) and identity-based policies (user/group/role). GCP uses hierarchical permissions (Organization → Folder → Project → Resource) with service accounts. Azure uses RBAC (role-based access control) with Entra ID.
Fix
Use federation for cross-provider access: AWS IAM IdP federation with GCP Workforce Identity Federation or Azure AD. For application-level access, use workload identity federation. Never create separate identities per provider when possible.
×
Manual resource management via 'ClickOps' — no Infrastructure as Code
Symptom
After a disaster recovery drill, engineers cannot reproduce the exact infrastructure because resources were created through the console without version control, leading to configuration drift. A team spent 3 weeks rebuilding a production environment after an outage because their 'critical' configuration was only in the console, not in code.
Fix
Use Infrastructure as Code (Terraform, Pulumi, AWS CDK, Azure Bicep, Google Deployment Manager) to manage all resources. Store state files securely in a shared backend (S3, Azure Storage, GCS) with version control. Never click in the console for production resources.
INTERVIEW PREP · PRACTICE MODE
Interview Questions on This Topic
Q01SENIOR
Google Spanner vs AWS Aurora Global Database: When would you choose one ...
Q02SENIOR
Explain the difference in IAM philosophy: AWS Resource-Based Policies vs...
Q03SENIOR
Scenario: A client is heavily invested in Active Directory (on-premises)...
Q04SENIOR
Compare the networking models: What is the technical advantage of GCP's ...
Q05SENIOR
How do 'Preemptible VMs' (GCP) or 'Spot Instances' (AWS/Azure) work, and...
Q06SENIOR
What is 'Egress' and how do you architect a system to minimise data tran...
Q01 of 06SENIOR
Google Spanner vs AWS Aurora Global Database: When would you choose one over the other for a global financial application needing strong consistency?
ANSWER
Spanner provides strong global consistency with ACID transactions across continents, using TrueTime and synchronised clocks. It's the only cloud database offering external consistency (linearizability) globally. Aurora Global Database offers read replicas across regions with ~1 second replication lag, but writes are only at the primary region. For a financial application where a user in Asia and a user in Europe might update the same account concurrently, Spanner is necessary to avoid conflicts. For workloads where reads can be slightly stale and writes are localised to a single region, Aurora Global with read replicas is more cost-effective. Spanner example: credit card transaction processing globally. Aurora Global example: social media feed (eventual consistency acceptable).
Q02 of 06SENIOR
Explain the difference in IAM philosophy: AWS Resource-Based Policies vs GCP Hierarchical Project/Folder Organization vs Azure RBAC.
ANSWER
AWS IAM uses identity-based policies attached to users/groups/roles, and resource-based policies attached to resources (e.g., S3 bucket policies). This allows granular cross-account access without creating new roles. GCP uses a hierarchical model: permissions are inherited from Organization → Folder → Project → Resource. IAM roles (predefined or custom) are assigned at project/folder/organisation level. GCP's hierarchy simplifies inheritance but can lead to over-sharing if not organised correctly. Azure uses RBAC (role-based access control) with built-in roles (Owner, Contributor, Reader) and custom roles. Azure also supports management groups (for hierarchical policy inheritance). AWS is most flexible but requires careful policy management to avoid privilege escalation. GCP is simplest to understand for hierarchical organisations (e.g., large enterprises with departments). Azure is strongest for enterprises already using Active Directory (Entra ID).
Q03 of 06SENIOR
Scenario: A client is heavily invested in Active Directory (on-premises), Office 365, and Windows Server. What specific Azure services would make their cloud migration smoother than AWS?
ANSWER
Azure AD (now Entra ID) integrates natively with on-premises Active Directory via Azure AD Connect, enabling single sign-on and group-based access without modifying existing infrastructure. Azure Virtual Desktop provides a managed Windows experience for virtual desktops. SQL Managed Instance offers near 100% compatibility with SQL Server, including agent jobs and linked servers. Azure Hybrid Benefit allows using existing Windows Server and SQL Server licenses in the cloud (up to 80% savings). Azure Site Recovery integrates with Hyper-V and VMware for disaster recovery. Azure DevOps integrates deeply with Office 365 for boards/wikis. AWS would require third-party tools (e.g., Okta for identity, FSx for Windows file servers, RDS for SQL with less compatibility) and cannot match the seamless Active Directory integration.
Q04 of 06SENIOR
Compare the networking models: What is the technical advantage of GCP's Global VPC over AWS's VPC Peering and Transit Gateway for a globally distributed microservices application?
ANSWER
GCP Global VPC allows a single VPC to span multiple regions with subnets per region. Traffic between subnets stays on Google's private network, avoiding public internet and inter-region data transfer fees ($0.08/GB saved). AWS requires a separate VPC per region, then uses VPC Peering (one-to-one, non-transitive) or Transit Gateway (hub-and-spoke, transitive) to connect them, incurring data transfer costs ($0.02/GB for peering, $0.09/GB for inter-region) and added latency. GCP's model reduces network complexity (one set of firewall rules, one routing table) and cost for multi-region architectures. For a microservices app with services in us-east-1 and eu-west-1 that need to communicate frequently, GCP's global VPC eliminates egress charges that would accumulate on AWS ($0.09/GB). The trade-off: global VPC has a larger blast radius — a misconfigured firewall rule affects all regions simultaneously.
Q05 of 06SENIOR
How do 'Preemptible VMs' (GCP) or 'Spot Instances' (AWS/Azure) work, and what type of workloads are they NOT suitable for?
ANSWER
Preemptible VMs (GCP) and Spot Instances (AWS/Azure) offer significant discounts (60-90%) but can be reclaimed by the cloud provider with short notice (30 seconds for GCP, 30 seconds to 5 minutes for AWS/Azure). They are suitable for fault-tolerant, stateless batch jobs, data processing, CI/CD runners, and any workload that can checkpoint progress and resume later. They are NOT suitable for stateful workloads (databases, stateful apps), time-sensitive jobs (user-facing APIs with SLAs), or workloads that cannot handle sudden termination without checkpointing. GCP's preemptible VMs have a 24-hour maximum lifetime; AWS and Azure spot instances can run indefinitely but can be interrupted at any time. Best practice: design spot workloads to handle interruption by using external storage (EBS volumes detach automatically) and queue-based architectures (SQS, Pub/Sub) to redrive failed tasks.
Q06 of 06SENIOR
What is 'Egress' and how do you architect a system to minimise data transfer costs between cloud providers or regions?
ANSWER
Egress is data transferred out of a cloud region to the internet or another region, typically charged per GB ($0.09/GB for AWS inter-region, $0.07/GB for Azure, $0.08/GB for GCP, but GCP's global VPC eliminates inter-region egress on its backbone). To minimise costs: (1) Use CDN (CloudFront, Azure CDN, Cloud CDN) to cache content at edge locations, reducing origin egress. (2) Place compute and storage in the same region to avoid inter-region egress entirely. (3) For multi-cloud, colocate services in same data centre (e.g., AWS Direct Connect + GCP Partner Interconnect) to use private peering with lower or zero egress. (4) Use data compression and deduplication before transfer. (5) For logs and analytics, use provider-native services (CloudWatch Logs, Log Analytics, Cloud Logging) rather than shipping between clouds. (6) If you must transfer between clouds, use a multi-cloud CDN (Cloudflare) as an intermediary caching layer.
01
Google Spanner vs AWS Aurora Global Database: When would you choose one over the other for a global financial application needing strong consistency?
SENIOR
02
Explain the difference in IAM philosophy: AWS Resource-Based Policies vs GCP Hierarchical Project/Folder Organization vs Azure RBAC.
SENIOR
03
Scenario: A client is heavily invested in Active Directory (on-premises), Office 365, and Windows Server. What specific Azure services would make their cloud migration smoother than AWS?
SENIOR
04
Compare the networking models: What is the technical advantage of GCP's Global VPC over AWS's VPC Peering and Transit Gateway for a globally distributed microservices application?
SENIOR
05
How do 'Preemptible VMs' (GCP) or 'Spot Instances' (AWS/Azure) work, and what type of workloads are they NOT suitable for?
SENIOR
06
What is 'Egress' and how do you architect a system to minimise data transfer costs between cloud providers or regions?
SENIOR
FAQ · 6 QUESTIONS
Frequently Asked Questions
01
Which cloud provider is cheapest for general compute workloads?
It depends on workload type and commitment. For predictable, long-running workloads with sustained use (>25% of month), GCP's automatic sustained-use discounts often yield the lowest cost (20-30% off without commitment). For short bursts (<25% of month), AWS spot instances are cheapest (up to 90% off). Azure with Hybrid Benefit can be cheapest if you have existing Windows or SQL Server licenses (up to 80% savings). Always model total cost including egress — GCP's global VPC saves on inter-region transfer, which can dominate bills. Use provider pricing calculators and consider 3-year TCO, not just on-demand rates.
Was this helpful?
02
Can I use multiple cloud providers together?
Yes, a multi-cloud strategy can leverage best-of-breed services (e.g., GCP for data analytics, AWS for broad tooling, Azure for identity). However, it increases operational complexity (multiple CLIs, IAM systems, billing dashboards), requires strong IaC practices (Terraform is the standard), and careful cost management (each provider bills separately). Start with one primary provider and expand only when clear value is proven (e.g., GCP's AI services for an AWS-based app). For most startups, multi-cloud is premature optimisation — focus on one provider, master it, then expand if needed.
Was this helpful?
03
Which cloud provider has the best developer experience?
GCP is often rated highest for developer experience due to gcloud CLI (intuitive, well-documented), console (clean, fast), consistent APIs (fewer surprises), and excellent Kubernetes support (GKE Autopilot). AWS has the largest ecosystem but a steeper learning curve — 200+ services with inconsistent CLI patterns (aws ec2 vs aws s3). Azure's tooling has improved significantly with Azure CLI and VS Code integration, especially for .NET developers. For startups, GCP's simplicity wins. For enterprises already using AWS, the talent pool is larger. For .NET shops, Azure is the natural fit.
Was this helpful?
04
How do I choose between AWS, Azure, and GCP for my startup?
Consider (1) Your team's existing skills – AWS is most common (easy to hire), GCP has steeper learning curve but better for AI/containers, Azure is rare outside enterprise. (2) Your target industry – Azure dominates enterprise (banks, healthcare, government) due to compliance certs, AWS in startups, GCP in data/AI. (3) Cost sensitivity – GCP's automatic discounts and cheaper egress benefit early-stage startups. (4) Compliance needs – Azure has most enterprise compliance certs (SOC, HIPAA, FedRAMP). (5) Funding – AWS has $100k+ credits for startups (Activate), GCP has $200k+ for AI/ML startups. Start with a free tier on each, but commit to one within 6 months to avoid multi-cloud overhead.
Was this helpful?
05
How do I handle identity and access across multiple cloud providers?
Use a federation approach: implement SAML/OIDC federation with a central identity provider (Okta, Azure AD, Auth0). Each provider uses that IdP for authentication. For cross-provider API access, use role-based access with delegated permissions via workload identity federation (AWS IAM Roles Anywhere, GCP Workforce Identity Federation, Azure Managed Identity). Avoid hardcoding service account keys — they become a security liability. Instead, use short-lived tokens from a central OAuth2 server. For machine-to-machine access, use mutual TLS with client certificates stored in a secrets manager like HashiCorp Vault.
Was this helpful?
06
What is the exit cost — how hard is it to leave a cloud provider once you're locked in?
Exit costs vary dramatically. AWS: data transfer egress (up to $0.09/GB), but you can export EC2 snapshots to S3, then download. Azure: similar egress fees, but integration with on-premises makes export easier (Azure Stack). GCP: lower egress fees ($0.08/GB) but the biggest lock-in is managed services (BigQuery, Spanner, GKE) — not easily migrated. Most startups don't need to exit; they need to avoid lock-in for strategic services. Use open-source tools (Kubernetes, Terraform, PostgreSQL, Redis) across providers. Avoid provider-specific services (DynamoDB, Cosmos DB, Bigtable) unless you have clear lock-in acceptance. The real cost of exit is not egress — it's rewriting application code tied to provider APIs.