Skip to content
Back to skills

Azure Quotas

ASecurity

Assess and manage Azure service quotas and limits to prevent deployment and scaling failures. Use this skill when users ask about quota errors, capacity planning, regional availability, or resource limits.

  • 16 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added September 12, 2026
businessbashsqlreactrailsazureapidatabasesecurityperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add manu14357/zskills --skill azure-quotas --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Azure Quotas?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Azure Quotas
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/manu14357-azure-quotas/badge)](https://www.skillsdirectory.com/skills/manu14357-azure-quotas)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: azure-quotas
description: >
  Assess and manage Azure service quotas and limits to prevent deployment and scaling failures.
  Use this skill when users ask about quota errors, capacity planning, regional availability, or resource limits.
compatibility:
  models: [any-llm]
  cloud: azure
  tags: [capacity, limits, planning, troubleshooting]
---

# Azure Quotas

Plan quota headroom early so deployments and scale events do not fail unexpectedly.
Identify bottlenecks before they become crises.

## Use This Skill When

- The user sees quota or capacity errors in Azure (DeploymentQuotaExceeded, etc.)
- The user plans a new deployment in a constrained region or subscription
- The user needs preflight checks before scaling operations
- The user wants to verify available capacity before committing to architecture

## Context: Quota Management Maturity

**Immature**: Hit quota limits unexpectedly, manual increases, no planning  
**Developing**: Track some quotas, request increases reactively  
**Managed**: Automated quota tracking, capacity planning, reserved capacity → **Target**  
**Optimized**: Predictive quota management, auto-scaling to new regions, zero surprises

## Required Inputs

- **Subscription ID & region**: Where are you deploying?
- **Planned resources**: How many VMs? App Services? SQL databases?
- **Scale targets**: Current vs. planned capacity?
- **Timeline**: Immediate (next week)? Next quarter? Next year?
- **Compliance**: Any data residency or region-specific needs?

## Decision Tree

```
Where does this workload run?
├─ Single region (lowest complexity)
│  └─ Can fall back to alternative region if quota exceeded?
├─ Multi-region (higher complexity, but better resilience)
│  └─ Distribute across regions to avoid single-region limits
└─ Hybrid (on-premises + Azure)
   └─ Plan data transfer, bandwidth quotas

What's the expected scale?
├─ Small (< 10 VMs, < 100 GB data)
│  └─ Quota rarely an issue
├─ Medium (10-100 VMs, 100 GB - 1 TB data)
│  └─ Plan quotas for compute tier
└─ Large (> 100 VMs, > 1 TB data)
   └─ Request increases in advance, plan multi-region

Are quotas the risk, or SKU availability?
├─ Quota (limit per subscription) → Request increase
├─ SKU availability (no machines available) → Fallback to alternative SKU or region
└─ Cost (exceeding budget) → Use Reserved Instances to cap costs
```

## Workflow

### Phase 1: Identify Quota-Limited Services

1. **Compute quotas** (most common bottleneck):
   ```bash
   # Check vCPU quotas by family
   az vm list-usage --location "eastus" -o table
   
   # Output
   Name                       CurrentValue    Limit
   Standard D Family vCPUs    10              20    ← Can add 10 more
   Standard B Family vCPUs    5               20    ← Plenty available
   Standard E Family vCPUs    0               20    ← None used yet
   ```

2. **Storage quotas**:
   ```bash
   # Get current storage account usage
   az storage account list --query "[].{name:name, tier:sku.name, kind:kind}" -o table
   
   # Limit: 250 storage accounts per subscription
   # Each can be up to 5PB (petabytes)
   ```

3. **Database quotas**:
   ```bash
   # SQL Server quota (per region, per subscription)
   az sql server list --query "[].{name:name, region:location}" -o table
   
   # Limit: 15 servers per subscription, per region
   ```

4. **Networking quotas**:
   ```
   Network Security Groups: 100 per region
   VNets: 100 per subscription
   Public IPs: 60 per region
   Load Balancers: 1 per region (basic), 100 (standard)
   Application Gateways: 20 per subscription
   ```

5. **Other quota-limited services**:
   ```
   App Service Plans: 100 per resource group
   Batch Accounts: 1-3 per region
   Cognitive Services: Varies by service (Speech, Vision, etc.)
   Media Services: Limited slots per subscription
   Redis Cache: 50 per subscription
   Search Services: 15 per subscription
   ```

### Phase 2: Check Current Usage vs. Limits

1. **Get quota status**:
   ```bash
   # All quotas for a region
   az provider show --namespace Microsoft.Compute \
     --query "resourceTypes[?resourceType=='virtualMachines'].limits" -o table
   
   # Output
   limitName                  limitValue
   vCpuCountPerRegion         20
   vCpuCountPerVmFamily       20
   standardBFamilyvCpusCount  20
   standardDFamilyvCpusCount  20
   ```

2. **Calculate usage**:
   ```bash
   # Count running VMs and vCPUs
   az vm list --query "[] | length(@)" -o json  → 8 VMs
   az vm list --query "sum(hardwareProfile.vmSize)" → 24 vCPUs
   
   # Available headroom
   Quota: 20 vCPUs
   Used: 24 vCPUs ← OVER QUOTA!
   Available: -4 ← Must request increase
   ```

3. **Regional availability**:
   ```bash
   # Check which regions have which SKUs available
   az vm list-skus --location "eastus" --resource-type virtualMachines \
     --query "[?name=='Standard_D4s_v3'].restrictions[].restrictionInfo" -o table
   
   # If no restrictions shown, SKU available in that region
   ```

### Phase 3: Request Quota Increases

1. **Request vCPU increase** (most common):
   ```bash
   # Using Azure Portal or CLI
   az provider register --namespace Microsoft.Capacity
   
   # Submit request
   az rest --method post \
     --uri "https://management.azure.com/subscriptions/$SUBID/providers/Microsoft.Capacity/quotaRequests?api-version=2021-12-01" \
     --body '{
       "sku": { "name": "StandardDFamily" },
       "properties": {
         "quotaIncreaseAmount": 20
       }
     }'
   ```

2. **Timeline for approval**:
   ```
   vCPU quota increases:
   ├─ Low demand regions (< 10 vCPU increase) → Auto-approved, 5 minutes
   ├─ Medium increase (10-50 vCPU) → Reviewed, 1-2 business days
   ├─ Large increase (> 50 vCPU) → Manual review, 3-5 business days
   └─ Regional capacity issues → May be denied or partially approved
   ```

3. **What if denied?**
   ```
   ├─ Fallback to alternative SKU (larger memory, different vCPU count)
   ├─ Deploy to different region (check availability first)
   ├─ Use spot VMs (temporary, interruptible, no quota cost)
   └─ Scale sequentially instead of all at once
   ```

### Phase 4: Capacity Planning

1. **Forecast future needs**:
   ```
   Current state (baseline):
   ├─ VMs: 5 × D4s_v3 (32 vCPUs)
   ├─ Target SLA: 99.9% uptime
   └─ Growth: 20% year-over-year
   
   Planned expansion (6 months):
   ├─ Add new customer segment: +8 VMs (64 vCPUs)
   ├─ High-availability zones: Need redundant instances
   └─ Total needed: 96 vCPUs (3× current)
   
   Recommendation:
   └─ Request 120 vCPU quota now (headroom for spikes)
   ```

2. **Design for quota resilience**:
   ```
   Option 1: Single region (simpler, quota-constrained)
   ├─ All VMs in eastus
   ├─ If quota exhausted, deployment fails
   ├─ RTO: Long (manual intervention needed)
   
   Option 2: Multi-region (resilient, but complex)
   ├─ Primary: eastus (60% of VMs)
   ├─ Secondary: westus2 (40% of VMs)
   ├─ If eastus quota full, auto-failover to westus2
   ├─ RTO: Seconds (auto-failover)
   ```

3. **Reserved capacity** (guaranteed slots):
   ```bash
   # Reserve vCPU capacity for 1-3 year term
   # Cost: 30-50% savings vs. on-demand
   # Benefit: Guaranteed availability, no quota issues
   
   # Example: 96 vCPU (24 × D4s_v3 for 3 years)
   Cost on-demand: ~$3,500/month = $126K/year
   Cost reserved: ~$1,750/month (50% off) = $63K/year
   Savings: $63K/year over 3 years
   ```

### Phase 5: Pre-Deployment Validation

1. **Quota checklist before major deployments**:
   ```
   Deployment: Production migration (100 VMs, 400 vCPUs)
   
   ✓ vCPU quota: 500 available, need 400 → OK
   ✓ Storage accounts: 10 used, limit 250 → OK
   ✓ SQL Servers: 2 used, limit 15 → OK
   ✓ App Service Plans: 8 used, limit 100 → OK
   ✓ Public IPs: 12 used, limit 60 → OK
   ✓ NSGs: 25 used, limit 100 → OK
   
   ✓ Regional availability: Standard_D4s_v3 in eastus → OK
   ✓ Fallback region: westus2 has same SKU available → OK
   
   Status: GREEN - Ready to deploy
   ```

2. **Quota monitoring during scale**:
   ```bash
   # Set alert for quota usage
   az monitor metrics alert create \
     --name "cpu-quota-warning" \
     --resource-group $RG \
     --scopes "/subscriptions/$SUBID" \
     --condition "total ComputeQuotaUsage >= 80" \
     --window-size "PT15M" \
     --evaluation-frequency "PT5M" \
     --actions email_action "ops@company.com"
   ```

### Phase 6: Handle Quota Errors

1. **Common errors & solutions**:
   ```
   Error: DeploymentQuotaExceeded
   ├─ Cause: vCPU quota exhausted
   ├─ Solution: Request increase or deploy to alternate region
   
   Error: SkuNotAvailable
   ├─ Cause: SKU not available in chosen region
   ├─ Solution: Use different region, different SKU, or spot VMs
   
   Error: ResourceQuotaExceeded (non-compute)
   ├─ Cause: Limit on databases, storage accounts, etc.
   ├─ Solution: Check specific service quotas, request if needed
   ```

2. **Workarounds for immediate needs**:
   ```
   If quota exceeded AND request takes days:
   
   Option 1: Use Spot VMs (low-cost, interruptible)
   ├─ Immediately available (no quota)
   ├─ 70-90% cost savings
   ├─ Risk: Can be evicted (5-30 min notice)
   └─ Use for: Non-critical workloads, batch jobs, auto-scale
   
   Option 2: Fallback to different region
   ├─ Check alternate region quota (often more available)
   ├─ Deploy there temporarily
   ├─ Risk: Higher latency, data residency may not apply
   
   Option 3: Downsize temporary
   ├─ Use smaller VMs to fit current quota
   ├─ Scale up later when quota increase approved
   ├─ Risk: Performance impact during wait
   ```

## Output Contract

1. **Current Quota Status**
   - Quotas per service (compute, storage, database, networking)
   - Current usage vs. limit
   - Headroom available

2. **Capacity Assessment**
   - Can planned workload fit in current quotas?
   - What quotas need increases?
   - Timeline for requests

3. **Risk Analysis**
   - Single point of quota failure?
   - Regional availability constraints?
   - Fallback regions and their quotas?

4. **Recommendations**
   - Increase requests (which, how much, when?)
   - Architectural changes (multi-region, different SKU)?
   - Reserved capacity (cost savings)?

5. **Pre-Deployment Checklist**
   - All quotas sufficient? (Yes/No)
   - Fallback strategy documented?
   - Monitoring alerts configured?

## Guardrails

- **Always check quotas before major deployments**: Don't discover limits mid-cutover.
- **Request increases in advance**: Lead time can be days; don't wait until needed.
- **Verify SKU availability by region**: Not all sizes available everywhere.
- **Plan multi-region for resilience**: Single-region is quota-constrained and brittle.
- **Monitor quota usage**: Set alerts at 70% to plan proactively.
- **Document quota-critical paths**: Identify which failures are quota-related vs. other issues.
- **Test fallback regions**: Ensure workload actually runs in alternate region before relying on it.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.