Get a free Azure account
The labs build real resources in a real subscription. Microsoft gives you one: a starter credit plus always-free services — enough for every lab, each of which tears down at the end.
→ Sign up: azure.microsoft.com/free — you end up with a subscription (the billing container everything lives in).
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 can't 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's 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 don't 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'll remember
Before you clone anything: make one folder for all the labs, somewhere you'll 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'll cd back here at the start of every lab, then run its git clone.
az, terraform, python, and git preinstalled and already signed in. Zero setup; run every lab as-is, no az login needed. Either path reads the same.