Cloud Vendor Product Matrix#

Choosing between cloud vendors requires mapping equivalent services across providers. AWS has 200+ services. Azure has 200+. GCP has 100+. Cloudflare has 20+ but they are tightly integrated and edge-native. This article maps the services that matter for most applications – compute, serverless, databases, storage, networking, and observability – across all four vendors with pricing, availability, and portability for each.

How to Use This Matrix#

Each section maps equivalent products across vendors, then provides:

  • Pricing model: How you pay (per-request, per-hour, per-GB)
  • Free tier: What you get for $0
  • Portability: How easy it is to migrate to another vendor (High/Medium/Low)
  • Best for: When to choose each vendor’s offering

Portability scores mean:

  • High: Standard API or open protocol. Migration requires config changes only (e.g., S3 API, SQL, SMTP)
  • Medium: Custom API but portable concepts. Migration requires code changes but not architecture changes (e.g., Lambda to Workers)
  • Low: Deeply proprietary. Migration requires rearchitecting (e.g., DynamoDB, Cosmos DB, Durable Objects)

Global Presence#

MetricCloudflareAWSAzureGCP
Edge locations / PoPs330+ cities600+ CloudFront PoPs200+ PoPs200+ PoPs
Compute regionsN/A (runs at every PoP)33 regions, 105 AZs60+ regions40 regions, 121 zones
Countries120+30+ (regions)60+ (regions)40+ (regions)
ModelEdge-first (code runs at every PoP)Region-first (you choose where code runs)Region-firstRegion-first

Cloudflare is fundamentally different: code deploys to every edge location automatically. AWS, Azure, and GCP require you to choose regions and manage replication. This means Cloudflare has the lowest latency for globally distributed users by default, but you cannot pin workloads to specific regions (except with Durable Objects location hints or D1 data localization).

Serverless Compute#

FeatureCloudflare WorkersAWS LambdaAzure FunctionsGCP Cloud Run
RuntimeV8 isolatesContainer-basedContainer-basedContainer-based
LanguagesJS/TS, Rust (WASM), Python (beta)Node, Python, Java, Go, .NET, Ruby, RustNode, Python, Java, C#, PowerShellAny (Docker)
Cold start<5 ms100ms-1s (varies by runtime)100ms-2s0 (min instances) to 1-2s
Max execution30s CPU (paid)15 min10 min (Consumption), 60 min (Premium)60 min
Memory128 MB128 MB-10 GB1.5 GB (Consumption)32 GB
Pricing unitRequests + CPU msRequests + GB-secondsExecutions + GB-secondsvCPU-seconds + memory
Price per 1M requests$0.30$0.20 + compute$0.20 + compute~$0.40 (depends on config)
Free tier100K req/day (no expiry)1M req/mo + 400K GB-s1M req/mo2M req/mo, 180K vCPU-s
Free tier expiryNeverNever (Lambda itself)NeverNever
PortabilityMediumMediumMediumHigh (Docker)

Best for:

  • Cloudflare Workers: Latency-sensitive APIs, edge logic, globally distributed apps. Sub-5ms cold starts are unmatched.
  • AWS Lambda: Event-driven backends, complex AWS integrations (SQS, S3 triggers, Step Functions). Broadest trigger ecosystem.
  • Azure Functions: .NET workloads, Microsoft ecosystem integration, Event Grid / Service Bus triggers.
  • GCP Cloud Run: Docker-based workloads that need serverless scaling. Most portable (any container runs).

Container / VM Compute#

FeatureCloudflareAWSAzureGCP
Containers (managed)Containers (beta)ECS / FargateContainer Apps / ACICloud Run / GKE Autopilot
KubernetesEKS ($0.10/hr/cluster)AKS (free control plane)GKE ($0.10/hr/cluster, free Autopilot)
VMsEC2Virtual MachinesCompute Engine
Bare metalEC2 .metal instancesDedicated HostsSole-tenant nodes
Spot / preemptibleSpot Instances (up to 90% off)Spot VMs (up to 90% off)Spot VMs (up to 91% off)
GPU instancesP/G/Inf instancesNC/ND seriesA2/G2 instances
PortabilityN/AMedium (EC2), High (EKS/Docker)Medium (VMs), High (AKS/Docker)Medium (GCE), High (GKE/Docker)

Cloudflare does not offer traditional VMs or managed Kubernetes. Cloudflare Containers (beta) run Docker workloads at the edge but are not GA and lack the isolation guarantees needed for security-sensitive workloads. If you need VMs, Kubernetes, GPUs, or bare metal, you need AWS, Azure, or GCP.

Databases#

Relational#

FeatureCloudflare D1AWS RDSAzure SQL / DB for PGGCP Cloud SQL
EngineSQLitePostgreSQL, MySQL, MariaDB, Oracle, SQL ServerSQL Server, PostgreSQL, MySQLPostgreSQL, MySQL, SQL Server
ModelServerless (pay per query)Instance-based (pay per hour)Instance-based or serverlessInstance-based
ScalingAuto (reads at edge)Manual (read replicas)Auto (serverless tier)Manual (read replicas)
Max size10 GB128 TB (Aurora)100 TB64 TB
Free tier5B reads, 100M writes, 5 GB (no expiry)db.t3.micro 750 hrs/mo (12 months)750 hrs/mo (12 months)None
Monthly cost (small)$0-5$15-50+ (instance always running)$15-50+$10-40+
PortabilityMedium (SQLite dialect)High (standard SQL)High (standard SQL)High (standard SQL)

Best for:

  • D1: Small-to-medium apps, edge-read-heavy workloads, projects where zero management matters. Not for write-heavy or large databases.
  • RDS/Aurora: Production workloads needing PostgreSQL/MySQL compatibility, high write throughput, mature tooling.
  • Cloud SQL: GCP-native apps, same strengths as RDS in the GCP ecosystem.

Key-Value / Document#

FeatureCloudflare KVAWS DynamoDBAzure Cosmos DBGCP Firestore
ModelKey-value, eventually consistentDocument/KV, strongly consistent optionsMulti-model (document, graph, KV, column)Document, strongly consistent
Pricing$0.50/M reads, $5/M writesOn-demand: $1.25/M writes, $0.25/M readsRequest-based, varies by consistency$0.06/100K reads, $0.18/100K writes
Free tier100K reads/day (no expiry)25 GB, 25 WCU/25 RCU (no expiry)1000 RU/s, 25 GB (no expiry)50K reads, 20K writes/day (no expiry)
Max value size25 MB400 KB2 MB1 MB
Global replicationAutomatic (every PoP)Global Tables (opt-in)Multi-region writes (opt-in)Multi-region (opt-in)
PortabilityLow (custom API)Low (custom API)Low (custom API, partial Mongo compat)Low (custom API)

All key-value / document databases are low portability. Each has a proprietary API. Choosing one is a long-term commitment. KV is the simplest (just get/put with TTL) but also the most limited.

Object Storage#

FeatureCloudflare R2AWS S3Azure BlobGCP Cloud Storage
Egress$0$0.09/GB$0.087/GB$0.12/GB
Storage$0.015/GB/mo$0.023/GB/mo$0.018/GB/mo$0.020/GB/mo
Free tier10 GB storage (no expiry)5 GB (12 months)5 GB (12 months)5 GB (no expiry)
Archive tierInfrequent Access ($0.01/GB)Glacier ($0.004/GB), Deep Archive ($0.00099/GB)Archive ($0.002/GB)Coldline ($0.004/GB), Archive ($0.0012/GB)
APIS3-compatibleNative S3Blob APIGCS API (+ S3 interop)
CDN integrationBuilt-in (Cloudflare CDN)CloudFront (separate service)Azure CDN (separate)Cloud CDN (separate)
VersioningBetaGAGAGA
Lifecycle rulesYesYesYesYes
Max object5 TB5 TB190 TB (block blob)5 TB
PortabilityHigh (S3 API)High (S3 API is the standard)Medium (Blob API, different from S3)Medium (GCS API, S3 interop available)

Best for:

  • R2: Any workload where downloads are frequent. Zero egress makes it the cheapest option at scale for serving content.
  • S3: The default choice when you need the broadest ecosystem (event notifications, analytics, Glacier archiving).
  • Azure Blob: Azure-native apps, Archive tier for cold storage.
  • GCS: GCP-native apps, BigQuery integration for analytics on stored data.

CDN and Edge#

FeatureCloudflare CDNAWS CloudFrontAzure CDN / Front DoorGCP Cloud CDN
PoPs330+600+200+200+
Edge computeWorkers (V8 isolates)Lambda@Edge / CloudFront FunctionsAzure Functions (limited edge)
PricingFree (included with any Cloudflare plan)$0.085/GB (US), varies by region$0.081/GB (US), varies$0.08/GB (US)
Free tierUnlimited bandwidth1 TB/mo (12 months)NoneNone
DDoS protectionIncluded (all plans)AWS Shield Standard (free)Included with Front DoorCloud Armor ($5/mo + rules)
WAFIncluded (free plan: limited rules)$5/mo + $1/rule + $0.60/M requestsIncluded with Front Door PremiumCloud Armor ($5/mo + rules)
Custom domainsUnlimited, free SSLVia ACM (free cert) + distribution configVia Front Door configVia load balancer config
PortabilityMediumMediumMediumMedium

Cloudflare is the clear value leader for CDN. The free plan includes unlimited bandwidth, DDoS protection, basic WAF, and DNS. Every other vendor charges for bandwidth and treats DDoS/WAF as add-on services.

DNS#

FeatureCloudflare DNSAWS Route 53Azure DNSGCP Cloud DNS
Hosted zone costFree$0.50/zone/mo$0.50/zone/mo$0.20/zone/mo
Query costFree$0.40/M queries$0.40/M queries (first 1B)$0.40/M queries
DNSSECFree, one-clickSupportedSupportedSupported
Propagation<5 seconds typical60 seconds typical60 seconds typicalVaries
Health checksFree (limited)$0.50-0.75/endpoint/moVia Traffic Manager ($0.75/M queries)Via load balancer
Geo routingVia load balancing rulesGeolocation routing policyVia Traffic ManagerVia Cloud DNS routing
PortabilityHigh (standard DNS)High (standard DNS)High (standard DNS)High (standard DNS)

DNS is fully portable – it is an open standard. Cloudflare DNS is free with fast propagation, making it the default recommendation unless you need tight integration with Route 53 health checks or Traffic Manager.

Message Queues#

FeatureCloudflare QueuesAWS SQSAzure Service BusGCP Pub/Sub
ModelQueue (Workers-native)Queue (pull)Queue + Topics (push/pull)Topics + Subscriptions (push/pull)
Pricing$0.40/M messages$0.40/M requests (Standard)$0.05/M operations (Basic)$40/TiB ingested
Free tier1M messages/mo1M requests/moNone10 GB/mo
Max message size128 KB256 KB (up to 2 GB via S3)256 KB (Standard), 100 MB (Premium)10 MB
Max retention4 days14 days14 days (Standard)31 days
Dead letter queueYesYesYesYes
FIFO orderingYesYes (FIFO queues)Yes (sessions)Yes (ordering keys)
PortabilityLow (Workers API)Medium (HTTP API)Medium (AMQP)Medium (HTTP/gRPC API)

Best for:

  • Cloudflare Queues: Connecting Workers to Workers. Simplest setup if you are already on Cloudflare.
  • SQS: The default queue for AWS workloads. Battle-tested, simple, pairs with Lambda triggers.
  • Service Bus: Enterprise messaging with AMQP, sessions, and complex routing. .NET ecosystem.
  • Pub/Sub: Fan-out messaging (one message, many subscribers). Analytics pipelines, event streaming.

Observability#

FeatureCloudflareAWSAzureGCP
MetricsAnalytics EngineCloudWatchMonitorCloud Monitoring
LogsWorkers Logpush / wrangler tailCloudWatch LogsLog AnalyticsCloud Logging
TracingX-RayApplication InsightsCloud Trace
DashboardsCloudflare dashboard (limited)CloudWatch DashboardsAzure Monitor WorkbooksCloud Monitoring Dashboards
Alerting– (use external)CloudWatch AlarmsAzure AlertsCloud Monitoring Alerting
CostAnalytics Engine: $0.25/M data pointsCloudWatch: $0.30/metric/mo + $0.50/GB logsLog Analytics: $2.76/GB ingested$0.50/metric/mo + $0.50/GiB logs
PortabilityLowLowLowLow

Cloudflare’s observability is the weakest of the four. There is no built-in tracing, limited alerting, and no equivalent to CloudWatch Dashboards. For production observability, pair Cloudflare with external tools (Datadog, Grafana Cloud, Axiom). AWS, Azure, and GCP all have comprehensive built-in observability stacks.

Identity and Access Management#

FeatureCloudflareAWS IAMAzure AD / Entra IDGCP IAM
ModelAPI tokens + Zero TrustUsers, Roles, PoliciesUsers, Groups, Roles, Service PrincipalsUsers, Service Accounts, Roles
GranularityPer-service tokensPer-action policiesPer-action role assignmentsPer-action policies
Cross-accountCross-account roles (STS)Azure LighthouseCross-project roles
MFAYes (dashboard)Yes (per-user)Yes (Conditional Access)Yes (per-user)
Service identityAPI tokensIAM Roles for servicesManaged IdentitiesService Accounts + Workload Identity
PortabilityLowLowLowLow

IAM is always low portability – every vendor’s permission model is deeply proprietary. Cloudflare’s IAM is simpler (API tokens scoped to services) but less granular than AWS/Azure/GCP.

Pricing Model Comparison#

DimensionCloudflareAWSAzureGCP
Compute billingPer-request + CPU timePer-request + GB-secondsPer-execution + GB-secondsPer-vCPU-second + memory
Storage billingPer-GB/monthPer-GB/monthPer-GB/monthPer-GB/month
Egress (data out)$0 (Workers, R2, Pages)$0.09/GB$0.087/GB$0.12/GB
Bandwidth (CDN)Free (unlimited)$0.085/GB (US)$0.081/GB (US)$0.08/GB (US)
Commitment discountsAnnual plan (minor savings)Reserved Instances, Savings Plans (up to 72% off)Reserved VMs (up to 72% off)CUDs (up to 57% off)
Billing complexitySimple (few line items)Complex (dozens of line items per service)ComplexComplex
Cost predictabilityHigh (per-operation, no idle cost)Low-Medium (instance-hours, NAT GW, data transfer)Low-MediumLow-Medium

The fundamental pricing difference: Cloudflare charges per operation with zero egress. AWS/Azure/GCP charge per instance-hour, per-GB-transferred, and per-operation, with egress fees on nearly everything. This makes Cloudflare extremely cost-predictable but also means you cannot optimize costs through reserved instances or committed use discounts (because there are no instances to reserve).

Free Tier Summary#

CategoryCloudflareAWSAzureGCP
Compute100K req/day1M Lambda req/mo, 750 hrs EC2 (12mo)1M Functions/mo, 750 hrs B1s VM (12mo)2M Cloud Run req/mo, 1 e2-micro VM
DatabaseD1: 5B reads, 5 GBDynamoDB: 25 GB. RDS: 750 hrs (12mo)Cosmos DB: 1000 RU/s. SQL: 750 hrs (12mo)Firestore: 50K reads/day
Object storageR2: 10 GB, $0 egressS3: 5 GB (12mo)5 GB (12mo)5 GB
KV / CacheKV: 100K reads/dayElastiCache: noneRedis: noneMemorystore: none
CDN bandwidthUnlimited1 TB/mo (12mo)NoneNone
DNSFree (unlimited)$0.50/zone + $0.40/M queries$0.50/zone$0.20/zone
ExpiryNever12 months for most12 months for mostMixed (some never, some 90-day)

Cloudflare has the most generous permanent free tier. AWS has the broadest free tier but most of it expires after 12 months (RDS, EC2, S3, CloudFront). GCP’s free tier is mixed – some services are always-free (e2-micro, Firestore), others are trial credits. Azure is similar to AWS with 12-month limits on key services.

Portability Summary#

CategoryMost PortableLeast Portable
Serverless computeCloud Run (Docker)All others (custom runtimes/APIs)
Relational DBAWS RDS, Azure SQL, Cloud SQL (standard SQL)D1 (SQLite dialect, smaller ecosystem)
Object storageR2, S3 (S3 API is the standard)Azure Blob (different API)
Key-valueAll are low portabilityDynamoDB, Cosmos DB, KV (all proprietary)
DNSAll are high portability
CDNAll are medium portability
QueuesSQS, Pub/Sub (HTTP APIs)Cloudflare Queues (Workers-only)
IAMNone are portableAll are deeply proprietary

The most portable stack: Docker containers (Cloud Run / Fly.io) + PostgreSQL (any managed provider) + S3-compatible storage (R2 or S3) + standard DNS. This combination lets you move between vendors by changing configuration, not code.

The least portable stack: Lambda with DynamoDB triggers + SQS + CloudFront Functions + Cognito. Every component is AWS-specific. Migration requires a full rewrite.

Choosing a Vendor#

For most new projects, evaluate these criteria in order:

  1. Do you need specific managed services? If your project depends on SageMaker, BigQuery, Active Directory integration, or another vendor-specific service, that vendor wins by default.

  2. What is your budget? At $0-50/month, Cloudflare’s free tier and per-operation pricing is hard to beat. At $500+/month, AWS/Azure/GCP commitment discounts become significant.

  3. Where are your users? If globally distributed, Cloudflare’s edge-first model gives the lowest latency without configuration. If concentrated in one region, a regional deployment on any vendor works.

  4. What is your team’s expertise? The vendor your team already knows is often the right choice. Cloud expertise takes months to build. Switching vendors means retraining, not just reconfiguring.

  5. How much operational overhead can you absorb? Cloudflare requires the least ops work (no regions, no VPCs, no security groups). AWS offers the most control but demands the most operational investment.

When none of these criteria produce a clear winner, default to Cloudflare for APIs and static sites (lowest cost, least ops), AWS for complex backends (broadest services), or GCP for data/ML workloads (BigQuery, Vertex AI).