The same building blocks exist on every big cloud, under different names. This page maps them side by side: a one-line definition, the current product name on each cloud, what to use it for, and what to remember about security, cost and patterns. Each category also lists the .NET 10 SDK packages for all three clouds.
Service mapping based on ByteByteGo's Compare Cloud cheat sheet (PDF). The definitions, tips and extra rows are our own, and product names were checked against official docs in October 2026. The PDF also has an Oracle Cloud column; this page covers Azure, AWS and GCP only.
Four ideas make every row easier to read: who is responsible for what, how each cloud names its locations, how you pay, and how each cloud decides who can do what.
1. Shared responsibility
The cloud always secures the buildings, hardware and hypervisor. The more managed the service, the more the cloud takes on. You always own your data, your identities and access rules, and your configuration.
2. Regions and zones
Concept
Azure
AWS
GCP
Region (a metro area with several data centres)
Region, e.g. australiaeast (Sydney)
Region, e.g. ap-southeast-2 (Sydney)
Region, e.g. australia-southeast1 (Sydney)
Zone (separate power, cooling, network)
Availability zones 1, 2, 3. The numbers are logical and map differently per subscription
Availability Zones ap-southeast-2a/b/c. Names map per account; AZ IDs like apse2-az1 are fixed
Zones australia-southeast1-a/b/c
DR partner region
Many regions have a paired region (Australia East ↔ Australia Southeast). Newer regions may not
No pairs. You pick the second region
No pairs. Dual-region and multi-region options for some services
Private network scope
VNet is regional
VPC is regional, subnets live in one AZ
VPC is global, subnets are regional
Australian regions
Australia East, Southeast, Central (Canberra)
Sydney, Melbourne (ap-southeast-4)
Sydney, Melbourne (australia-southeast2)
3. Pricing models
Model
Azure
AWS
GCP
Remember
On-demand (pay per second or hour, no commitment)
Pay-as-you-go
On-Demand
On-demand, plus automatic sustained use discounts on some machine families
Most expensive per hour. Fine for spiky or new workloads
Commit 1 or 3 years
Reservations, Azure savings plan for compute
Reserved Instances, Savings Plans
Committed use discounts (resource-based or spend-based)
Big discounts for steady load. Commit only to your proven baseline
Spare capacity
Spot VMs
EC2 Spot Instances
Spot VMs (preemptible VMs is the older name)
Up to ~90% off, but can be taken back at short notice
Bring your licences
Azure Hybrid Benefit (Windows Server, SQL Server)
BYOL, often on Dedicated Hosts
BYOL on sole-tenant nodes
Licences can be the biggest line for SQL Server workloads
Data transfer
Data in is mostly free. Data out to the internet, between regions and (on some clouds) between zones is billed per GB
Egress is the hidden cost of multi-cloud and chatty designs
4. Identity model
Aspect
Azure
AWS
GCP
Directory for people
Microsoft Entra ID
IAM Identity Center (usually federated to your IdP)
Cloud Identity or Google Workspace
Resource hierarchy
Management groups → subscriptions → resource groups → resources
Organizations → OUs → accounts → resources
Organization → folders → projects → resources
Granting access
Azure RBAC role assignment at a scope
IAM policies (identity-based and resource-based) on roles
IAM allow policy binds a principal to a role on a resource
Org guardrails
Azure Policy
Service control policies (SCPs)
Organization Policy
Identity for code
Managed identities
IAM roles (instance profile, task role, EKS Pod Identity)
Service accounts attached to the resource
Billing and blast-radius boundary
Subscription
Account
Project
Security: design zones and access first. Use at least 2 zones for production, and give code an identity instead of a password on every cloud.
Cost: on-demand for new or spiky load, commitments for the steady baseline, spot for work that can restart. Watch egress.
Pattern: map by capability, not by name. "S3 = Blob = Cloud Storage" is useful, but limits, consistency and pricing still differ.
Azure, AWS or GCP? The names change. The building blocks don't ☁️
🧩 Every cloud has compute, storage, networking, databases, messaging, AI and identity
🛡️ Shared responsibility: the more managed the service, the less you patch. Data and access are always yours
💰 On-demand for spiky load, commit for the baseline, spot for restartable work
🌏 GCP VPCs are global. Azure VNets and AWS VPCs are regional
Learn the capability first, then the three names. What surprised you most moving between clouds?
Where your code runs. Pick by how much of the server you want to manage, from a full VM down to a single function.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
Virtual machines: a server you rent by the second. You own the OS
Virtual Machines
EC2
Compute Engine
Lift-and-shift, legacy apps, custom OS or licences
You patch the OS · right-size, then commit · build from images, not by hand
VM autoscaling group: identical VMs that grow and shrink with load
Virtual Machine Scale Sets
EC2 Auto Scaling groups
Managed instance groups
Stateless web tiers, workers
Spread across zones · scale on metrics
Spare-capacity VMs: deep-discount VMs the cloud can take back
Spot VMs
EC2 Spot Instances
Spot VMs
Batch, CI runners, test, risk runs
Up to ~90% off · notice: Azure ~30 s, AWS 2 min, GCP ~30 s · checkpoint work
Web app platform (PaaS): deploy code; the platform runs and patches servers
App Service
Elastic Beanstalk
App Engine
Web apps and APIs with little ops
Use private endpoints and VNet integration · fewer knobs than VMs
Functions (FaaS): run a small function per event, pay per run
Azure Functions (Flex Consumption plan)
Lambda
Cloud Run functions
Event handlers, glue code, spiky loads
Cold starts and run-time limits · can cost more than containers at high, steady volume
Batch jobs: a managed queue of big parallel jobs on a VM pool
Azure Batch
AWS Batch
Batch
Simulations, rendering, overnight risk
Pair with spot · pay only for the VMs used
🔄 Renamed / retired (checked Oct 2026)
Google Cloud Functions → Cloud Run functions (August 2024). The PDF still says "Cloud Functions". (cloud.google.com)
Azure Functions Linux Consumption plan retires on 30 September 2028. New apps should use Flex Consumption. (learn.microsoft.com)
Security: give every VM, app and function a managed identity or role, and no public IP unless it really serves the internet. Use a bastion or session manager instead of open RDP/SSH.
Cost: right-size first, then buy reservations, savings plans or committed use discounts for the baseline. Turn dev and test off at night.
Pattern: prefer the most managed option that fits. Functions for events, containers for services, VMs only when you must.
Lock-in: plain VMs and containers move between clouds easily. Function triggers and bindings don't.
Manage instances. Run a minimal API in Lambda with AddAWSLambdaHosting; annotations generate the handler code. Credentials come from the default chain (env vars, profile or SSO, IAM role)
Google Cloud
Google.Cloud.Compute.V1; Google.Cloud.Functions.Hosting (Functions Framework for .NET)
Manage VMs. Write Cloud Run functions in C#. Auth uses Application Default Credentials (ADC)
Model functions and web apps in the AppHost and deploy them. The AWS integration adds CloudFormation/CDK resources and local Lambda support
Managed function runtimes can lag behind the newest .NET release. Check the supported runtime list, or ship a container image (Lambda, Container Apps and Cloud Run all accept one) to run .NET 10 today.
16.3 Containers & Kubernetes Added
Package the app and its runtime as an image, then let a managed platform run, scale and heal it. Choose serverless containers first and Kubernetes when you need its control.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
Managed Kubernetes: the cloud runs the control plane; you run workloads
AKS
EKS
GKE
Many services, platform teams, portability
Control-plane fee on EKS, GKE and AKS Standard tier · you still own upgrades, policies and add-ons
Hands-off Kubernetes: Kubernetes API with nodes managed for you
AKS Automatic
EKS Auto Mode
GKE Autopilot
Kubernetes without node care
Less node control · Autopilot bills for pod resources
Serverless containers: give it an image; it runs, scales and serves HTTPS
Azure Container Apps
ECS on Fargate (ECS Express Mode for simple web apps)
Cloud Run
APIs, workers, event consumers
Container Apps and Cloud Run can scale to zero · Fargate bills per running task
Run-to-finish containers: start, do the job, stop
Container Apps jobs, Container Instances
ECS tasks on Fargate
Cloud Run jobs
DB migrations, reports, batch steps
Set timeouts and retries · secrets from the vault, not baked into the image
Container registry: private store for images
Azure Container Registry
Amazon ECR
Artifact Registry
Store and scan images near where they run
Private endpoint · scan on push · same region as the runtime to avoid egress
Service-to-service networking: discovery, mTLS and traffic rules
Istio-based service mesh add-on for AKS; Dapr in Container Apps
ECS Service Connect, VPC Lattice
Cloud Service Mesh
Zero-trust traffic between microservices
Adds latency and ops work · only if you need it
🔄 Renamed / retired (checked Oct 2026)
Google Container Registry → Artifact Registry. Container Registry shut down on 18 March 2025. (cloud.google.com)
Azure Spring Apps retires on 31 March 2028 and has been closed to new customers since 17 March 2025. Microsoft points to Container Apps or AKS. (learn.microsoft.com)
AWS App Runner is closed to new customers (from 30 April 2026). AWS recommends ECS Express Mode. (docs.aws.amazon.com)
AWS App Mesh was discontinued on 30 September 2026. Use ECS Service Connect or VPC Lattice. (docs.aws.amazon.com)
GKE Enterprise / Anthos: since September 2025, GKE is one paid offering with extra features sold as add-ons. (cloud.google.com)
Security: pull images only from your private registry, run as non-root, and give each workload its own identity (workload identity on AKS and GKE, EKS Pod Identity or IRSA on EKS).
Cost: scale-to-zero platforms (Container Apps, Cloud Run) suit low or bursty traffic. A busy Kubernetes cluster is cheaper per request but costs people time.
Pattern: start on serverless containers. Move to Kubernetes when you need custom networking, operators, or dozens of services under one platform team.
Lock-in: the image is portable; the platform config (Bicep, task definitions, Cloud Run YAML) is not. Kubernetes YAML moves best.
.NET 10 How to implement it
Cloud
Packages
Use them for
Any
built-indotnet publish /t:PublishContainer
Build an OCI image from the SDK, no Dockerfile needed, and push it to any registry
Deploy the whole AppHost to Container Apps (with azd), or generate Kubernetes deployment files
16.4 Storage: object, block, file & archive Added
Where bytes live. Object storage for files and data lakes, block storage as a VM's disk, file shares for apps that need a drive letter, and archive for records you must keep but rarely read.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
Object storage: unlimited files ("objects") in buckets over HTTPS
Blob Storage
S3
Cloud Storage
Documents, backups, logs, static sites
Block public access · short-lived signed URLs for sharing · lifecycle rules to cheaper tiers
Data lake storage: object storage tuned for analytics, with folders and ACLs
Azure Data Lake Storage, OneLake (Fabric)
S3 (+ S3 Tables, Lake Formation)
Cloud Storage (+ BigLake)
Raw → curated data for Spark and SQL
Open formats (Parquet, Delta, Iceberg) reduce lock-in
Block storage: a virtual disk attached to one VM
Managed Disks
EBS
Persistent Disk, Hyperdisk
VM boot and data disks, databases on VMs
Zonal: copy snapshots to another zone or region · encrypted at rest by default
Shared file storage: a network share many servers mount (SMB/NFS)
Azure Files, Azure NetApp Files
EFS (NFS), FSx (Windows, NetApp ONTAP, Lustre)
Filestore, NetApp Volumes
Lift-and-shift apps that need a shared drive
Private access only · some tiers bill for provisioned size, not used size
Archive: very cheap storage for data you rarely read
Blob Archive tier
S3 Glacier Deep Archive
Cloud Storage Archive class
7-year records, compliance copies
Minimum stay 180 / 180 / 365 days · Azure and AWS reads take hours; GCP reads are instant but cost more per GB
Managed backup: policy-based backups across services
Azure Backup
AWS Backup
Backup and DR Service
VM, database and file backups
Immutable vaults in a separate subscription/account/project protect against ransomware
Corrected from the PDF: "File Storage" is Azure Files and "File Store" is Filestore. GCP block storage now includes Hyperdisk as well as Persistent Disk.
Security: turn off public access at the account or organisation level. Share with short-lived signed URLs: user delegation SAS · S3 presigned URLs · V4 signed URLs.
Cost: tiers have minimum storage days and read fees. Moving data out (egress) or reading it back from archive can cost more than storing it.
Pattern: keep the lake in one cloud and bring compute to the data. Copying petabytes between clouds is slow and expensive.
Encryption: all three encrypt at rest by default. Use customer-managed keys (Key Vault · KMS · Cloud KMS) when policy says you must control the key.
Provision storage in Azure, or run the Azurite emulator locally, and inject a ready BlobServiceClient
// Same job, three clouds: each SDK finds credentials without a key in code
// Azure: DefaultAzureCredential tries env vars, workload/managed identity, then your dev login
var blobs = new BlobServiceClient(new Uri("https://stbank.blob.core.windows.net"),
new DefaultAzureCredential());
await blobs.GetBlobContainerClient("statements")
.UploadBlobAsync("2026-10/acc-42.pdf", BinaryData.FromBytes(pdf));
// AWS: the default credential chain finds env vars, profile/SSO, or the IAM role
var s3 = new AmazonS3Client(RegionEndpoint.APSoutheast2);
await s3.PutObjectAsync(new PutObjectRequest
{ BucketName = "bank-statements", Key = "2026-10/acc-42.pdf", InputStream = new MemoryStream(pdf) });
// GCP: Application Default Credentials (attached service account, or gcloud login on dev)
var gcs = await StorageClient.CreateAsync();
await gcs.UploadObjectAsync("bank-statements", "2026-10/acc-42.pdf", "application/pdf", new MemoryStream(pdf));
Storing data in the cloud is cheap. Getting it back out isn't 💸
🧊 Hot → cool → cold → archive tiers cut storage cost as data ages
⏳ But every colder tier has a minimum stay (archive: 180 days on Azure and AWS, 365 on GCP)
📤 Egress and archive reads are billed per GB. A "cheap" archive can get expensive on restore day
🔐 Block public access everywhere, and share with short-lived signed URLs
Model the read path, not just the write path. How often do you really restore?
#CloudStorage #FinOps #Azure #AWS #GoogleCloud
16.5 Networking, DNS, load balancing & edge Added
How traffic reaches your app and how your services talk privately: private networks, DNS, load balancers, CDN and WAF at the edge, and links back to the data centre.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
Private network: your own isolated IP space in the cloud
Virtual Network (VNet)
VPC
VPC network
Every workload
Azure and AWS are regional; GCP is global · plan IP ranges so they never overlap on-prem
Connect networks: join many networks into a hub
VNet peering, Virtual WAN
VPC peering, Transit Gateway
VPC Network Peering, Network Connectivity Center
Hub-and-spoke landing zones
Peering is not transitive · cross-region traffic is billed
Private access to PaaS: reach a managed service on a private IP
Private Endpoint (Private Link)
PrivateLink (interface VPC endpoints)
Private Service Connect
Databases, storage, vaults with no public access
Needs private DNS zones · charged per endpoint-hour and GB
DNS: turns names into IP addresses
Azure DNS (public and private zones)
Route 53
Cloud DNS
Public domains, private service names
Low TTLs before migrations · health-checked failover records
Layer 7 load balancer: routes HTTP by host and path, ends TLS
Application Gateway
Application Load Balancer
Application Load Balancer (regional)
Web apps and APIs in one region
Add WAF here or at the edge · health probes on /health
Global edge + CDN: entry point near users, with caching
Azure Front Door
CloudFront (+ Global Accelerator)
Global external Application Load Balancer + Cloud CDN
Multi-region apps, static content
Cache to cut origin load and egress · lock origins to edge-only traffic
WAF and DDoS: block attacks before they reach the app
Azure Web Application Firewall, Azure DDoS Protection
AWS WAF, AWS Shield
Cloud Armor
Any internet-facing app
Start with managed OWASP rules · add rate-limit rules
Hybrid connectivity: link the cloud to your data centre
VPN Gateway, ExpressRoute
Site-to-Site VPN, Direct Connect
Cloud VPN, Cloud Interconnect
Core banking on-prem, cloud front-ends
Private circuits for steady, high volume · two links for resilience
Network firewall: inspect and filter traffic between networks
Azure Firewall
AWS Network Firewall
Cloud Next Generation Firewall
Egress control in a hub
Charged per hour and per GB · central egress = one place to log
🔄 Renamed / retired (checked Oct 2026)
Azure CDN from Edgio shut down in January 2025. Azure Front Door (classic) retires 31 March 2027 and Azure CDN Standard from Microsoft (classic) on 30 September 2027. Move to Front Door Standard or Premium. (learn.microsoft.com)
Security: one public entry point (edge + WAF). Lock app origins to accept traffic only from the edge, and put databases, storage and vaults behind private endpoints.
Cost: NAT gateways, private endpoints, firewalls and cross-zone or cross-region traffic are charged by the hour and the GB. They add up in hub-and-spoke designs.
Pattern: hub-and-spoke: shared firewall, DNS and hybrid links in the hub, one spoke per app or environment.
GCP difference: one global VPC can span regions, and Shared VPC lets a central team own the network for many projects.
Azure Database for PostgreSQL / MySQL (flexible server)
RDS, Aurora (PostgreSQL, MySQL)
Cloud SQL, AlloyDB for PostgreSQL
New OLTP apps
The most portable choice across clouds · zone-redundant HA roughly doubles compute cost
Globally distributed SQL: relational and consistent across regions
No exact match: Cosmos DB multi-region writes, or Azure SQL geo-replication
Aurora DSQL, Aurora Global Database
Spanner
Global ledgers, always-on systems
Cross-region writes add latency · priced for scale, not small apps
Document / key-value NoSQL: JSON items by key, scales without schema changes
Cosmos DB
DynamoDB
Firestore
Profiles, carts, sessions, catalogues
Design the partition key for your queries first · provisioned vs on-demand capacity
Wide-column: huge sparse tables keyed by row, for massive writes
Managed Instance for Apache Cassandra, Cosmos DB for Apache Cassandra
Amazon Keyspaces
Bigtable
Time series, IoT, telemetry
Know your query patterns up front
In-memory cache: sub-millisecond key-value store in RAM
Azure Managed Redis
ElastiCache (Valkey, Redis OSS, Memcached)
Memorystore (Valkey, Redis)
Cache-aside, sessions, rate limits
Not the source of truth · TLS + auth on
Corrected from the PDF: it maps DynamoDB and Cosmos DB to Firebase Realtime Database. For server-side apps the closer match is Firestore (documents) or Bigtable (wide-column). Realtime Database is mainly a mobile/web sync store.
🔄 Renamed / retired (checked Oct 2026)
Azure Database for MariaDB was retired on 19 September 2025. Use Azure Database for MySQL flexible server. (techcommunity.microsoft.com)
Azure Cache for Redis retires on 30 September 2028 (Enterprise tiers 31 March 2027). New caches go on Azure Managed Redis. (learn.microsoft.com)
Security: private endpoints only, identity-based auth (Entra ID, RDS IAM auth, Cloud SQL IAM auth), and customer-managed keys where policy requires them.
Cost: HA replicas, read replicas and cross-region copies each multiply cost. Serverless or on-demand modes suit spiky or dev workloads.
Pattern: PostgreSQL is the most portable engine. Cosmos DB, DynamoDB, Firestore and Spanner are powerful but tie your data model to one cloud.
Often billed per data scanned: use Parquet + partitions
Spark / Hadoop: managed clusters for big batch and ML data jobs
Azure Databricks, Fabric Spark, HDInsight
EMR (incl. EMR Serverless)
Managed Service for Apache Spark
Large ETL, feature engineering
Use serverless or auto-terminate · idle clusters burn money
Stream ingestion: durable, ordered log for high-volume events
Event Hubs (Kafka-compatible)
Kinesis Data Streams, Amazon MSK
Pub/Sub, Managed Service for Apache Kafka
Clickstreams, card transactions, IoT
Partition by key to keep order · retention = how far back you can replay
Stream processing: windows and aggregates on data in motion
Stream Analytics, Fabric Real-Time Intelligence
Managed Service for Apache Flink
Dataflow (Apache Beam)
Fraud signals, live dashboards
Plan for late and duplicate events
ETL / data integration: pipelines that copy and transform data
Azure Data Factory, Data Factory in Fabric
AWS Glue
Cloud Data Fusion, Dataflow
Nightly loads, SaaS → lake
Use private runtimes for on-prem sources (self-hosted integration runtime, Glue connections)
BI dashboards: self-service charts on top of the data
Power BI
Amazon Quick Sight
Looker
Exec and ops reporting
Row-level security for customer data
Corrected from the PDF: it puts Kinesis, "Streaming Analytics" and Dataflow in one row. Ingestion (Kinesis Data Streams · Event Hubs · Pub/Sub) and processing (Managed Service for Apache Flink · Stream Analytics · Dataflow) are separate jobs, so they get separate rows here.
🔄 Renamed / retired (checked Oct 2026)
Dataproc → Managed Service for Apache Spark (both the cluster and serverless options). The API is still called Dataproc. (docs.cloud.google.com)
Kinesis Data Analytics → Amazon Managed Service for Apache Flink. (aws.amazon.com)
Azure Synapse Analytics is not retired, but Microsoft steers new work to Microsoft Fabric and offers a Synapse-to-Fabric migration assistant. HDInsight 4.0 and 5.0 retired in March 2025; 5.1 is current. (azure.microsoft.com, learn.microsoft.com)
Amazon QuickSight is now Amazon Quick Sight, part of Amazon Quick. Existing APIs still work. (docs.aws.amazon.com)
Security: mask or tokenise card numbers before they reach the lake, and use column- and row-level security in the warehouse. Keep the lake private.
Cost: scan-based pricing punishes SELECT *. Partition, cluster, and set budgets or quotas per team.
Pattern: medallion layers (bronze → silver → gold) in open table formats keep you portable between Databricks, Fabric, EMR and BigQuery.
Query and load BigQuery, fast bulk reads, publish events, submit Spark jobs
Spark jobs are normally written in Python, Scala or SQL. .NET for Apache Spark is no longer maintained, so .NET apps usually produce the events and query the results.
16.8 Messaging, events & workflows Added
Let services talk without waiting on each other: queues for work, topics for fan-out, event routers for "something happened", and workflow engines for multi-step processes. Section 10 covers the patterns.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
Simple queue: a durable list of jobs; each message goes to one worker
Queue Storage
SQS
Cloud Tasks (or a Pub/Sub pull subscription)
Background jobs, load levelling
At-least-once: make workers idempotent · cheap per million messages
Enterprise broker: queues + topics with sessions, transactions, DLQ
Service Bus
SQS FIFO + SNS, or Amazon MQ (ActiveMQ, RabbitMQ)
Pub/Sub (ordering keys, dead-letter topics)
Payments, ordered workflows, JMS/AMQP apps
Service Bus has no exact twin · check ordering and transaction needs
Pub/sub fan-out: one message, many subscribers
Service Bus topics, Event Grid
SNS
Pub/Sub
Notify fraud, CRM and analytics at once
Filter at the subscription to cut cost and noise
Event router: routes cloud, SaaS and custom events by rules
Event Grid
EventBridge
Eventarc
"Blob uploaded", "order placed" triggers
CloudEvents format · keep events small, fetch details by id
Workflow orchestration: run multi-step processes with retries and state
Logic Apps, Durable Functions
Step Functions
Workflows
Onboarding, loan approval, sagas
Billed per step or transition · keep loops tight
Mobile push: send notifications to phones
Notification Hubs
AWS End User Messaging (push), SNS mobile push
Firebase Cloud Messaging
Transaction alerts
Never put sensitive data in the push text
Corrected from the PDF: it lines up SNS, Service Bus and Firebase Cloud Messaging, and SQS, Storage Queues and Pub/Sub. FCM is mobile push, and Pub/Sub is a pub/sub service. The closest GCP match for a plain work queue is Cloud Tasks or a Pub/Sub pull subscription.
🔄 Renamed / retired (checked Oct 2026)
Amazon Pinpoint reaches end of support on 30 October 2026. Its SMS, voice and push APIs live on as AWS End User Messaging; email moves to Amazon SES. (docs.aws.amazon.com)
Security: send and receive with identities and least-privilege roles (e.g. "Service Bus Data Sender"), not connection strings or shared keys. Private endpoints for brokers.
Cost: mostly per message or operation. Batching, long polling and subscription filters cut the bill.
Pattern: queue for commands, topic for events, workflow engine when a process has many steps and compensations. Always add a DLQ and an alert on it.
Portability: Kafka (Event Hubs Kafka endpoint, MSK, Managed Service for Apache Kafka) and CloudEvents travel between clouds best.
One event envelope that Event Grid and Eventarc both understand; Service Bus emulator for local dev
16.9 AI & machine learning Added
Train and serve your own models, call hosted foundation models, run agents, and add prebuilt AI (documents, speech, vision) through an API. This category changes names the fastest.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
ML platform: train, track, deploy and monitor your own models
Pay per token or reserved throughput · check data residency per model
Agent runtime: host agents with tools, memory and tracing
Foundry Agent Service
Amazon Bedrock AgentCore
Agent Runtime on Agent Platform
Assistants that call APIs
Least-privilege tool access · human approval for money movement
Search / retrieval for RAG: hybrid keyword + vector search over your content
Azure AI Search (Foundry IQ)
Bedrock Knowledge Bases, OpenSearch Service
Agent Search, Vector Search
Policy and product Q&A with citations
Index only what users may see · security trimming per user
Prebuilt AI: ready APIs for documents, speech and images
Foundry Tools: Document Intelligence, Speech, Vision, Language
Textract, Transcribe, Rekognition, Comprehend
Document AI, Speech-to-Text, Vision API
KYC documents, call transcripts
Per page/minute pricing · PII handling and retention settings
Safety guardrails: filter harmful prompts and outputs, block jailbreaks
Azure AI Content Safety
Amazon Bedrock Guardrails
Model Armor
Any customer-facing GenAI
Check both input and output · log blocked attempts
🔄 Renamed / retired (checked Oct 2026)
Azure AI Studio / Azure AI Foundry → Microsoft Foundry.Azure AI services (Cognitive Services) → Foundry Tools. Azure OpenAI is now "Azure OpenAI in Foundry Models". The PDF's "Machine Learning" is Azure Machine Learning. (learn.microsoft.com, azure.microsoft.com)
SageMaker → Amazon SageMaker AI for the ML service; "Amazon SageMaker" is now the wider data and AI platform.
Security: keyless auth, private endpoints to model and search services, and confirm the provider doesn't train on your prompts (all three state this for their enterprise APIs; check your contract).
Cost: tokens are the new egress. Cache answers, trim context, route easy questions to smaller models, and set budgets per app.
Pattern: put a thin abstraction (IChatClient) between your code and the model so you can switch models or clouds. Evaluate before you switch.
Residency: not every model is offered in Australian regions. Check per model, and whether "global" deployments may process data offshore.
Corrected from the PDF: it maps AWS IAM to Azure Active Directory and GCP Cloud Identity. Azure AD is now Microsoft Entra ID, and those are directories for people. The permission systems are Azure RBAC, AWS IAM and Cloud IAM.
🔄 Renamed / retired (checked Oct 2026)
Azure Active Directory → Microsoft Entra ID (2023).
Azure AD B2C has not been sold to new customers since 1 May 2025 (supported until at least May 2030). New customer-identity projects use Microsoft Entra External ID. (learn.microsoft.com)
Security: identities for code everywhere (managed identity, IAM role, service account), OIDC federation for CI, and no long-lived access keys. Break-glass accounts are monitored.
Cost: KMS and secret stores charge per key and per 10,000 operations. Cache secrets in the app, and use envelope encryption (data keys) for bulk data.
Pattern: one identity provider for people (often Entra ID), federated into AWS and GCP. Each cloud keeps its own permission model.
Guardrails: org-level policies (Azure Policy · SCPs · Organization Policy) stop public buckets and unapproved regions before anyone can create them.
Secrets, keys, Application Default Credentials and ID tokens, service account impersonation
// Read one secret on each cloud, with no password in code or config
// Azure Key Vault
var kv = new SecretClient(new Uri("https://kv-bank.vault.azure.net/"), new DefaultAzureCredential());
string azurePwd = (await kv.GetSecretAsync("db-password")).Value.Value;
// AWS Secrets Manager (credentials from the IAM role via the default chain)
using var sm = new AmazonSecretsManagerClient();
var resp = await sm.GetSecretValueAsync(new GetSecretValueRequest { SecretId = "db-password" });
string awsPwd = resp.SecretString;
// Google Secret Manager (Application Default Credentials)
var gsm = await SecretManagerServiceClient.CreateAsync();
var ver = await gsm.AccessSecretVersionAsync(new SecretVersionName("bank-prod", "db-password", "latest"));
string gcpPwd = ver.Payload.Data.ToStringUtf8();
DefaultAzureCredential is great in development. In production, Microsoft recommends a specific credential (for example ManagedIdentityCredential) so the app can't silently pick up the wrong identity.
The most common cloud breach isn't a hack. It's a leaked key 🔑
🪪 Give code an identity: managed identity · IAM role · service account
🤝 Let CI log in with OIDC federation, not stored access keys
🗝️ Keep the few real secrets in Key Vault · Secrets Manager · Secret Manager, and rotate them
📜 Send audit logs to a separate, locked-down account
If a secret isn't stored anywhere, it can't leak. How many long-lived keys are left in your estate?
#CloudSecurity #IAM #ZeroTrust #Azure #AWS
16.11 Monitoring, management & infrastructure as code Added
See what's happening (metrics, logs, traces, alerts), build environments from code, enforce rules, and keep the bill under control.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
Metrics and alerts: numbers over time, with rules that page someone
Azure Monitor
CloudWatch
Cloud Monitoring
SLO dashboards, on-call alerts
Alert on symptoms (errors, latency), not every CPU blip
Logs: searchable records from apps and platform
Log Analytics (KQL)
CloudWatch Logs (Logs Insights)
Cloud Logging (Log Analytics)
Troubleshooting, audit
Ingestion is the big cost: sample, filter, set retention · never log PII or card data
Tracing / APM: follow one request across services
Application Insights
X-Ray, CloudWatch Application Signals
Cloud Trace
Finding the slow hop
OpenTelemetry works with all three
Native infrastructure as code: describe resources in files, deploy repeatably
Bicep, ARM templates
CloudFormation, AWS CDK
Infrastructure Manager (managed Terraform)
Every environment
Terraform/OpenTofu work on all three · review the plan/what-if before apply
Policy guardrails: block or flag non-compliant resources
Azure Policy
AWS Config rules, SCPs
Organization Policy
Allowed regions, no public IPs, tags
Start in audit mode, then deny
Cost management: see, allocate and cap spend
Microsoft Cost Management, budgets
Cost Explorer, AWS Budgets
Cloud Billing reports, budgets
Showback per team, anomaly alerts
Tag everything (owner, cost centre, env)
Advisor: recommendations for cost, security and reliability
Azure Advisor
Trusted Advisor
Active Assist (Recommender)
Quick wins, idle resources
Review monthly
Corrected from the PDF: its "Resource Manager" (Azure) is the control plane that every tool talks to; the templates you write are Bicep / ARM. Its GCP entry, Deployment Manager, has been retired (below).
🔄 Renamed / retired (checked Oct 2026)
Google Cloud Deployment Manager reached end of support on 31 March 2026; new users are blocked and it shuts down after 30 June 2027. Use Infrastructure Manager (Terraform) or Terraform directly. (docs.cloud.google.com)
Azure.Monitor.Query is deprecated on nuget.org; use Azure.Monitor.Query.Logs for log queries.
Security: send logs to a central, write-once store owned by security. Limit who can delete logs or change alerts.
Cost: log ingestion and retention often beat compute on the bill. Use basic/cheaper log tiers for noisy logs and keep debug logging off in production.
Pattern: instrument with OpenTelemetry once, export to any backend. Everything in IaC, deployed from a pipeline, with policy checks before apply.
Logging, tracing and error reporting; structured JSON console logs that Cloud Run and GKE pick up; custom metrics
16.12 DevOps & developer tools Added
Where code lives, how it's built and tested, where packages and images are stored, and how releases reach production. Many teams use GitHub on every cloud; these are the native options. Section 15 covers the practices.
Capability (online definition)
Azure
AWS
GCP
Use it for
Remember (security · cost · pattern)
Git repositories: hosted source control with pull requests
CD / release: promote builds through environments with approvals
Azure Pipelines environments, GitHub environments
CodePipeline, CodeDeploy
Cloud Deploy
Staged rollouts, canary, blue-green
Same artifact in every stage · automated rollback
Package registry: private NuGet/npm/Maven feeds
Azure Artifacts
CodeArtifact
Artifact Registry
Internal libraries, upstream caching
Proxy public feeds to block typo-squatting
🔄 Renamed / retired (checked Oct 2026)
AWS CodeCommit closed to new customers in July 2024, then returned to full general availability on 24 November 2025. It is open to new customers again. (aws.amazon.com, docs.aws.amazon.com)
Google Cloud Source Repositories has not been available to new customers since 17 June 2024. Google points to Secure Source Manager. (docs.cloud.google.com)
Security: pipelines log in to clouds with OIDC federation (no stored keys), run on least-privilege identities, and sign what they publish.
Cost: hosted build minutes add up. Cache dependencies, run only affected tests on PRs, and use spot-backed self-hosted runners for heavy builds.
Pattern: one CI/CD tool for all clouds (often GitHub Actions or Azure Pipelines) beats three native ones. Keep native registries close to each runtime.
Trigger builds, create releases and rollouts, manage repositories
16.13 Choosing a cloud (or multi-cloud) Added
Most organisations pick one primary cloud, add a second for specific strengths or regulation, and keep some systems on-prem. Choose on skills, services, compliance and commercials, then build a landing zone before the first workload.
Decision factors
🧑💻 Skills & ecosystem
A Microsoft shop (.NET, Microsoft 365, Entra ID) often lands on Azure. All three run .NET 10 well, so skills matter more than language.
🌏 Regions & residency
All three have Sydney and Melbourne regions; Azure also has Canberra. Check that every service you need exists in-region.
🧩 Key services
Pick on the services that set you apart (data, AI, mainframe integration). Commodity compute and storage are similar everywhere.
🛡️ Compliance
Check IRAP assessments for the services you'll use. Banks must meet APRA CPS 234 (information security) and CPS 230 (operational risk, material service providers).
💰 Commercials
Enterprise commit discounts, credits, support plans and licence reuse (Azure Hybrid Benefit for Windows Server and SQL Server).
🚪 Exit & lock-in
Data gravity and egress fees are the real lock-in. Containers, PostgreSQL, Kafka, OpenTelemetry and Terraform keep options open.
Landing zones: the foundation before workloads
Azure
AWS
GCP
Offering
Azure landing zones (Cloud Adoption Framework)
AWS Control Tower (+ Landing Zone Accelerator on AWS)
Landing zone design guidance + enterprise foundations blueprint (Terraform)
Structure
Management groups; platform subscriptions (identity, management, connectivity) + one subscription per app landing zone
Organizations OUs; log archive and audit accounts + one account per workload and environment
FinOps makes engineering, finance and product share ownership of cloud spend, so cost becomes an engineering metric measured per unit of business value.
How it works
Lever
What to do
Watch out
Tagging
Required tags: owner, cost centre, app, env. Enforce with policy
Shared costs need a split rule
Showback / chargeback
Showback reports cost to teams; chargeback bills it to their budget
Start with showback
Unit economics
Cost ÷ business volume, e.g. cost per 1,000 payments
The trend matters more than the number
Rightsizing
Match size to real p95 use; delete idle resources
Check memory, not just CPU
Autoscaling, scale to zero
Scale on demand; serverless and container apps scale to zero; dev off at night
Cold starts
Commitments
Azure Reservations, savings plan for compute · AWS Savings Plans, RIs · GCP CUDs
Commit only to the proven baseline, after rightsizing
Spot
Azure Spot VMs · EC2 Spot · GCP Spot VMs
Can be reclaimed: restartable work only
Storage tiering
Hot → cool/cold → archive with lifecycle rules
Minimum days and retrieval fees
Egress
Keep compute next to data; cache at the edge; avoid chatty cross-region calls
Internet, cross-region and (on AWS) cross-zone traffic is billed per GB
Budgets, anomalies
Alerts at % of budget and on forecast; anomaly detection
Budgets alert; they don't stop spend unless you automate it
Order of attack
Delete idle
→
Rightsize
→
Scale & schedule
→
Commit baseline
→
Spot for burst
Native cost tools (checked Oct 2026)
Need
Azure
AWS
GCP
Explore costs
Microsoft Cost Management (cost analysis)
AWS Cost Explorer
Cloud Billing reports
Budgets
Cost Management budgets
AWS Budgets
Cloud Billing budgets and alerts
Anomalies
Cost anomaly alerts
AWS Cost Anomaly Detection
Cost anomaly detection
Recommendations
Azure Advisor
Cost Optimization Hub
Recommender (Active Assist)
Raw export
Cost Management exports (incl. FOCUS)
Data Exports (CUR 2.0, FOCUS)
Billing export to BigQuery
FOCUS (FinOps Open Cost and Usage Specification) is one schema for billing data from every cloud, so multi-cloud showback doesn't need custom mapping.
Trade-offs
Choice
Gain
Cost
Chargeback over showback
Strong ownership
Disputes over shared costs
3-year commitment
Deepest discount
Lock-in if the design changes
Spot
Cheapest compute
Evictions; needs checkpointing
Scale to zero
Pay nothing when idle
Cold-start latency
Archive tier
Cheapest storage
Hours to read, early-delete fees
FinOps is a loop: Inform → Optimise → Operate, owned by engineering, finance and product together.
No tags, no allocation. No allocation, no accountability.
Report unit cost (per payment, per customer), not just the total bill.
Rightsize first, then commit to the steady baseline; spot only for restartable work.
Egress and log ingestion are the hidden costs. Design data placement early.
Count business units (payments) so cost ÷ volume becomes a dashboard
// Month-to-date actual cost per "app" tag, for a showback report
var arm = new ArmClient(new DefaultAzureCredential()); // needs Cost Management Reader
var scope = new ResourceIdentifier($"/subscriptions/{subscriptionId}");
var dataset = new QueryDataset();
dataset.Aggregation["totalCost"] = new QueryAggregation("PreTaxCost", FunctionType.Sum);
dataset.Grouping.Add(new QueryGrouping(QueryColumnType.TagKey, "app"));
var query = new QueryDefinition(ExportType.ActualCost, TimeframeType.MonthToDate, dataset);
QueryResult result = (await arm.UsageQueryAsync(scope, query)).Value;
// Column names are in result.Columns; divide by payments processed for unit cost
foreach (var row in result.Rows)
Console.WriteLine(string.Join(" | ", row));
Cost data lags by hours (often up to a day), so use it for daily reports and alerts, not real-time decisions. Query rates are throttled (HTTP 429): cache results.
The cloud bill isn't a finance problem. It's a design problem 💸
🏷️ Tag everything: no tags, no ownership
📊 Track cost per payment or per customer, not just the total
✂️ Delete idle, rightsize, then commit to the baseline
🎲 Spot for restartable work; scale to zero for quiet services
🌐 Egress is the hidden tax: keep compute next to data
Does your team know its cost per transaction?
#FinOps #CloudCost #Azure #AWS #GoogleCloud
⚡ Quick-fire Q&A
What's the biggest networking difference between the three clouds?
A GCP VPC is global, with regional subnets, so one network can span regions. Azure VNets and AWS VPCs are regional, so multi-region designs need peering or a hub (Virtual WAN, Transit Gateway).
How does an app call cloud APIs without storing a secret?
It uses the platform's workload identity: a managed identity on Azure, an IAM role on AWS, an attached service account on GCP. The SDK gets a short-lived token from a local endpoint. CI systems use OIDC federation the same way.
Reservations vs savings plans vs committed use discounts?
All trade a 1- or 3-year commitment for a lower price. Reservations and resource-based CUDs lock to a resource type and region. Savings plans and spend-based CUDs commit to an hourly spend and are more flexible. Commit only to your proven steady baseline.
What is the AWS or GCP equivalent of Azure Service Bus?
There is no exact twin. On AWS: SQS (FIFO for ordering) plus SNS for topics, or Amazon MQ if you need AMQP/JMS. On GCP: Pub/Sub with ordering keys and dead-letter topics, or Cloud Tasks for simple work queues. Check sessions, transactions and ordering needs.
Which old service names should you stop using in interviews?
Azure AD (now Microsoft Entra ID), Azure Cognitive Services (Foundry Tools), Azure AI Foundry (Microsoft Foundry), Vertex AI (Gemini Enterprise Agent Platform), Cloud Functions (Cloud Run functions), Container Registry (Artifact Registry), Dataproc (Managed Service for Apache Spark) and Deployment Manager (retired; use Infrastructure Manager or Terraform).
Why is egress so important in multi-cloud designs?
Data going into a cloud is mostly free, but data leaving it is billed per GB. An app in one cloud that reads a database in another pays on every call and adds latency. Keep each workload and its data in the same cloud and region.
What is FinOps, and where do you start?
A practice where engineering, finance and product share ownership of cloud spend, run as a loop: Inform (tag, allocate, show unit cost), Optimise (delete idle, rightsize, commit to the baseline, spot, storage tiers) and Operate (budgets, anomaly alerts, policy, regular reviews). Start with tagging and showback: you can't optimise what nobody owns.
Showback vs chargeback?
Showback reports each team's cloud cost to them for awareness. Chargeback actually bills that cost to the team's budget. Chargeback drives stronger ownership but needs trusted tagging and agreed rules for shared costs, so most organisations start with showback.