Cloud Services Cheat Sheet — AWS vs Azure vs GCP vs DigitalOcean Feb 26, 2026 6 min read
When you work across providers — or help someone migrate — the biggest mental overhead is translating primitives. This is my personal reference for that translation, plus the Terraform modules I reach for most often.
Compute
Concept AWS Azure GCP DigitalOcean Virtual machine EC2 Virtual Machine Compute Engine (GCE) Droplet VM image AMI Managed Image / Gallery Custom Image Snapshot GPU instance EC2 P/G/Inf series NC/ND/NV series A100/T4/L4 VMs GPU Droplets Spot / preemptible EC2 Spot Azure Spot VM Spot VM — Bare metal EC2 Bare Metal Azure Bare Metal Bare Metal Solution — VM scale set Auto Scaling Group VMSS MIG (Managed Instance Group) —
Terraform modules
# AWS — community module for an ASG-backed fleet
module "ec2" {
source = "terraform-aws-modules/ec2-instance/aws"
version = "~> 5.0"
}
module "autoscaling" {
source = "terraform-aws-modules/autoscaling/aws"
version = "~> 7.0"
}
# Azure
module "linux_virtual_machine" {
source = "Azure/virtual-machine/azurerm"
version = "~> 1.0"
}
# GCP
module "compute_instance" {
source = "terraform-google-modules/vm/google//modules/compute_instance"
version = "~> 11.0"
}
# DigitalOcean
resource "digitalocean_droplet" "web" {} # first-party resource, no module needed
Containers & Kubernetes
Concept AWS Azure GCP DigitalOcean Managed Kubernetes EKS AKS GKE DOKS Serverless containers Fargate Container Apps / ACI Cloud Run App Platform Container registry ECR ACR Artifact Registry Container Registry Helm / app catalog — — — Marketplace 1-click
Terraform modules
# AWS EKS
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "~> 20.0"
}
# Azure AKS
module "aks" {
source = "Azure/aks/azurerm"
version = "~> 8.0"
}
# GCP GKE
module "gke" {
source = "terraform-google-modules/kubernetes-engine/google"
version = "~> 33.0"
}
# DigitalOcean DOKS
resource "digitalocean_kubernetes_cluster" "primary" {}
Serverless / Functions
Concept AWS Azure GCP DigitalOcean Functions-as-a-Service Lambda Azure Functions Cloud Functions / Cloud Run Functions Functions Event-driven triggers EventBridge / SNS / SQS Event Grid / Service Bus Eventarc / Pub/Sub — API gateway API Gateway / ALB API Management Cloud Endpoints / API Gateway —
Terraform modules
# AWS Lambda
module "lambda_function" {
source = "terraform-aws-modules/lambda/aws"
version = "~> 7.0"
}
module "apigateway_v2" {
source = "terraform-aws-modules/apigateway-v2/aws"
version = "~> 5.0"
}
# Azure Functions — use azurerm provider resources directly
resource "azurerm_linux_function_app" "fn" {}
# GCP Cloud Functions
resource "google_cloudfunctions2_function" "fn" {}
Object Storage
Concept AWS Azure GCP DigitalOcean Object / blob store S3 Blob Storage (ADLS Gen2) Cloud Storage (GCS) Spaces Static website hosting S3 + CloudFront Static Website on Blob Cloud Storage + LB Spaces CDN Lifecycle policies S3 Lifecycle Blob Lifecycle Object Lifecycle — Storage classes Standard / IA / Glacier Hot / Cool / Archive Standard / Nearline / Coldline / Archive Standard
Terraform modules
# AWS S3
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
version = "~> 4.0"
}
# Azure — provider resource
resource "azurerm_storage_account" "sa" {}
resource "azurerm_storage_container" "blob" {}
# GCP
module "gcs_buckets" {
source = "terraform-google-modules/cloud-storage/google"
version = "~> 6.0"
}
# DigitalOcean
resource "digitalocean_spaces_bucket" "assets" {}
Block Storage
Concept AWS Azure GCP DigitalOcean Block volume EBS Managed Disk Persistent Disk Block Storage Volume High-perf NVMe io2 Block Express Ultra Disk Extreme PD — Snapshot EBS Snapshot Disk Snapshot Disk Snapshot Volume Snapshot
Terraform
# AWS
resource "aws_ebs_volume" "data" {}
# Azure
resource "azurerm_managed_disk" "data" {}
# GCP
resource "google_compute_disk" "data" {}
# DigitalOcean
resource "digitalocean_volume" "data" {}
File / Shared Storage
Concept AWS Azure GCP DigitalOcean NFS-compatible EFS Azure Files (NFS) Filestore — SMB / CIFS FSx for Windows Azure Files (SMB) — — HPC / parallel FS FSx for Lustre Azure HPC Cache Parallelstore —
Relational Databases
Concept AWS Azure GCP DigitalOcean Managed MySQL RDS MySQL / Aurora MySQL Azure Database for MySQL Cloud SQL MySQL Managed MySQL Managed PostgreSQL RDS PostgreSQL / Aurora PostgreSQL Azure Database for PostgreSQL Cloud SQL PostgreSQL / AlloyDB Managed PostgreSQL Managed SQL Server RDS SQL Server / RDS Custom Azure SQL Database — — Serverless RDBMS Aurora Serverless v2 Azure SQL Serverless — —
Terraform modules
# AWS RDS
module "db" {
source = "terraform-aws-modules/rds/aws"
version = "~> 6.0"
}
module "aurora" {
source = "terraform-aws-modules/rds-aurora/aws"
version = "~> 9.0"
}
# Azure
resource "azurerm_postgresql_flexible_server" "db" {}
# GCP
module "sql_db" {
source = "GoogleCloudPlatform/sql-db/google"
version = "~> 21.0"
}
# DigitalOcean
resource "digitalocean_database_cluster" "pg" {
engine = "pg"
}
NoSQL / Document / Wide-Column
Concept AWS Azure GCP DigitalOcean Key-value / document DynamoDB Cosmos DB Firestore / Datastore — Wide-column DynamoDB (single-table) Cosmos DB (Cassandra API) Bigtable — In-memory cache ElastiCache (Redis/Memcached) Azure Cache for Redis Memorystore Managed Redis Search OpenSearch Service Azure AI Search Vertex AI Search —
Terraform modules
# AWS DynamoDB
module "dynamodb_table" {
source = "terraform-aws-modules/dynamodb-table/aws"
version = "~> 4.0"
}
# AWS ElastiCache
module "elasticache" {
source = "terraform-aws-modules/elasticache/aws"
version = "~> 1.0"
}
# GCP Bigtable
resource "google_bigtable_instance" "bt" {}
# GCP Memorystore
resource "google_redis_instance" "cache" {}
Networking
Concept AWS Azure GCP DigitalOcean Virtual network VPC VNet VPC VPC Subnet Subnet Subnet Subnet — Load balancer (L4) NLB Azure Load Balancer Network LB Load Balancer Load balancer (L7 / HTTP) ALB Application Gateway Cloud LB (global) Load Balancer CDN CloudFront Azure CDN / Front Door Cloud CDN Spaces CDN DNS Route 53 Azure DNS Cloud DNS DNS Private connectivity VPC Peering / Transit Gateway VNet Peering / vWAN VPC Peering / Cloud Interconnect VPC Peering VPN AWS VPN VPN Gateway Cloud VPN — Firewall (L3/L4) Security Group / NACL NSG VPC Firewall Rules Cloud Firewall WAF WAF (CloudFront/ALB) Azure WAF Cloud Armor —
Terraform modules
# AWS VPC
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 5.0"
}
# AWS ALB
module "alb" {
source = "terraform-aws-modules/alb/aws"
version = "~> 9.0"
}
# AWS Security Group
module "security_group" {
source = "terraform-aws-modules/security-group/aws"
version = "~> 5.0"
}
# Azure VNet
module "network" {
source = "Azure/network/azurerm"
version = "~> 5.0"
}
# GCP network
module "network" {
source = "terraform-google-modules/network/google"
version = "~> 9.0"
}
# DigitalOcean VPC
resource "digitalocean_vpc" "primary" {}
Identity & Access
Concept AWS Azure GCP DigitalOcean IAM service IAM Entra ID (AAD) + RBAC IAM — VM identity IAM Role on instance profile Managed Identity Service Account — Secrets manager Secrets Manager / Parameter Store Key Vault Secret Manager — Certificate manager ACM Key Vault Certificates Certificate Manager —
Terraform modules
# AWS IAM
module "iam_role" {
source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role"
version = "~> 5.0"
}
# AWS Secrets Manager
resource "aws_secretsmanager_secret" "app" {}
# GCP Secret Manager
resource "google_secret_manager_secret" "app" {}
# Azure Key Vault
resource "azurerm_key_vault" "kv" {}
Monitoring & Observability
Concept AWS Azure GCP DigitalOcean Metrics CloudWatch Metrics Azure Monitor Metrics Cloud Monitoring Monitoring (hosted Grafana) Logs CloudWatch Logs Log Analytics Workspace Cloud Logging — Traces X-Ray Application Insights Cloud Trace — Dashboards CloudWatch Dashboards Azure Workbooks Cloud Monitoring Dashboards Grafana Alerts CloudWatch Alarms Azure Monitor Alerts Cloud Alerting Alerts
Concept AWS Azure GCP DigitalOcean Managed CI/CD CodePipeline + CodeBuild Azure DevOps / GitHub Actions Cloud Build App Platform CI Artifact store CodeArtifact Azure Artifacts Artifact Registry Container Registry IaC state backend S3 + DynamoDB (lock) Azure Blob (lock via lease) GCS (lock via object) Spaces
Terraform remote state snippets
# AWS
terraform {
backend "s3" {
bucket = "my-tfstate"
key = "prod/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-lock"
encrypt = true
}
}
# Azure
terraform {
backend "azurerm" {
resource_group_name = "tfstate-rg"
storage_account_name = "tfstateacct"
container_name = "tfstate"
key = "prod.terraform.tfstate"
}
}
# GCP
terraform {
backend "gcs" {
bucket = "my-tfstate-bucket"
prefix = "prod"
}
}
Pricing Model Quick-Reference
Dimension AWS Azure GCP DigitalOcean Commit discount Reserved Instances / Savings Plans Reserved VM / Savings Plan Committed Use Discounts — Sustained use auto-discount — — Yes (GCE VMs) — Free tier 12-month + Always Free 12-month + Always Free 90-day $300 credit + Always Free $200 credit (60 days) Billing granularity Per-second (most services) Per-minute or per-second Per-second Per-hour (Droplets)
This will stay a living doc — I’ll add messaging queues, AI/ML services, and managed Kafka equivalents once I’ve done enough cross-provider work to have opinions worth sharing.