Check/manage Azure quotas and usage across providers. For deployment planning, capacity validation, region selection. WHEN: "check quotas", "service limits", "current usage", "request quota increase", "quota exceeded", "validate capacity", "regional availability", "provisioning limits", "vCPU limit", "how many vCPUs available in my subscription".
AUTHORITATIVE GUIDANCE — Follow these instructions exactly for quota management and capacity validation.
What are Azure Quotas?
Azure quotas (also called service limits) are the maximum number of resources you can deploy in a subscription. Quotas:
Key Concept: Quotas = Resource Availability
If you don't have quota, you cannot deploy resources. Always check quotas when planning deployments or selecting regions.
Invoke this skill when:
| Property | Details |
|---|---|
| Primary Tool | Azure CLI (az quota) - USE THIS FIRST, ALWAYS |
| Extension Required | az extension add --name quota (MUST install first) |
| Key Commands | az quota list, az quota show, az quota usage list, az quota usage show |
| Complete CLI Reference | commands.md |
| Azure Portal | My quotas - Use only as fallback |
| REST API | Microsoft.Quota provider - Unreliable, do NOT use first |
| MCP Server | azure-quota MCP server — NEVER use this. It is unreliable. Always use az quota CLI instead. |
| Required Permission | Reader (view) or Quota Request Operator (manage) |
⚠️ ALWAYS USE CLI FIRST
REST API and Portal can show misleading "No Limit" values — this does not mean unlimited capacity. It means the quota API doesn't support that resource type. Always start with
az quotacommands; fall back to Azure service limits docs if CLI returnsBadRequest.For complete CLI reference, see commands.md.
| Type | Adjustability | Approval | Examples |
|---|---|---|---|
| Adjustable | Can increase via Portal/CLI/API | Usually auto-approved | VM vCPUs, Public IPs, Storage accounts |
| Non-adjustable | Fixed limits | Cannot be changed | Subscription-wide hard limits |
Important: Requesting quota increases is free. You only pay for resources you actually use, not for quota allocation.
⚠️ CRITICAL: There is NO 1:1 mapping between ARM resource types and quota resource names.
| ARM Resource Type | Quota Resource Name |
|---|---|
Microsoft.App/managedEnvironments | ManagedEnvironmentCount |
Microsoft.Compute/virtualMachines | standardDSv3Family, cores, virtualMachines |
Microsoft.Network/publicIPAddresses | PublicIPAddresses, IPv4StandardSkuPublicIpAddresses |
Never assume the quota resource name from the ARM type. Always use this workflow:
List all quotas for the resource provider:
az quota list --scope /subscriptions/<id>/providers/<ProviderNamespace>/locations/<region>
Match by localizedValue (human-readable description) to find the relevant quota
Use the name field (not ARM resource type) in subsequent commands:
az quota show --resource-name ManagedEnvironmentCount --scope ...
az quota usage show --resource-name ManagedEnvironmentCount --scope ...
📖 Detailed mapping examples and workflow: See commands.md - Resource Name Mapping
Scenario: Verify quota limit and current usage before deployment
# 1. Install quota extension (if not already installed)
az extension add --name quota
# 2. List all quotas for the provider to find the quota resource name
az quota list \
--scope /subscriptions/<subscription-id>/providers/Microsoft.Compute/locations/eastus
# 3. Show quota limit for a specific resource
az quota show \
--resource-name standardDSv3Family \
--scope /subscriptions/<subscription-id>/providers/Microsoft.Compute/locations/eastus
# 4. Show current usage
az quota usage show \
--resource-name standardDSv3Family \
--scope /subscriptions/<subscription-id>/providers/Microsoft.Compute/locations/eastus
Example Output Analysis:
📖 See also: az quota show, az quota usage show
Scenario: Find the best region for deployment based on available capacity
# Define candidate regions
REGIONS=("eastus" "eastus2" "westus2" "centralus")
VM_FAMILY="standardDSv3Family"
SUBSCRIPTION_ID="<subscription-id>"
# Check quota availability across regions
for region in "${REGIONS[@]}"; do
echo "=== Checking $region ==="
# Get limit
LIMIT=$(az quota show \
--resource-name $VM_FAMILY \
--scope "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Compute/locations/$region" \
--query "properties.limit.value" -o tsv)
# Get current usage
USAGE=$(az quota usage show \
--resource-name $VM_FAMILY \
--scope "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Compute/locations/$region" \
--query "properties.usages.value" -o tsv)
# Calculate available
AVAILABLE=$((LIMIT - USAGE))
echo "Region: $region | Limit: $LIMIT | Usage: $USAGE | Available: $AVAILABLE"
done
📖 See also: commands.md for full scripted multi-region loop patterns
Scenario: Current quota is insufficient for deployment
# Request increase for VM quota
az quota update \
--resource-name standardDSv3Family \
--scope /subscriptions/<subscription-id>/providers/Microsoft.Compute/locations/eastus \
--limit-object value=500 \
--resource-type dedicated
# Check request status
az quota request status list \
--scope /subscriptions/<subscription-id>/providers/Microsoft.Compute/locations/eastus
Approval Process:
📖 See also: az quota update, az quota request status
Scenario: Understand all quotas for a resource provider in a region
# List all compute quotas in East US (table format)
az quota list \
--scope /subscriptions/<subscription-id>/providers/Microsoft.Compute/locations/eastus \
--output table
# List all network quotas
az quota list \
--scope /subscriptions/<subscription-id>/providers/Microsoft.Network/locations/eastus \
--output table
# List all Container Apps quotas
az quota list \
--scope /subscriptions/<subscription-id>/providers/Microsoft.App/locations/eastus \
--output table
📖 See also: az quota list
| Error | Cause | Solution |
|---|---|---|
| REST API "No Limit" | Misleading — not unlimited | Use CLI instead; see warning in Quick Reference |
ExtensionNotFound | Quota extension not installed | az extension add --name quota |
BadRequest | Resource provider not supported by quota API | Check service limits docs |
MissingRegistration | Microsoft.Quota provider not registered | az provider register --namespace Microsoft.Quota |
QuotaExceeded | Deployment would exceed quota | Request increase or choose different region |
InvalidScope | Incorrect scope format | Use pattern: /subscriptions/<id>/providers/<namespace>/locations/<region> |
| CLI commands fail entirely | Auth, extension, or environment issue | Verify Azure CLI login (az account show), reinstall quota extension, check network. Do NOT use the azure-quota MCP server — it is unreliable. |
Known unsupported providers:
Confirmed working providers:
📖 See also: Troubleshooting Guide
| Resource | Link |
|---|---|
| CLI Commands Reference | commands.md - Complete syntax, parameters, examples |
| Azure Quotas Overview | Microsoft Learn |
| Service Limits Documentation | Azure subscription limits |
| Azure Portal - My Quotas | Portal Link |
| Request Quota Increases | How to request increases |
az quota list first - Discover correct quota resource names--output table for quick scanning