What is Azure Resource Manager, and what is infrastructure as code on Azure?
Azure Resource Manager (ARM) is the deployment and management layer. Every request — from the portal, CLI, PowerShell, or an SDK — goes through ARM, which handles authentication, RBAC, tagging, and dependency ordering. That is why access control and tagging work consistently regardless of the tool used.
The hierarchy: management group → subscription → resource group → resource. A resource group is a lifecycle boundary — resources deployed and deleted together belong in one.
Infrastructure as code means declaring that infrastructure in version-controlled files rather than clicking through the portal.
- Bicep — the current Microsoft-recommended language. A concise domain-specific language that compiles to ARM JSON, with modules, type safety, and no state file to manage.
- ARM templates — the original JSON format. Verbose and hard to read, but still what everything compiles to.
- Terraform — multi-cloud, with a large ecosystem and its own state file. Often chosen where an organisation is not Azure-only.
Why it matters: environments are reproducible, changes go through code review, drift is detectable, and rebuilding after a disaster becomes a pipeline run rather than an archaeology project.
Note: Deployment modes are a good detail — Incremental adds and updates without removing anything, while Complete deletes resources in the group that are not in the template. Running Complete unexpectedly is a memorable way to lose things.





