ARM Templates describe Azure infrastructure in a declarative JSON format. Azure Resource Manager validates the template, resolves dependencies, and provisions every resource in the correct order — idempotently.
End-to-end CI/CD pipeline for ARM Template deployments including validation, what-if, and gated apply.
Incremental mode (default) only adds/modifies resources. Complete mode deletes resources in the resource group that aren't in the template. Never use Complete without what-if first.
Nested templates embed JSON inline (messy for large deployments). Linked templates reference external URIs (Template Specs or Storage). Use Template Specs for versioned, shareable modules.
Always pin apiVersion (e.g. '2024-07-01'). ARM breaks if you use a version that doesn't exist. Use VS Code ARM extension to auto-complete valid API versions.
ARM deploys independent resources in parallel (up to 800 concurrent operations). Use dependsOn only when there is a true runtime dependency, not just a logical one.
Never put secrets in template parameters. Use Key Vault dynamic references: 'reference': { 'keyVault': { 'id': ... }, 'secretName': ... }. The secret is resolved server-side.
Store reusable templates as Template Specs in a shared Resource Group. Consumers reference them by ID + version — no more copying JSON files between repos.
Sign in to share your feedback and join the discussion.