<!-- RevealJS-compatible: slides separated by --- --> ## Why IaC - Repeatable, auditable, versioned - Prevent config drift - Review with PRs instead of clicks --- ## ARM vs Bicep (same engine) - **ARM**: JSON, verbose - **Bicep**: concise DSL, compiles to ARM - Tools: VS Code ext, linter, modules --- ## Template anatomy - **parameters**: location, namePrefix, adminUser, sshKey, myIp - **resources**: VNet/Subnet, NSG, Public IP, NIC, **Ubuntu VM** - **outputs**: public IP --- ## Workflow ```bash az deployment group what-if -f main.bicep -p dev.bicepparam az deployment group create -f main.bicep -p dev.bicepparam ``` - Validate → Deploy → Inspect outputs