Cloud, in practice

The services the course uses, side by side on AWS, Google Cloud and Azure, with the self-hosted option. Then what real companies chose, in their own words.

Equivalents

RoleAWSGoogle CloudAzureSelf-hosted
Delivery
CDNAll bill per request and per GB out; Front Door also routes globally.Amazon CloudFrontCloud CDNMedia CDNAzure Front DoorVarnishNGINX
Code at the edgeFront Door offers rules, not your own code; keep edge logic small.CloudFront FunctionsLambda@EdgeService ExtensionsFront Door rules engine
DNS and traffic routingRoute 53 has latency and failover routing built in; Azure splits it out.Amazon Route 53Cloud DNSAzure DNSAzure Traffic ManagerCoreDNSBIND
Global front door (anycast)Google's global load balancer serves many Regions from one anycast IP.AWS Global AcceleratorGlobal external Application Load BalancerAzure Front Door
Layer 7 load balancerPricing units differ (LCUs, rules, capacity units); new connections often dominate.Application Load BalancerApplication Load BalancerAzure Application GatewayEnvoyHAProxy
Layer 4 load balancerThe choice for millions of long-lived connections and fixed IPs.Network Load BalancerExternal passthrough Network Load BalancerAzure Load BalancerHAProxyKatran
API gatewayPriced per request: keys and quotas are useful, hot paths get expensive.Amazon API GatewayAPI GatewayApigeeAzure API ManagementKong GatewayEnvoy Gateway
Outbound internet (NAT)AWS NAT charges per GB; send S3 and DynamoDB traffic through gateway endpoints.NAT gatewayCloud NATAzure NAT Gateway
Private connectivity to servicesReach managed services and partners' APIs on private IPs, with no internet path or NAT. AWS interface endpoints bill per hour per zone plus per GB; S3 and DynamoDB gateway endpoints are free.AWS PrivateLinkPrivate Service ConnectAzure Private Link
Dedicated link to your data centreA private circuit with steadier latency than a VPN. Data out from US Regions over Direct Connect is $0.02 per GB, against about $0.09 over the internet. Getting a circuit installed takes time, so teams often start with a site-to-site VPN.AWS Direct ConnectCloud InterconnectAzure ExpressRoute
Compute
Virtual machinesSpot capacity is far cheaper but can be reclaimed at short notice.Amazon EC2Compute EngineAzure Virtual MachinesOpenStack
Serverless containersCloud Run and Container Apps scale to zero on requests; Fargate services don't.Amazon ECS on AWS FargateCloud RunAzure Container AppsKnative
KubernetesSame Kubernetes API everywhere; node management and upgrades differ.Amazon EKSGoogle Kubernetes EngineAzure Kubernetes ServiceKubernetes
Container registryKeep images in the region that pulls them, scan them for vulnerabilities, and set lifecycle rules so old images don't pile up storage.Amazon ECRArtifact RegistryAzure Container RegistryHarbor
FunctionsLambda runs one request per environment; Cloud Run functions can share an instance.AWS LambdaCloud Run functionsAzure FunctionsOpenFaaSKnative Functions
Service discovery and meshMost teams need discovery and retries long before they need a full mesh.ECS Service ConnectAWS Cloud MapCloud Service MeshIstio-based service mesh add-on for AKSIstioLinkerdConsul
Data
Managed Postgres and MySQLThe classic engine on managed VMs; replicas copy data over the network.Amazon RDSCloud SQLAzure Database for PostgreSQLAzure Database for MySQLPostgreSQLMySQL
Cloud-native relationalStorage is separate from compute, so replicas share one volume. Hyperscale is SQL Server; HorizonDB (Postgres) is in preview.Amazon AuroraAlloyDB for PostgreSQLAzure HorizonDB (preview)Azure SQL Database HyperscaleNeon
Distributed SQLAzure's option shards Postgres with Citus; Cosmos DB for PostgreSQL retires in 2029.Amazon Aurora DSQLSpannerAzure Database for PostgreSQL elastic clustersCockroachDBYugabyteDBVitessCitus
Key-value and wide-columnDynamoDB bills per request; Bigtable per node; Cosmos DB per request unit.Amazon DynamoDBAmazon KeyspacesBigtableAzure Cosmos DBApache CassandraScyllaDB
Document databaseMongoDB-compatible services differ from MongoDB in features; test before migrating.Amazon DocumentDBFirestoreAzure Cosmos DB for NoSQLAzure Cosmos DB for MongoDBMongoDB
CacheCaches can lose recent writes on failover; MemoryDB keeps a durable log.Amazon ElastiCacheAmazon MemoryDBMemorystoreAzure Managed RedisValkeyRedis
Time seriesNo dedicated Google service; Timestream for LiveAnalytics is closed to new customers.Amazon Timestream for InfluxDBAzure Data ExplorerPrometheusInfluxDBClickHouse
SearchOpenSearch is the engine you tune; Google's and Azure's are managed relevance services.Amazon OpenSearch ServiceAgent SearchAzure AI SearchOpenSearchElasticsearch
Vector searchIf your data is already in Postgres, pgvector avoids a second system.OpenSearch Service vector searchAmazon S3 VectorsVector SearchAlloyDB AIAzure AI Search vectorspgvectorMilvusQdrant
Messaging
QueueOrdering is per group: SQS FIFO message groups, Service Bus sessions.Amazon SQSPub/Sub (pull subscriptions)Azure Service Bus queuesAzure Queue StorageRabbitMQ
Pub/sub fan-out and event routingFan-out copies a message per subscriber; replay is limited (EventBridge archives, Pub/Sub seek).Amazon SNSAmazon EventBridgePub/SubEventarcAzure Event GridAzure Service Bus topicsNATSRabbitMQ
Task queue (rate-limited HTTP dispatch)Only Google has a dedicated service; elsewhere compose a queue and workers.Cloud TasksCelerySidekiq
Event stream (managed log)Kinesis orders within a shard; Pub/Sub only within an ordering key.Amazon Kinesis Data StreamsPub/SubAzure Event HubsApache KafkaRedpanda
Managed KafkaEvent Hubs speaks the Kafka protocol on its own engine; MSK runs real Kafka.Amazon MSKManaged Service for Apache KafkaAzure Event Hubs (Kafka endpoint)Apache Kafka
Email sendingGoogle Cloud has no first-party sending service; reputation is per account.Amazon SESAzure Communication Services EmailPostfix
Push notifications and SMSAmazon Pinpoint reaches end of support on 30 October 2026.Amazon SNS mobile pushAWS End User MessagingFirebase Cloud MessagingAzure Notification HubsAzure Communication Services SMS
Storage
Object storageRequests cost as much as storage for small objects; pack them. MinIO's open-source repository was archived in 2026.Amazon S3Cloud StorageAzure Blob StorageCephGarage
Archive storageMinimum storage durations and retrieval fees apply; coldest tiers take hours.S3 Glacier storage classesCloud Storage Archive classBlob Storage archive tier
Block storageZonal: a disk lives in one zone, so replicate across zones yourself.Amazon EBSPersistent Disk and HyperdiskAzure Managed DisksCeph RBD
File storage (NFS, SMB)Use when software needs a shared file system; object storage is cheaper.Amazon EFSAmazon FSxFilestoreAzure FilesCephFS
BackupOne policy for databases, disks and file systems. Copy backups to another account and region, lock the vault so a compromised admin can't delete them, and test restores.AWS BackupBackup and DR ServiceAzure Backuprestic
Database migration and CDCChange data capture reads the database log; watch replication slots.AWS Database Migration ServiceDatabase Migration ServiceDatastreamAzure Database Migration ServiceDebezium
Analytics
Stream processingDataflow runs Apache Beam; Azure's is SQL-first, not Flink.Amazon Managed Service for Apache FlinkDataflowAzure Stream AnalyticsApache FlinkKafka Streams
Batch processing (Spark)Google's service was called Dataproc until its recent rename.Amazon EMRAWS GlueManaged Service for Apache SparkAzure DatabricksMicrosoft FabricApache Spark
Data warehouseBigQuery charges per data scanned or slot; Redshift per cluster or serverless capacity.Amazon RedshiftBigQueryFabric Data WarehouseClickHouse
SQL over files in object storageCharged by data scanned: columnar files and partitions cut the bill.Amazon AthenaBigQuery external tablesFabric SQL analytics endpointTrinoDuckDB
Security
Web application firewallBilled per request it sees: attach it to every public entry, or only behind the CDN if the origin accepts nothing else. Scope-down statements cut Bot Control and Fraud Control fees.AWS WAFGoogle Cloud ArmorAzure Web Application FirewallCoraza
DDoS protectionBasic network-layer protection is free. Paid tiers (Shield Advanced is $3,000 a month on a 1-year term) add credits for what you scaled up during an attack and access to a response team. A CDN in front absorbs most floods.AWS ShieldGoogle Cloud ArmorAzure DDoS Protection
Cloud access controlAWS policies attach to principals and resources; Google and Azure bind roles at scopes.AWS IAMIAMAzure role-based access controlMicrosoft Entra IDOpen Policy Agent
Workload identity (no stored keys)Short-lived credentials from the platform beat long-lived keys in config.IAM roles for tasks and EKS Pod IdentityAttached service accountsWorkload Identity FederationManaged identitiesSPIFFE and SPIRE
Encryption keys (KMS)KMS calls have per-Region request quotas; cache data keys (envelope encryption).AWS KMSCloud KMSAzure Key VaultOpenBaoHashiCorp Vault
SecretsRotation is the hard part; Vault's per-client users and RDS IAM, Cloud SQL IAM or Entra login tokens avoid long-lived DB passwords.AWS Secrets ManagerParameter StoreSecret ManagerAzure Key Vault secretsOpenBaoHashiCorp Vault
Customer sign-inMoving users off a sign-in service later is hard; password hashes rarely export.Amazon CognitoIdentity PlatformMicrosoft Entra External IDKeycloakOry
TLS certificatesACM certificates are free on load balancers and CloudFront; exportable ones cost extra and last 198 days. Public certificates are capped at 200 days since March 2026 and fall to 47 days by 2029, so automate renewal.AWS Certificate ManagerCertificate ManagerKey Vault certificatesLet's Encryptcert-manager
Operations
MetricsCloudWatch prices each custom metric, managed Prometheus each sample: watch label cardinality.Amazon CloudWatchAmazon Managed Service for PrometheusCloud MonitoringManaged Service for PrometheusAzure MonitorAzure Monitor managed service for PrometheusPrometheusVictoriaMetrics
LogsIngestion is the big cost; sample successful requests, keep every error.Amazon CloudWatch LogsCloud LoggingAzure Monitor LogsGrafana LokiOpenSearch
TracingInstrument once with OpenTelemetry and keep the choice of backend open.AWS X-RayCloud TraceApplication InsightsOpenTelemetryJaegerGrafana Tempo
Audit loggingWho changed what. Control-plane changes are logged by default (CloudTrail keeps 90 days free); data events such as S3 object reads are off until you enable them, at $0.10 per 100,000 on AWS. Send them to a separate, locked account.AWS CloudTrailCloud Audit LogsAzure Monitor activity log
Workflow orchestrationStep Functions bills per state transition; Durable Functions and Temporal workflows are code.AWS Step FunctionsWorkflowsAzure Logic AppsDurable FunctionsTemporal
SchedulerSchedulers fire at least once: make the job idempotent.Amazon EventBridge SchedulerCloud SchedulerAzure Functions timer triggerKubernetes CronJob
Data pipeline orchestrationAWS and Google run Airflow; Azure Data Factory is its own pipeline engine.Amazon MWAACloud ComposerAzure Data FactoryApache AirflowDagster
Infrastructure as codeGoogle's Infrastructure Manager runs Terraform; Terraform works on all three.AWS CloudFormationAWS CDKInfrastructure ManagerBicepTerraformOpenTofuPulumi
AI
Foundation model APIsGoogle renamed Vertex AI in April 2026; check which Regions process your data.Amazon BedrockGemini Enterprise Agent PlatformMicrosoft FoundryvLLMOllama
Hosting your own modelManaged endpoints add a premium over the same GPUs on Kubernetes.Amazon SageMaker AI endpointsAgent Platform EndpointsAzure Machine Learning online endpointsvLLMKServe
GPU and accelerator capacityCapacity is scarce: reserve ahead. Google also offers its own TPUs.EC2 accelerated instancesCapacity Blocks for MLGPUs on Compute EngineCloud TPUGPU virtual machinesNVIDIA GPU Operator

Service names and links checked 2026-10-20. Clouds rename and retire services; follow the links for the current details.

Building blocks

One page per role: how the options differ, the limits that bite, how they charge, and who runs them in production.

CDN and edgeCloudFront, Cloud CDN and Front Door: what they cache, what they charge for, and code at the edge.Load balancingLayer 4 and layer 7 balancers, global front doors, and the pricing units that surprise people.ContainersServerless containers or Kubernetes: Fargate, Cloud Run, Container Apps, EKS, GKE and AKS.FunctionsLambda, Cloud Run functions and Azure Functions: cold starts, concurrency and the cost crossover.Relational databasesManaged Postgres and MySQL, cloud-native engines like Aurora and AlloyDB, and distributed SQL.Key-value and document storesDynamoDB, Bigtable, Firestore and Cosmos DB: data models, partition limits and consistency.CachesManaged Valkey and Redis on each cloud: node-based or serverless, durability and failover.Queues and pub/subSQS and SNS, Pub/Sub and Cloud Tasks, Service Bus: delivery guarantees, ordering and limits.Event streamsKinesis, MSK, Pub/Sub, Managed Kafka and Event Hubs: when you need a log, and which one.Object storageS3, Cloud Storage and Blob Storage: storage classes, request costs, consistency and limits.Search and vector searchOpenSearch, Azure AI Search, Google's Agent Search and Vector Search, and pgvector: text, geo and vector queries.Data processing and analyticsStream and batch engines and warehouses: Flink, Spark, Dataflow, BigQuery, Redshift, Athena, Fabric.Workflows and schedulingStep Functions, Workflows, Logic Apps and Durable Functions, and when Temporal fits better.Identity, keys and secretsIAM, KMS and secret stores on each cloud, and how workloads get credentials without passwords.ObservabilityMetrics, logs and traces: CloudWatch, Cloud Monitoring, Azure Monitor, and the OpenTelemetry route.AI platformsBedrock, Google's Agent Platform and Microsoft Foundry, or your own GPUs: models, quotas, data residency and cost.

Field notes

Real decisions, each told from the company's own write-up, talk or paper, with links to the source.

Dropbox leaves S3 for its own storageWhy an exabyte-scale customer built Magic Pocket, and what it took to move the data.Discord moves trillions of messages to ScyllaDBHot partitions, garbage collection pauses, and a migration done with a data service in front.Figma shards PostgresVertical partitioning first, then horizontal sharding behind a query proxy.Slack moves to VitessFrom workspace-sharded MySQL to Vitess, and the migration that took years.GitHub partitions MySQLSplitting one big cluster by domain, with tooling to find the queries that cross boundaries.Shopify scales a monolith with podsIsolated pods of shops, each with its own databases, behind one Rails codebase.Segment goes back to a monolithWhat a hundred-plus microservices cost a small team, and the consolidation that followed.Prime Video rebuilds a serverless pipeline as one serviceStep Functions and Lambda at video-frame scale, and why the team moved it into one process.Uber switches from Postgres to MySQLWrite amplification, replication and upgrades: the 2016 write-up and the debate it started.Stripe migrates data without downtimeDual writes, backfills and verification: the four-step pattern for changing live data models.Netflix moves to AWSSeven years from data centre to cloud, and the resilience practices that came out of it.37signals leaves the cloudThe cost case for owned hardware, what it actually saved, and what it gave up.Amazon Aurora: the log is the databaseThe SIGMOD 2017 paper: shipping redo logs to storage instead of pages, and quorum writes across zones.Amazon DynamoDB after ten yearsThe USENIX ATC 2022 paper: how DynamoDB differs from Dynamo, and predictable performance at scale.LinkedIn builds KafkaWhy LinkedIn wrote a log-based messaging system, and the design choices in the original paper.