Quick Answer
Run az vm list-skus --location to see if your desired size shows 'NotAvailableForSubscription'. If it does, switch to a different size or request quota increase via Azure portal.
Why This Happens
The SkuNotAvailable error is Azure's way of saying the VM size you picked isn't currently available for your subscription in that region. This isn't a temporary glitch—it's a hard restriction. The culprit here is almost always one of three things:
- The size is retired or not yet offered in that region.
- Your subscription lacks the necessary quota for that size family.
- Azure has temporarily disabled the size for new deployments in that region due to capacity constraints.
I've seen this with older sizes like D1_v2 or when trying to deploy GPU instances in smaller regions. It's especially common if you're using a free trial or a subscription with default quota limits.
Fix Steps
- Identify the exact error. When your deployment fails, note the region and VM size from the error message. The portal usually shows something like 'The provided VM size
Standard_D2s_v3is not available for subscription in regioneastus.' - Check available SKUs. Run this Azure CLI command to see the status for your size:
az vm list-skus --location eastus --size Standard_D2s_v3 --output table
# Output will show:
# ResourceType Locations Name Zones Restrictions
# virtualMachines eastus Standard_D2s_v3 1,2,3 NotAvailableForSubscription
If you see NotAvailableForSubscription in the Restrictions column, that size is off-limits for you. If it says None, you're good—the problem might be something else.
- Pick a different size. The fastest fix is to choose another size in the same family. For example, if
Standard_D2s_v3is blocked, tryStandard_D2as_v4orStandard_D2s_v4. Run the list command without the size filter to see what's actually available.
az vm list-skus --location eastus --resource-type virtualMachines --output table | grep -v 'NotAvailableForSubscription'- Redeploy with the new size. In the portal, go to your virtual machine creation blade, select the new size, and complete the deployment. Or update your ARM template or Terraform file if you're using IaC.
If That Doesn't Work
Sometimes no alternative size fits your needs—maybe you need that exact GPU or memory spec. Here's what to do:
- Request a quota increase. Go to
Help + supportin the Azure portal, create a new support request, select 'Quota' as the issue type, and choose the appropriate quota (e.g., 'Standard Dv3/v4 family vCPUs'). Explain that you need the size for a production workload. Approval usually takes a day or two. - Try a different region. If the size is available in a nearby region, spin up the VM there. Use
az vm list-skus --location westus2 --size Standard_D2s_v3to check. You'll need to update your VNet and other resources, but it's a solid fallback. - Check for regional capacity issues. Occasionally, a size is temporarily unavailable due to capacity pressure. Re-check after a few hours. I've seen this with new generations right after launch.
Prevention Tips
To avoid this headache in the future, do these three things:
- Verify SKU availability before writing templates. Always run the list-skus command for your target region before committing to a VM size in your code.
- Use Azure Policy to enforce available SKUs. You can create a policy that denies deployments with unapproved VM sizes. This catches mistakes before they hit production.
- Monitor quota regularly. Your quota isn't static—it changes with your subscription usage. Keep an eye on it in the portal under
Usage + quotas.
Remember, SkuNotAvailable is a permanent reject when the size is disabled for your subscription. Don't waste time retrying the same deployment. Move to a different size or request a quota bump. That's the practical path.