Use Bicep and ARM templates

MS Learn modules: Explore Azure deployments with ARM templates · Use Bicep to declaratively deploy your Azure infrastructure · Learning objectives: author and deploy Azure infrastructure with bicep and ARM templates, understand scopes, parameters, loops, modules, and safe preview/what-if deployment.

Overview

The Azure-native IaC stack. ARM templates (JSON) are the deployment engine’s format; Bicep is a concise DSL that transpiles 1:1 to ARM JSON — two views of the same deployment. This module covers authoring, parameterizing, modularizing, and safely shipping Bicep through a provisioning-pipeline.

Units / lessons covered

  • ARM template anatomy: $schema, contentVersion, parameters, variables, resources, outputs
  • Bicep authoring: parameters, variables, modules, loops, conditional/dependsOn
  • Deployment scopes: resource group vs subscription/management group/tenant
  • az deployment group what-if / create and incremental vs complete modes
  • Deploying Bicep/ARM from Azure Pipelines or GitHub Actions

Key terms / commands

  • bicep build · az deployment group create -f main.bicep · az deployment group what-if · @displayName · module, param, var, output · %TARGETSCOPE% (rg/sub/mg/tenant) · parameter files (main.bicepparam / .parameters.json)

Hands-on / what to try

Author a main.bicep with a parameterized storage account + VM, run az deployment group what-if to preview changes, then deploy. Extract a nested module and re-wire it with an explicit dependsOn.

Exam focus

  • Bicep → ARM: they are the same deployment; Bicep is not a different engine.
  • Incremental leaves undeclared resources alone; complete deletes them (drift vs cleanup trade-off).
  • Preview every deployment with what-if; know resource-group vs subscription scopes.

Path MOC · intro-infrastructure-as-code · terraform-in-azure · configuration-and-drift