Hey folks 👋
Just wrapped up a hands-on exercise in Azure using Bicep — Azure’s simpler, cleaner way to define infrastructure as code. If you’re like me and enjoy seeing your resources magically appear in the Azure portal (but without all the clicking around), you’ll probably enjoy this one.
Here’s how it went down — including what worked, what broke, and what I learned about quotas (and subscriptions that scream “please upgrade me”).
🎯 What I Set Out To Do
In this exercise, I wanted to:
- Define a Storage Account, App Service Plan, and Web App using Bicep
- Deploy it through Azure CLI
- Use my own Azure subscription (yes, even on the free tier)
- Learn how to debug when things go sideways 🙃
🧪 Step 1: Define the Storage Account in Bicep
I cracked open VS Code and created a file called main.bicep
. Here’s the starter code:
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: 'toylaunchstoragebob' // 🔁 Must be globally unique, lowercase, no special chars
location: 'westus'
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
✅ Tip: Storage account names must be globally unique. I used 'toylaunchstoragebob'
— feel free to copy or change it to match your vibe.
🛠️ Troubleshooting az login
on macOS with PowerShell
I hit a bump when trying to run az login
in PowerShell on my Mac. Turns out, PowerShell couldn’t find the Azure CLI path. If that’s you too, here’s how I fixed it:
- Run
which az
in Zsh/Bash → it gave me/opt/homebrew/bin/az
- Open your PowerShell profile:
code $PROFILE
- Add this to the bottom:
$env:PATH += ":/opt/homebrew/bin"
- Restart PowerShell. Now
az login
works!
🧑💻 Log In and Set Up Your Resource Group
az login
az account set --subscription "Your Subscription Name"
az group create --name BicepRG --location westus
🚀 Deploy the Storage Account
az deployment group create \
--resource-group BicepRG \
--template-file main.bicep \
--name deploy-storage
✅ Head over to Azure Portal → Resource Groups → BicepRG
Boom. One shiny new Storage Account 🎉
🧪 Step 2: Add an App Service Plan + Web App
I expanded my main.bicep
file to look like this:
resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = {
name: 'toylaunchappserviceplanbob'
location: 'westus'
sku: {
name: 'F1'
}
}
resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
name: 'toylaunchappbob'
location: 'westus'
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
Then I ran the deployment again:
az deployment group create \
--resource-group BicepRG \
--template-file main.bicep \
--name deploy-app
😩 And Then Azure Was Like: “Nah Bro”
I got this error:
The template deployment is not valid...
"SubscriptionIsOverQuotaForSku": "This region has quota of 0 instances for your subscription..."
Translation? My free-tier subscription didn’t have enough quota in East US to deploy App Services.
✅ Fix: I switched everything to westus
and re-deployed.
✅ Final Results: Check the Portal
In the Azure Portal → Resource Groups → BicepRG
, I saw:
- 🗄️ A Storage Account
- 🧱 An App Service Plan
- 🌐 A Web App
It’s all there. And it was all built from a single Bicep template.
📦 What I Learned
Task | What I Did |
---|---|
💾 Create Bicep Template | Defined 3 Azure resources using clean Bicep syntax |
💻 Use Azure CLI | Deployed using az deployment group create
|
🤝 Work in My Own Subscription | Hit some quota errors, but learned how to troubleshoot |
🔍 Verified the Setup | Used Azure CLI and Portal to double-check everything |
🤝 Let’s Connect
If you’re learning Azure and Infrastructure as Code too, I’d love to connect with others on the same journey.
Drop me a message on LinkedIn and just say hi!