| name | well-architected-review |
| description | Run a Well-Architected Framework (WAF) review against Azure resources in scope. Use when asked about best practices, architecture review, WAF assessment, or pillar compliance (Reliability, Security, Cost, Operational Excellence, Performance Efficiency). |
| tools | ["RunAzCliReadCommands","execute_kusto_query"] |
Well-Architected Review
Purpose
Perform a structured assessment of Azure resources against the five pillars of the Microsoft Azure Well-Architected Framework. Produce a scored report with prioritized recommendations.
When to use this skill
- User asks "are we following best practices?"
- User asks for a WAF or Well-Architected review
- User wants to assess architecture quality before a launch or audit
- Periodic (quarterly) architecture health check
Pillars and checks
1. Reliability
Run the following checks and report findings:
- Availability design: Check if critical workloads use availability zones or availability sets
az vm list --query "[].{name:name, zones:zones, availabilitySet:availabilitySet.id}" -o table
az appservice plan list --query "[].{name:name, zoneRedundant:zoneRedundant, sku:sku.name}" -o table
- Backup coverage: Verify Recovery Services vaults and backup policies exist for VMs, databases, and file shares
az backup vault list -o table
Then for each vault:
az backup item list --vault-name <vault> --resource-group <rg> --backup-management-type AzureIaasVM -o table
- Disaster recovery: Check for paired regions, ASR replication, or geo-redundant storage
- Health probes: Verify App Service health checks, load balancer probes, and Container Apps health endpoints
- Auto-healing: Check if App Service auto-heal rules or AKS pod disruption budgets are configured
2. Security
- Identity: Check for managed identities vs. stored credentials
az webapp identity show --name <app> --resource-group <rg>
az ad app list --query "[].{name:displayName, passwordCredentials:passwordCredentials}" -o table
- Network isolation: Check for private endpoints, NSGs, and service endpoints
az network private-endpoint list -o table
az network nsg list -o table
- Encryption: Verify encryption at rest (storage, databases) and in transit (TLS)
- Key management: Check Key Vault usage and key/secret expiration dates
az keyvault list -o table
az keyvault secret list --vault-name <vault> --query "[].{name:name, expires:attributes.expires}" -o table
- Defender for Cloud: Check Secure Score and outstanding recommendations
3. Cost Optimization
- Rightsizing: Identify underutilized VMs (CPU < 5% average over 14 days)
- Orphaned resources: Find unattached disks, unused public IPs, empty resource groups
az disk list --query "[?managedBy==null].{name:name, size:diskSizeGb, rg:resourceGroup}" -o table
az network public-ip list --query "[?ipConfiguration==null].{name:name, rg:resourceGroup}" -o table
- Reservations: Check if high-usage resources could benefit from reserved instances
- Dev/Test pricing: Verify non-production workloads use Dev/Test subscriptions or B-series VMs
- Storage tiers: Check if cool/archive tiers are used for infrequently accessed data
4. Operational Excellence
- IaC coverage: Check for ARM/Bicep/Terraform templates in connected repos
- Tagging: Verify mandatory tags (environment, owner, cost-center) exist
az resource list --query "[?tags.environment==null].{name:name, type:type, rg:resourceGroup}" -o table
- Monitoring: Check for alert rules, action groups, and diagnostic settings
az monitor metrics alert list -o table
az monitor diagnostic-settings list --resource <id> -o table
- Deployment practices: Check for deployment slots, blue-green, or canary configurations
- Automation: Check for runbooks, Logic Apps, or scheduled tasks for routine operations
5. Performance Efficiency
- Autoscaling: Verify autoscale rules exist for App Service plans, VMSS, and Container Apps
az monitor autoscale list --resource-group <rg> -o table
Note: az monitor autoscale list requires --resource-group. Iterate over relevant resource groups, or use Azure Resource Graph:
az graph query -q "resources | where type == 'microsoft.insights/autoscalesettings'" -o table
- Caching: Check for Redis Cache or CDN usage on high-traffic workloads
- Database performance: Check DTU/vCore utilization, index recommendations
- Content delivery: Verify static assets use CDN or Front Door
- Connection pooling: Check for connection string patterns suggesting missing pooling
Scoring model
For each check, assign one of:
- ✅ Pass — follows best practice
- ⚠️ Needs attention — partially implemented or at risk
- ❌ Fail — not implemented, risk exposure
Expected output
Report header (mandatory — use this exact format)
Well-Architected Review Report
| Field | Value |
|---|
| Subscription | (name + ID) |
| Assessment Date | YYYY-MM-DD |
| Overall Score | XX% |
Summary
A table with pillar scores:
| Pillar | Pass | Needs Attention | Fail | Score |
|---|
| Reliability | X | Y | Z | X/(X+Y+Z) % |
| Security | ... | ... | ... | ... |
| Cost Optimization | ... | ... | ... | ... |
| Operational Excellence | ... | ... | ... | ... |
| Performance Efficiency | ... | ... | ... | ... |
| Overall | | | | avg % |
Detailed findings
For each pillar, list every check with:
- Status (pass/attention/fail)
- Evidence (command output or observation)
- Recommendation (specific action to take)
- Priority (Critical / High / Medium / Low)
- Reference link to WAF documentation
Top 5 recommendations
Ordered by impact, with estimated effort (hours/days) for each.
Remediation guidance
For each ❌ or ⚠️ finding, include in the output:
- The specific
az CLI command to remediate (suggest only — do not execute)
- Use
GetAzCliHelp to validate the command syntax before suggesting
- The official Microsoft Learn documentation link for the remediation
References