"Exceeding approved quota" when you create an Azure VM: which quota, and how to raise it
"Operation could not be completed as it results in exceeding approved quota" means your subscription's vCPU limit for that VM family or region is used up, not that Azure is full. Read which quota the error names, check usage, request the increase, and tell it apart from AllocationFailed and SkuNotAvailable.
Networking & VMsFix a problem5 min read
"Operation could not be completed as it results in exceeding approved standardDSv5Family Cores quota." You were creating one small VM, and Azure refused. That message, exceeding approved quota on an Azure VM, is about your subscription's limits, not about Azure running out of machines: each subscription may only use a certain number of vCPUs per region, and per VM family within it, and you've reached one of them. It's fixed by a request, usually approved within minutes. This guide shows how to read which limit you hit, check your usage, raise it, and recognise the different errors that mean Azure genuinely has no capacity, which a quota increase won't fix.
Read which quota the error names
Azure checks two vCPU limits for every subscription, in every region, and your VM must fit under both:
| Limit | What it caps | Error wording |
|---|---|---|
| VM-family vCPUs | vCPUs of one family, such as Dv5 or Bs | "exceeding approved standardDSv5Family Cores quota" |
| Total Regional vCPUs | vCPUs of all families together in the region | "exceeding approved Total Regional Cores quota" |
There's also a limit on the number of VMs per region, and separate spot vCPU quotas for spot VMs. Most errors carry the numbers you need:
Code: QuotaExceeded
Message: Operation could not be completed as it results in exceeding approved
standardDSv3Family Cores quota. Location: eastus2, Current Limit: 1500,
Current Usage: 1500, Additional Required: 16, (Minimum) New Limit Required: 1516.
The (Minimum) New Limit Required is the figure to ask for, or more if you plan to grow. From a template deployment, the same problem can read OperationNotAllowed: Operation results in exceeding quota limits of Core.
Check usage before you ask
az vm list-usage --location eastus2 --output table
Find the family row (Standard DSv5 Family vCPUs) and Total Regional vCPUs, and compare CurrentValue with Limit. In the portal it's Subscriptions > your subscription > Usage + quotas, or the Quotas page under Compute.
Two surprises worth checking first:
- Stopped VMs count. Quota covers vCPUs that are allocated and deallocated. A forgotten test VM that's stopped still holds its cores; deleting VMs you don't need frees quota at once.
- It's per region. Quota in West US does nothing for East US. If you deploy to several regions, raise each one.
Request the increase
- In the portal, search for Quotas, then select Compute.
- Filter to the region, and search for the family (
dsv5) orTotal Regional vCPUs. - For a quota you can adjust (it shows a pencil), enter the new limit, the total you want, not the number to add, and submit. Many requests are approved within a few minutes.
- If it's declined or can't be adjusted there, the page offers Create a support request; a support engineer handles it.
When a VM-family increase is approved, Azure also raises the regional vCPU limit for that region. While choosing a size in the VM creation screen, sizes listed under Insufficient quota - family limit have a Request quota link that starts the same request.
Can't wait for a request? Pick a size in a family where you still have room (another series with similar vCPUs and memory), or a region where you have quota.
When it's capacity, not quota
Some errors look similar but mean Azure itself can't place the VM. More quota changes nothing here.
| Error | Meaning | What to try |
|---|---|---|
AllocationFailed / ZonalAllocationFailed: "We do not have sufficient capacity for the requested VM size in this region / zone" | Azure has no free hardware for that size in that place right now | Another size, another availability zone, or another region; or retry later |
OverconstrainedAllocationRequest | Too many requirements together (zone, size, accelerated networking, proximity placement group) | Remove a constraint |
SkuNotAvailable | That size isn't offered to your subscription in that region or zone | az vm list-skus --location <region> --size <size> --all -o table shows the restrictions; choose another size or region |
Azure checks quota and capacity separately: you can have quota and still get AllocationFailed. For VMs that must always start, on-demand capacity reservation holds capacity for a size in a region or zone, with an SLA. Each reserved instance is billed at that size's normal rate whether a VM uses it or not. Reserved VM Instances are different: a billing discount that doesn't guarantee capacity.
Before the next deployment
- Keep a little headroom in each family you use, especially before a scale-out or a migration weekend.
- Delete deallocated VMs you no longer need; they hold quota.
- In templates that create many VMs, check
az vm list-usageas a pipeline step, so a quota gap fails early with a clear message instead of halfway through.
Sources
- Check vCPU quotas, Microsoft Learn (the two tiers, VM count, deallocated VMs counting, quota versus capacity, capacity reservation)
- Increase VM-family vCPU quotas, Microsoft Learn (the Quotas page, adjustable and non-adjustable quotas, the regional increase, Request quota from VM creation)
- Resolve errors for resource quotas, Microsoft Learn (the template error text, az vm list-usage, quota scopes)
- "QuotaExceeded" or "InsufficientVCPUQuota" error, Microsoft Learn (the family and regional message formats)
- Troubleshoot allocation failures when you create, restart, or resize VMs in Azure, Microsoft Learn
- Resolve errors for SKU not available, Microsoft Learn
- Increase spot vCPU family quotas, Microsoft Learn
- On-demand capacity reservation, Microsoft Learn (billing for unused reservations; quota and capacity as separate checks)
Did this fix it?
Comments
No comments yet. Share what worked for you.
Sign in to comment. Comments show under a display name you choose, never your email.