Master Cheatsheet

All 9 modules · Print or save as PDF · ← Back to Cheatsheets

← All Cheatsheets
How to save as PDF: Click the button above → browser print dialog opens → change Destination to "Save as PDF" → set Layout to Landscape → Save. No branding appears in the PDF.
Module 1 · Domain 1 · 20–25%

Azure Container Registry (ACR)

20–25%

Key Concepts

  • SKUs: Basic → Standard → Premium (geo-rep, private endpoints)
  • Auth: Always Managed Identity in prod. Admin user = NEVER
  • ACR Tasks: Cloud builds, multi-step pipelines, trigger on git/base image
  • Geo-replication: Premium only. Pushes to one, pulls from nearest
  • Content Trust: Notary v2 image signing. Premium only

Memory Trick

ACR MAP: Managed Identity · ACR Tasks · Premium for geo-rep

CLI Commands

az acr create --name myacr --sku Premium
az acr build --registry myacr --image app:v1 .
az acr login --name myacr
az acr task create --name build-on-push \
  --registry myacr --image app:latest \
  --context https://github.com/org/repo \
  --branch main --git-access-token $TOKEN

Gotcha

Admin user is disabled by default. Never enable it — use Managed Identity.
Module 2 · Domain 1 · 20–25%

Azure Container Apps

20–25%

Key Concepts

  • Scaling: KEDA-based. minReplicas: 0 = scale-to-zero
  • Revisions: Immutable snapshots. Traffic splitting for canary
  • Dapr: Sidecar for service discovery, pub/sub, state, secrets
  • Ingress: External (public) or Internal (VNet only)
  • vs AKS: No K8s management. vs App Service: supports event-driven scale

Memory Trick

CREDS: Containerized serverless · Revisions · Event-driven (KEDA) · Dapr · Scale-to-zero

CLI Commands

az containerapp env create -n myenv -g rg \
  --location eastus
az containerapp create -n myapp -g rg \
  --environment myenv \
  --image myacr.azurecr.io/app:v1 \
  --target-port 8080 --ingress external \
  --min-replicas 0 --max-replicas 10

Gotcha

Traffic splitting requires multiple active revisions. Set revision mode to "multiple" first.
Module 3 · Domain 1 · 20–25%

Azure Kubernetes Service (AKS)

20–25%

Key Concepts

  • Control plane: Managed by Microsoft, FREE
  • Node pools: System (CoreDNS) + User (your apps)
  • Networking: Kubenet (NAT) vs Azure CNI (real pod IPs)
  • Helm: K8s package manager — charts, values, releases
  • HPA: CPU/memory autoscaler. KEDA for event-driven scaling

Memory Trick

CHUNK: Control plane free · Helm · User+System pools · Networking CNI · Kubectl

CLI Commands

az aks create -n myaks -g rg \
  --node-count 3 --network-plugin azure \
  --attach-acr myacr
az aks get-credentials -n myaks -g rg
kubectl get pods -A
helm install myapp ./chart -f values.yaml
kubectl apply -f deployment.yaml

Gotcha

Azure CNI requires pre-allocating VNet IPs. Plan subnet sizing carefully or you'll run out.
Module 4 · Domain 2 · 25–30%

Azure Cosmos DB for NoSQL

25–30%

Key Concepts

  • RUs: 1KB read = 1 RU · 1KB write = 5–6 RU
  • Partition key: IMMUTABLE after creation. Choose wisely
  • Consistency: Strong→Bounded→Session(default)→Prefix→Eventual
  • Change Feed: Captures inserts + updates. NOT deletes
  • Vector: DiskANN index · VectorDistance() function

Memory Trick

PREVIEW: Partition key · RUs · Embeddings · VectorDistance · Indexing · Event(Change Feed) · Writes=5–6x

CLI / SDK

az cosmosdb create -n mydb -g rg
az cosmosdb sql container create \
  -a mydb -d mydb -n items -g rg \
  --partition-key-path /userId
# SDK vector query:
SELECT c.id, VectorDistance(
  c.embedding, @queryVector) AS score
FROM c ORDER BY score OFFSET 0 LIMIT 10

Gotcha

Change Feed does NOT capture deletes. Use soft-delete pattern (deleted: true field).
Module 5 · Domain 2 · 25–30%

Azure Database for PostgreSQL + pgvector

25–30%

Key Concepts

  • pgvector: Extension for vector storage + similarity search
  • HNSW: Higher accuracy, works on empty tables. Production choice
  • IVFFlat: Lower memory, needs data before build
  • Operators: <=> cosine · <-> L2 · <#> inner product
  • RAG: Retrieve embeddings → inject as LLM context

Memory Trick

HIC: HNSW=accuracy(prod) · IVFFlat=memory(needs data) · Cosine <=> for text

SQL Commands

CREATE EXTENSION IF NOT EXISTS pgvector;
CREATE TABLE docs (
  id serial PRIMARY KEY,
  content text,
  embedding vector(1536)
);
CREATE INDEX ON docs USING hnsw
  (embedding vector_cosine_ops);
-- Search:
SELECT content,
  embedding <=> $1 AS distance
FROM docs ORDER BY distance LIMIT 5;

Gotcha

IVFFlat index fails on empty tables. Insert data first, then create the index.
Module 6 · Domain 2 · 25–30%

Azure Managed Redis

25–30%

Key Concepts

  • Vector search: Enterprise tier only (RediSearch module)
  • Cache-aside: App manages cache. Miss → read DB → write cache
  • Semantic cache: Cache LLM responses by embedding similarity
  • TTL: Auto-expire keys. Essential for cache invalidation
  • Tiers: Basic(dev) → Standard(HA) → Premium → Enterprise(vector)

Memory Trick

SAVES: Semantic caching · All in-memory · Vector(Enterprise) · Event streams · Session+cache-aside

CLI / Commands

az redis create -n myredis -g rg \
  --sku Premium --vm-size c1
# Redis CLI:
SET user:1 "alice-data" EX 3600
GET user:1
DEL user:1
EXPIRE user:1 1800
# Python (redis-py):
r.set("key", value, ex=3600)
r.get("key")

Gotcha

Vector search requires Enterprise tier. Basic/Standard/Premium = no RediSearch.
Module 7 · Domain 3 · 20–25%

Service Bus, Event Grid & Azure Functions

20–25%

Key Concepts

  • Service Bus Queue: Point-to-point, ordered, guaranteed delivery
  • Service Bus Topic: Pub/sub, multiple subscriptions with filters
  • PeekLock: Lock → process → complete. Prevents message loss
  • DLQ: Dead-letter queue for poison/expired messages
  • Event Grid: Reactive routing of Azure resource events

Memory Trick

Bank vs News: Service Bus = bank transfer (reliable) · Event Grid = news broadcast (reactive)

CLI / SDK

az servicebus namespace create -n myns -g rg
az servicebus queue create -n myqueue \
  --namespace myns -g rg
az eventgrid topic create -n mytopic -g rg
# Functions binding (function.json):
"type": "serviceBusTrigger",
"queueName": "myqueue",
"connection": "ServiceBusConnection"

Gotcha

ReceiveAndDelete removes message immediately — data loss if processing fails. Use PeekLock.
Module 8 · Domain 3 · 20–25%

Key Vault & App Configuration

20–25%

Key Concepts

  • Key Vault objects: Secrets · Keys · Certificates
  • Auth: Managed Identity + RBAC. Never store credentials
  • Soft-delete: 7–90 days recovery window
  • Purge protection: Irreversible once enabled
  • App Config: Non-secret settings + feature flags. KV references for secrets

Memory Trick

Safe vs Dashboard: Key Vault = secrets safe · App Config = settings dashboard

CLI Commands

az keyvault create -n myvault -g rg \
  --enable-purge-protection true
az keyvault secret set \
  --vault-name myvault -n dbpass \
  --value "mySecretPwd"
az role assignment create \
  --role "Key Vault Secrets User" \
  --assignee $MANAGED_IDENTITY_ID \
  --scope /subscriptions/.../vaults/myvault

Gotcha

Purge protection is irreversible once enabled — cannot disable it later.
Module 9 · Domain 4 · 15–20%

OpenTelemetry & Azure Monitor

15–20%

Key Concepts

  • OTel pillars: Traces (spans + TraceId) · Metrics · Logs
  • TraceId: Unique per request, shared across all services
  • Connection String: Use instead of deprecated InstrumentationKey
  • KQL WSP: Where (filter) → Summarize (group) → Project (select)
  • Alerts: Metric/log alerts → Action Groups → notifications

Memory Trick

WSP: Where=filter · Summarize=GROUP BY · Project=SELECT

KQL + Code

// KQL - Find slow requests:
requests
| where timestamp > ago(1h)
| where duration > 5000
| summarize avg(duration) by name
| order by avg_duration desc
| project name, avg_duration

# Python OTel setup:
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
  connection_string="InstrumentationKey=..."
)

Gotcha

KQL pipe order is opposite to SQL: where → summarize → project (not SELECT → FROM → WHERE).