
Azure Quotas
- 351k installs
- 1.3k repo stars
- Updated July 26, 2026
- microsoft/azure-skills
azure-quotas is a Microsoft agent skill for checking Azure service limits, regional capacity, and quota increase requests via az quota CLI and bundled scripts.
About
Azure Quotas is a Microsoft agent skill for subscription service limits and capacity validation across Azure regions. It mandates az quota CLI as the primary tool after installing the quota extension, warning that REST API, Portal, and the azure-quota MCP server can show misleading No Limit values. The skill explains adjustable vs non-adjustable quotas, maps ARM resource types to quota resource names via localizedValue discovery, and ships check-quota.sh and check-quota.ps1 scripts returning limit, usage, and available capacity in one call. Core workflows cover single-resource checks, multi-region comparison loops, quota increase requests via az quota update, and full provider listings for planning. Troubleshooting tables address ExtensionNotFound, BadRequest unsupported providers, QuotaExceeded, and InvalidScope formatting. Best practices include checking before deployment, requesting twenty percent headroom, and using table output for scanning. Use when planning VM fleets, Container Apps, networking resources, or any deployment that might hit regional provisioning limits.
- Mandates az quota CLI first; warns REST, Portal, and azure-quota MCP can return misleading No Limit values.
- Ships check-quota.sh and check-quota.ps1 returning limit, usage, and available capacity in one script call.
- Documents ARM-to-quota name discovery via az quota list and localizedValue matching, never assuming 1:1 mapping.
- Covers multi-region comparison loops, increase requests, and adjustable vs non-adjustable quota types.
- Troubleshooting for extension install, unsupported providers like Cosmos DB, and correct scope URL patterns.
Azure Quotas by the numbers
- 350,792 all-time installs (skills.sh)
- +20,291 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #11 of 1,041 Cloud & Infrastructure skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
azure-quotas capabilities & compatibility
- Capabilities
- az quota extension setup and cli first queries · bundled check quota scripts for limit usage and · arm to quota resource name discovery workflow · multi region capacity comparison scripting · quota increase request and status tracking · unsupported provider troubleshooting guidance
- Works with
- azure
- Use cases
- devops · ci cd · api development
What azure-quotas says it does
ALWAYS USE CLI FIRST
npx skills add https://github.com/microsoft/azure-skills --skill azure-quotasAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 351k |
|---|---|
| repo stars | ★ 1.3k |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 26, 2026 |
| Repository | microsoft/azure-skills ↗ |
How do I verify Azure quota and regional capacity before deployment without trusting misleading Portal No Limit values?
Check Azure subscription quotas, compare regional capacity, and request increases before deployments using az quota CLI scripts.
Who is it for?
Teams planning Azure deployments who need CLI-first quota checks across regions and resource providers.
Skip if: Skip when the task is cost analysis, security audits, or deploying resources without capacity validation.
When should I use this skill?
User asks to check quotas, service limits, vCPU availability, quota exceeded errors, or request quota increases.
What you get
Accurate quota limit, usage, and available capacity tables with correct resource names and increase request commands when needed.
- Quota limit usage tables
- Regional capacity comparison
- Quota increase request commands
By the numbers
- az quota extension setup and CLI-first queries
- Bundled check-quota scripts for limit usage and availability
- ARM-to-quota resource name discovery workflow
Files
Azure Quotas - Service Limits & Capacity Management
AUTHORITATIVE GUIDANCE — Follow these instructions exactly for quota management and capacity validation.
Overview
What are Azure Quotas?
Azure quotas (also called service limits) are the maximum number of resources you can deploy in a subscription. Quotas:
- Prevent accidental over-provisioning
- Ensure fair resource distribution across Azure
- Represent available capacity in each region
- Can be increased (adjustable quotas) or are fixed (non-adjustable)
Key Concept: Quotas = Resource Availability
If you don't have quota, you cannot deploy resources. Always check quotas when planning deployments or selecting regions.
When to Use This Skill
Invoke this skill when:
- Planning a new deployment - Validate capacity before deployment
- Selecting an Azure region - Compare quota availability across regions
- Troubleshooting quota exceeded errors - Check current usage vs limits
- Requesting quota increases - Submit increase requests via CLI or Portal
- Comparing regional capacity - Find regions with available quota
- Validating provisioning limits - Ensure deployment won't exceed quotas
Quick Reference
| 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 withaz quotacommands; fall back to Azure service limits docs if CLI returnsBadRequest.
>
For complete CLI reference, see commands.md.
Quota Types
| 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.
Understanding Resource Name Mapping
⚠️ CRITICAL: There is NO 1:1 mapping between ARM resource types and quota resource names.
Example Mappings
| ARM Resource Type | Quota Resource Name |
|---|---|
Microsoft.App/managedEnvironments | ManagedEnvironmentCount |
Microsoft.Compute/virtualMachines | standardDSv3Family, cores, virtualMachines |
Microsoft.Network/publicIPAddresses | PublicIPAddresses, IPv4StandardSkuPublicIpAddresses |
Discovery Workflow
Never assume the quota resource name from the ARM type. Always use this workflow:
1. List all quotas for the resource provider:
az quota list --scope /subscriptions/<id>/providers/<ProviderNamespace>/locations/<region>2. Match by `localizedValue` (human-readable description) to find the relevant quota
3. 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
Scripts
Pre-built scripts handle quota extension installation, usage queries, and capacity calculation. Use these instead of constructing commands manually. A single call returns limits, usage, and available capacity.
| Script | Purpose | Usage |
|---|---|---|
scripts/check-quota.ps1 | Returns limit, usage, and available capacity for all quotas (or a single quota when resource name is provided) | Primary script for quota checks |
scripts/check-quota.sh | Same as above (bash) | Primary script for quota checks |
Core Workflows
Workflow 1: Check Quota for a Specific Resource
Scenario: Verify quota limits and current usage before deployment
Run the script with the resource provider and region. It returns a table of all quotas with their limit, current usage, and available capacity in a single call:
.\scripts\check-quota.ps1 -ResourceProvider <provider> -Region <region>./scripts/check-quota.sh <provider> <region>To check a single resource, add the resource name:
.\scripts\check-quota.ps1 -ResourceProvider <provider> -Region <region> -ResourceName <resource-name>./scripts/check-quota.sh <provider> <region> <resource-name>Example:
.\scripts\check-quota.ps1 -ResourceProvider Microsoft.Compute -Region eastusExample Output:
| Resource | Region | Limit | Usage | Available |
|---|---|---|---|---|
| cores | eastus | 100 | 50 | 50 |
| standardDSv3Family | eastus | 350 | 50 | 300 |
| virtualMachines | eastus | 25000 | 5 | 24995 |
| ... | ... | ... | ... | ... |
📖 See also: az quota show, az quota usage show
Workflow 2: Compare Quotas Across Regions
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
Workflow 3: Request Quota Increase
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/eastusApproval Process:
- Most adjustable quotas are auto-approved within minutes
- Some requests require manual review (hours to days)
- Non-adjustable quotas require Azure Support ticket
📖 See also: az quota update, az quota request status
Workflow 4: List All Quotas for Planning
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
Troubleshooting
Common Errors
| 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. |
Unsupported Resource Providers
Known unsupported providers:
- ❌ Microsoft.DocumentDB (Cosmos DB) - Use Portal or Cosmos DB limits docs
Confirmed working providers:
- ✅ Microsoft.Compute (VMs, disks, cores)
- ✅ Microsoft.Network (VNets, IPs, load balancers)
- ✅ Microsoft.App (Container Apps)
- ✅ Microsoft.Storage (storage accounts)
- ✅ Microsoft.MachineLearningServices (ML compute)
📖 See also: Troubleshooting Guide
Additional Resources
| 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 |
Best Practices
1. ✅ Always check quotas before deployment - Prevent quota exceeded errors 2. ✅ Run `az quota list` first - Discover correct quota resource names 3. ✅ Compare regions - Find regions with available capacity 4. ✅ Account for growth - Request 20% buffer above immediate needs 5. ✅ Use table output for overview - --output table for quick scanning 6. ✅ Monitor usage trends - Set up alerts at 80% threshold (via Portal)
Advanced Azure Quota Commands
Reference for less commonly used Azure quota CLI commands for tracking quota requests and operations.
az quota request status list
Get current quota requests for a one-year period. Use oData filter to select requests.
Syntax:
az quota request status list --scope SCOPE [--filter FILTER] [--max-items N] [--next-token TOKEN] [--skip-token TOKEN] [--top N]Required:
--scope- Target Azure resource URI
Optional:
--filter- Filter by requestSubmitTime (ge/le/eq), provisioningState (eq), resourceName (eq)--max-items- Total items to return--next-token- Pagination token from previous response--skip-token- Skip token for next page--top- Number of records to return
Examples:
# List compute quota requests
az quota request status list --scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastus
# List network quota requests
az quota request status list --scope /subscriptions/{id}/providers/Microsoft.Network/locations/eastusaz quota request status show
Get quota request details and status by request ID. The ID is returned from az quota update PUT operation.
Syntax:
az quota request status show --id REQUEST_ID --scope SCOPERequired:
--id- Quota request ID--scope- Target Azure resource URI
Example:
az quota request status show \
--id 2B5C8515-37D8-4B6A-879B-CD641A2CF605 \
--scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastusaz quota operation list
List all operations supported by Microsoft.Quota resource provider.
Syntax:
az quota operation listExamples:
# List all operations
az quota operation list
# Table format
az quota operation list --output tableAzure Quota CLI Commands Reference
Comprehensive reference for Azure CLI quota commands.
Prerequisites
Install quota extension (required):
az extension add --name quota⚠️ CRITICAL: ALWAYS USE CLI FIRST
>
Azure CLI is the ONLY reliable method for quota checks. Use `az quota` commands FIRST, always.
>
DO NOT use REST API or Azure Portal as your first approach. They are unreliable.
>
Required workflow:
1. FIRST: Tryaz quota list/az quota show/az quota usage show
2. If CLI returns `BadRequest`: Resource provider doesn't support quota API → use Azure service limits docs
3. Never start with REST API or Portal - only use as fallback
>
Why REST API/Portal are unreliable:
- REST API returns "No Limit" or "Unlimited" values that are MISLEADING
- "No Limit" DOES NOT mean unlimited capacity - usually means resource doesn't support quota API
- Service-specific limits still apply even when REST API shows "No Limit"
- Portal may show incomplete or cached quota data
- REST API lacks proper error handling for unsupported providers
>
If you see "No Limit" in REST API/Portal:
- ❌ This is NOT unlimited capacity
- ✅ It means quota API doesn't support that resource type
- ✅ Check Azure service limits docs for actual limits
- ✅ Regional capacity constraints may still exist
Resource Name Mapping
⚠️ CRITICAL: No 1:1 mapping exists between ARM resource types and quota names. Always discover via az quota list.
Discovery workflow: 1. List all quotas: az quota list --scope /subscriptions/{id}/providers/{Provider}/locations/{region} 2. Match properties.name.localizedValue to your resource type 3. Use exact name value in subsequent commands
Example mappings:
| ARM Type | Quota Name |
|---|---|
Microsoft.App/managedEnvironments | ManagedEnvironmentCount |
Microsoft.Compute/virtualMachines | standardDSv3Family, cores, virtualMachines |
Microsoft.Network/publicIPAddresses | PublicIPAddresses, IPv4StandardSkuPublicIpAddresses |
Command Summary
| Command | Description |
|---|---|
| az quota list | List all quota limits for a scope |
| az quota show | Show quota limit for specific resource |
| az quota usage list | List current usage for all resources |
| az quota usage show | Show current usage for specific resource |
| az quota update | Request quota increase |
| az quota create | Create quota limit (advanced) |
See advanced-commands.md for request status and operation commands.
---
az quota list
List all quota limits for a scope. Use this first to discover quota resource names.
Syntax:
az quota list --scope SCOPE [--max-items N] [--next-token TOKEN]Required:
--scope- Azure resource URI:/subscriptions/{id}/providers/{Provider}/locations/{region}
Examples:
# List compute quotas
az quota list --scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastus
# List network quotas
az quota list --scope /subscriptions/{id}/providers/Microsoft.Network/locations/eastus
# Table format
az quota list --scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastus --output tableKey output fields:
name- Quota resource name (use in other commands)properties.name.localizedValue- Human-readable descriptionproperties.limit.value- Quota limit
---
az quota show
Show quota limit for a specific resource.
Syntax:
az quota show --resource-name NAME --scope SCOPERequired:
--resource-name- Quota resource name (fromaz quota list)--scope- Azure resource URI
Example:
# Get DSv3 family vCPU limit
az quota show \
--resource-name standardDSv3Family \
--scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastusKey output fields:
properties.limit.value- Quota limitproperties.name.localizedValue- Human-readable descriptionproperties.quotaPeriod- Reset period (e.g., P1M = 1 month)
---
az quota update
Request quota increase for a resource.
Syntax:
az quota update --resource-name NAME --scope SCOPE --limit-object value=N [--resource-type TYPE] [--no-wait]Required:
--resource-name- Quota resource name--scope- Azure resource URI--limit-object- New limit value (format:value=N)
Optional:
--resource-type- Resource type (e.g., dedicated, lowPriority)--no-wait- Don't wait for completion (true/false)
Examples:
# Increase FSv2 family vCPUs to 100
az quota update \
--resource-name standardFSv2Family \
--scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastus \
--limit-object value=100 \
--resource-type dedicated
# Non-blocking request
az quota update \
--resource-name standardFSv2Family \
--scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastus \
--limit-object value=100 \
--no-wait true---
az quota usage list
List current usage for all resources in a scope.
Syntax:
az quota usage list --scope SCOPE [--max-items N] [--next-token TOKEN]Required:
--scope- Azure resource URI
Examples:
# List compute usage
az quota usage list --scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastus
# Table format
az quota usage list --scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastus --output tableKey output:
properties.usages.value- Current usage count- Use with
az quota showto calculate available capacity
---
az quota usage show
Show current usage for a specific resource.
Syntax:
az quota usage show --resource-name NAME --scope SCOPERequired:
--resource-name- Quota resource name--scope- Azure resource URI
Example:
az quota usage show \
--resource-name standardDSv3Family \
--scope /subscriptions/{id}/providers/Microsoft.Compute/locations/eastusCalculate available capacity: 1. Get limit: az quota show --resource-name {name} --scope {scope} → limit value 2. Get usage: az quota usage show --resource-name {name} --scope {scope} → current usage 3. Available = Limit - Usage
Example calculation:
- Limit (from
az quota show): 350 vCPUs - Usage (from
az quota usage show): 12 vCPUs - Available: 338 vCPUs
---
az quota create
Create quota limit for a resource. Rarely used - typically use az quota update instead.
Syntax:
az quota create --resource-name NAME --scope SCOPE --limit-object value=N [--resource-type TYPE]Required:
--resource-name- Quota resource name--scope- Azure resource URI--limit-object- Quota limit value
Examples:
# Create network quota
az quota create \
--resource-name MinPublicIpInterNetworkPrefixLength \
--scope /subscriptions/{id}/providers/Microsoft.Network/locations/eastus \
--limit-object value=10 \
--resource-type MinPublicIpInterNetworkPrefixLength
# Create ML quota
az quota create \
--resource-name TotalLowPriorityCores \
--scope /subscriptions/{id}/providers/Microsoft.MachineLearningServices/locations/eastus \
--limit-object value=10 \
--resource-type lowPriority---
Troubleshooting
Unsupported Resource Types
Not all Azure resource providers support the quota API. If you receive a BadRequest error when running az quota list, the provider likely doesn't support quota commands.
Example - Microsoft.DocumentDB (Cosmos DB):
az quota list --scope /subscriptions/{id}/providers/Microsoft.DocumentDB/locations/eastus
# Error: (BadRequest) Bad requestWorkarounds:
- Check Azure subscription limits documentation
- Use Azure Portal for quota management
- Check service-specific documentation
Testing provider support:
# Try listing quotas
az quota list --scope /subscriptions/{id}/providers/{Provider}/locations/{region}
# BadRequest error → not supported
# List of quotas → supportedREST API "No Limit" Warning
⚠️ CRITICAL WARNING: REST API "No Limit" is MISLEADING
>
If you see "No Limit", "Unlimited", or similar values in REST API or Azure Portal responses:
>
This DOES NOT mean unlimited capacity!
>
It most likely means:
- The resource provider doesn't support the quota API
- Quota information isn't available through this API
- The quota is managed at a different scope
>
DO NOT assume unlimited capacity. Always:
1. Use az quota CLI commands first (preferred method)2. If CLI returns BadRequest, check Azure service limits documentation3. Consult service-specific documentation for actual limits
4. Consider regional capacity constraints even without quota enforcement
Common Error Codes
| Error | Cause | Solution |
|---|---|---|
BadRequest | Provider not supported by quota API | Use CLI (preferred) or check Azure service limits docs |
ExtensionNotFound | Quota extension not installed | Run az extension add --name quota |
MissingRegistration | Microsoft.Quota provider not registered | Run az provider register --namespace Microsoft.Quota |
InvalidScope | Incorrect scope format | Verify: /subscriptions/{id}/providers/{namespace}/locations/{region} |
QuotaNotAvailableForResource | Resource not available in region | Try different region |
RequestThrottled | Too many API calls | Implement exponential backoff |
Known Support Status
Unsupported:
- ❌ Microsoft.DocumentDB (Cosmos DB)
Supported:
- ✅ Microsoft.Compute (VMs, disks, cores)
- ✅ Microsoft.Network (VNets, IPs, load balancers)
- ✅ Microsoft.App (Container Apps)
- ✅ Microsoft.Storage (storage accounts)
- ✅ Microsoft.MachineLearningServices
- ✅ Microsoft.ContainerService (AKS)
<#
.SYNOPSIS
Checks Azure quota limits and current usage for a resource provider.
.DESCRIPTION
Installs the quota CLI extension if needed, then queries quota limits and
current usage in a single call. Returns a table with limit, usage, and
available capacity for every quota (or a single quota when ResourceName is provided).
.PARAMETER ResourceProvider
Azure resource provider namespace (e.g., "Microsoft.Compute", "Microsoft.Network").
.PARAMETER Region
Azure region to check (e.g., "eastus", "westus2").
.PARAMETER ResourceName
Quota resource name (e.g., "standardDSv3Family"). If omitted, returns all quotas.
.PARAMETER SubscriptionId
Azure subscription ID. Defaults to the current subscription.
.EXAMPLE
.\check-quota.ps1 -ResourceProvider Microsoft.Compute -Region eastus
# Shows limit, usage, and available capacity for ALL compute quotas in eastus
.EXAMPLE
.\check-quota.ps1 -ResourceProvider Microsoft.Compute -Region eastus -ResourceName standardDSv3Family
# Shows limit, usage, and available capacity for the DSv3 VM family only
#>
param(
[Parameter(Mandatory)][string]$ResourceProvider,
[Parameter(Mandatory)][string]$Region,
[string]$ResourceName,
[string]$SubscriptionId
)
$ErrorActionPreference = "Stop"
# Ensure the quota extension is installed
$ext = az extension list --query "[?name=='quota'].name" -o tsv 2>$null
if (-not $ext) {
Write-Host "Installing quota extension..."
az extension add --name quota --yes 2>$null
}
# Resolve subscription
if (-not $SubscriptionId) {
$SubscriptionId = az account show --query id -o tsv
}
$scope = "/subscriptions/$SubscriptionId/providers/$ResourceProvider/locations/$Region"
Write-Host "Checking quotas in scope $scope"
if ($ResourceName) {
# Single-resource mode
Write-Host "Quota for '$ResourceName' ($ResourceProvider, $Region):"
Write-Host ""
$limit = az quota show --resource-name $ResourceName --scope $scope -o json 2>$null | ConvertFrom-Json
$usage = az quota usage show --resource-name $ResourceName --scope $scope -o json 2>$null | ConvertFrom-Json
$limitValue = $limit.properties.limit.value
$usageValue = $usage.properties.usages.value
$available = $limitValue - $usageValue
[PSCustomObject]@{
Resource = $ResourceName
Region = $Region
Limit = $limitValue
Usage = $usageValue
Available = $available
} | Format-Table -AutoSize
} else {
# All-quotas mode: fetch limits and usage, join by name
Write-Host "Quotas for $ResourceProvider in ${Region}:"
Write-Host ""
$quotas = az quota list --scope $scope -o json 2>$null | ConvertFrom-Json
$usages = az quota usage list --scope $scope -o json 2>$null | ConvertFrom-Json
$usageLookup = @{}
foreach ($u in $usages) {
$usageLookup[$u.name] = $u.properties.usages.value
}
$results = foreach ($q in $quotas) {
$name = $q.name
$limitValue = $q.properties.limit.value
$usageValue = if ($usageLookup.ContainsKey($name)) { $usageLookup[$name] } else { 0 }
$available = $limitValue - $usageValue
[PSCustomObject]@{
Resource = $name
Region = $Region
Limit = $limitValue
Usage = $usageValue
Available = $available
}
}
$results | Format-Table -AutoSize
}
#!/usr/bin/env bash
# check-quota.sh
# Checks Azure quota limits and current usage for a resource provider.
# Returns a table with limit, usage, and available capacity for every quota
# (or a single quota when resource-name is provided).
#
# Usage:
# ./check-quota.sh <resource-provider> <region> [resource-name] [subscription-id]
#
# Examples:
# ./check-quota.sh Microsoft.Compute eastus # All compute quotas with usage
# ./check-quota.sh Microsoft.Compute eastus standardDSv3Family # Single quota with usage
set -euo pipefail
RESOURCE_PROVIDER="${1:?Usage: $0 <resource-provider> <region> [resource-name] [subscription-id]}"
REGION="${2:?Usage: $0 <resource-provider> <region> [resource-name] [subscription-id]}"
RESOURCE_NAME="${3:-}"
SUBSCRIPTION_ID="${4:-}"
# Ensure the quota extension is installed
if ! az extension list --query "[?name=='quota'].name" -o tsv 2>/dev/null | grep -q quota; then
echo "Installing quota extension..."
az extension add --name quota --yes 2>/dev/null
fi
# Resolve subscription
if [ -z "$SUBSCRIPTION_ID" ]; then
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
fi
SCOPE="/subscriptions/$SUBSCRIPTION_ID/providers/$RESOURCE_PROVIDER/locations/$REGION"
echo "Checking quotas in scope $SCOPE"
if [ -n "$RESOURCE_NAME" ]; then
# Single-resource mode
echo "Quota for '$RESOURCE_NAME' ($RESOURCE_PROVIDER, $REGION):"
echo ""
LIMIT=$(az quota show \
--resource-name "$RESOURCE_NAME" \
--scope "$SCOPE" \
--query "properties.limit.value" -o tsv)
USAGE=$(az quota usage show \
--resource-name "$RESOURCE_NAME" \
--scope "$SCOPE" \
--query "properties.usages.value" -o tsv)
AVAILABLE=$((LIMIT - USAGE))
printf "%-30s %-10s %-10s %-10s %-10s\n" "Resource" "Region" "Limit" "Usage" "Available"
printf "%-30s %-10s %-10s %-10s %-10s\n" "--------" "------" "-----" "-----" "---------"
printf "%-30s %-10s %-10s %-10s %-10s\n" "$RESOURCE_NAME" "$REGION" "$LIMIT" "$USAGE" "$AVAILABLE"
else
# All-quotas mode: fetch limits and usage, join by name
echo "Quotas for $RESOURCE_PROVIDER in $REGION:"
echo ""
QUOTAS_JSON=$(az quota list --scope "$SCOPE" -o json 2>/dev/null)
USAGES_JSON=$(az quota usage list --scope "$SCOPE" -o json 2>/dev/null)
printf "%-40s %-10s %-10s %-10s %-10s\n" "Resource" "Region" "Limit" "Usage" "Available"
printf "%-40s %-10s %-10s %-10s %-10s\n" "--------" "------" "-----" "-----" "---------"
echo "$QUOTAS_JSON" | python3 -c "
import json, sys
quotas = json.load(sys.stdin)
usages = json.loads('''$USAGES_JSON''')
usage_lookup = {}
for u in usages:
usage_lookup[u['name']] = u.get('properties', {}).get('usages', {}).get('value', 0)
for q in quotas:
name = q['name']
limit = q.get('properties', {}).get('limit', {}).get('value', 0)
used = usage_lookup.get(name, 0)
avail = limit - used
print(f'{name:<40} $REGION{\"\":<4} {limit:<10} {used:<10} {avail:<10}')
"
fi
Related skills
How it compares
azure-quotas is a Microsoft agent skill for checking Azure service limits, regional capacity, and quota increase requests via az quota CLI and bundled scripts, not a generic alternative.
FAQ
Who is azure-quotas for?
Azure operators and developers validating subscription limits before provisioning VMs, networks, or container workloads.
When should I use azure-quotas?
When comparing regional capacity, checking usage vs limits, or submitting quota increase requests before deployment.
Is azure-quotas safe to install?
Review the Security Audits panel; quota checks are read-only but increase requests change subscription limits.