Get a free Azure account
The labs build real resources in a real subscription. Signing up gives you three things: a $200 credit that lasts your first 30 days, 12 months of extra free quota on 20+ popular services (new customers only), and 65+ services that stay free forever. Every lab in this course fits inside the always-free tier or costs a few cents, and every lab tears down what it built at the end.
→ Sign up: azure.microsoft.com/free — you end up with a subscription (the billing container everything lives in). It asks for a credit or debit card to verify your identity; Azure does not charge it unless you deliberately move to pay-as-you-go later.
Open a terminal — a Bash one
Every lab is written in Bash — the commands use Bash variables, loops, and <<EOF here-docs. Run them in a Bash shell so they work exactly as written:
macOS / Linux your Terminal is already Bash-compatible — nothing to do. Windows install Git (it bundles "Git Bash"), then use Git Bash — not PowerShell: winget install --exact --id Git.Git then open Git Bash from the Start menu and work there.
The winget installs below can run from PowerShell, but run the actual lab commands in Git Bash. No Git? WSL or Azure Cloud Shell (bottom of page) are Bash too.
why PowerShell cannot read Bash syntax — NAME="x", $RANDOM, and cat > file <<EOF all fail there. Git Bash, WSL, and Cloud Shell run every lab unchanged.
One Git Bash quirk, already handled: Git Bash rewrites any argument starting with / into a Windows path, which breaks Azure resource IDs (a --scope /subscriptions/… then fails with MissingSubscription). Every lab defuses this with export MSYS_NO_PATHCONV=1 as its first line — leave that line in place and it just works. (On macOS/Linux that line does nothing, so it is safe everywhere.)
Install the Azure CLI
The az command every lab uses. One line for your OS.
winget install --exact --id Microsoft.AzureCLI
brew update && brew install azure-cli
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
verify az version -> prints 2.x. Not found? Reopen the terminal so az is on PATH. No winget? MSI at aka.ms/installazurecliwindows.
Sign in
Opens a browser, then hands control back to the terminal. Set the subscription if you have more than one.
az login az account show --query name -o tsv # which sub am I in? az account set --subscription "<id-or-name>" # switch if needed
verify az account show -> prints your subscription as JSON. Signed in.
Install Terraform — IaC labs only
Skip until a lab asks for it. The Bicep and CLI labs do not need it.
winget install --exact --id Hashicorp.Terraform
brew tap hashicorp/tap && brew install hashicorp/tap/terraform
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform
verify terraform -version -> Terraform v1.x. Python (AI labs) is preinstalled on macOS/Linux; on Windows: winget install --exact --id Python.Python.3.12.
Make a workspace you will remember
Before you clone anything: make one folder for all the labs, somewhere you will find again — your home directory or Documents. Note the path. Every lab clones or builds here, so you always know where your work is.
cd ~ # home (Windows: cd $HOME) — or wherever you'll remember mkdir azure-labs # any name you'll recognise later cd azure-labs pwd # <- note this path. this is home base.
verify pwd prints your folder's full path. Remember it — you will cd back here at the start of every lab, then run its git clone.
az role assignment create, which needs Owner or User Access Administrator on the subscription; a plain Contributor gets AuthorizationFailed. A few of those same labs also run az ad app create to register an Entra application, which needs permission to register apps in the directory. On your own free subscription you have both by default. On a work or school subscription you likely do not — check the lab's own prerequisites, or use a personal account instead.
az, terraform, python, and git preinstalled and already signed in; no az login needed. The first time you open it, it asks about storage: pick No storage account required for a throwaway session (nothing survives once you close the tab — fine for a single lab), or let it create a small storage account so your $HOME persists between sessions (a few cents a month, on top of the always-free list). Either path reads the same.