Azure VM Deployment Failure: Handling the 'SkuNotAvailable' Error Like an Expert
In cloud automation, we rely on the elegance of CLI scripts to provision infrastructure quickly. But what happens when our clean Bash script unexpectedly crashes with a complex traceback? In this blog, we’ll break down a real-world Azure CLI error when creating a virtual machine and turn it into a teaching moment.
The Problem
You tried deploying a VM with the following command:
az vm create -n iaas-vm-amin -g GrupoRecursosIaaS --image Ubuntu2204 --admin-username aminespinoza --admin-password Am0_Apr3nd3r$
And Azure returns:
(SkuNotAvailable) The requested VM size for resource 'Standard_DS1_v2' is currently not available in location 'eastus2'.
Azure CLI continues to throw a traceback error, masking the root cause under InvalidTemplateDeployment
, HttpResponseError
, and RuntimeError: The content for this response was already consumed
.
Real-World Scenario: Automated Lab Deployment for Training
Let’s say you're deploying VMs for training labs or QA testing. Your automation is supposed to create resources on demand. You choose a standard VM size like Standard_DS1_v2
, assuming it's always available. But due to regional demand or quota limitations, that SKU may be temporarily or permanently unavailable in your chosen region.
What Went Wrong
Key Issues Identified:
- The VM SKU (Standard_DS1_v2) was not available in eastus2.
- The CLI error message was buried under multiple layers of Python tracebacks.
- The deployment failed silently unless explicitly handled.
The Solution
✅ Step 1: Check Available SKUs in Your Region
az vm list-skus --location eastus2 --output table
Use this to filter only VM types:
az vm list-skus --location eastus2 --resource-type virtualMachines --output table
✅ Step 2: Choose an Alternative VM Size
Pick a different available SKU like Standard_B1s
or Standard_B2s
that fits your workload.
Update your script:
az vm create -n iaas-vm-amin -g GrupoRecursosIaaS --image Ubuntu2204 --size Standard_B1s --admin-username aminespinoza --admin-password Am0_Apr3nd3r$
Best Practices
Practice | Description |
---|---|
Validate SKUs first | Always check availability with az vm list-skus before hardcoding |
Be region-aware | Some sizes are only available in specific locations |
Add error handling | Use set -e in Bash and handle Azure CLI errors with conditionals |
Monitor quotas | Use az vm list-usage --location <region> to track compute limits |
Log errors | Save CLI output for debugging in CI/CD logs |
Future-Proofing Your Scripts
- Parameterize the VM size and region
- Add retry logic or fallback options
- Use infrastructure as code tools like Bicep or Terraform for better abstraction
- Integrate with GitHub Actions or Azure DevOps for visibility
Final Thoughts
Errors like SkuNotAvailable
aren’t bugs—they’re signals. They tell us to build with flexibility, verify dynamically, and expect variability in shared cloud environments.
With better diagnostics, fallback logic, and proactive checks, you can turn infrastructure errors into resilient cloud automation flows.
✍️ Written by: Cristian Sifuentes – Full-stack dev crafting scalable apps with [NET - Azure], [Angular - React], Git, SQL & extensions. Clean code, dark themes, atomic commits