Discovering Azure Resource Manager

IntermediateTopic20 min5 min readAzure

AZ-104 notes: Discovering Azure Resource Manager. Covers key concepts for the Azure Administrator Associate exam.

  • Structured Summary + Deep Technical Understanding

Primary service:

  • Azure Resource Manager

Official documentation:

1️⃣ What Are ARM Templates?

ARM Templates are:

✔ JSON files ✔ Used for Infrastructure as Code (IaC) ✔ Declarative deployment model ✔ Processed by Azure Resource Manager

They define what your infrastructure should look like — not how to build it step-by-step.

🔹 High-Level Flow

  • ARM Template (JSON) → Submitted to Azure Resource Manager → ARM validates against schema → ARM identifies required Resource Providers → Resources deployed

Example resource types:

  • Microsoft.Compute/virtualMachines
  • Microsoft.Network/virtualNetworks
  • Microsoft.Storage/storageAccounts

2️⃣ Why Use ARM Templates?

🔹 Core Benefits

✔ Repeatable deployments ✔ Consistent environments ✔ Automation-ready ✔ Faster recovery ✔ Reduced manual errors ✔ Version-controlled infrastructure

🔹 Real-World Use Case

Hub-and-Spoke Network Topology:

Instead of manually building:

  • VNets
  • Subnets
  • NSGs
  • Route tables
  • Peering
  • You codify it once → deploy everywhere.
  • Dev/Test/Prod can use same template.

3️⃣ Deployment Scopes

ARM Templates can deploy at:

  • Resource Group scope (most common)
  • Subscription scope
  • Management Group scope
  • Tenant scope
  • Most basic examples use Resource Group scope.

Docs:

4️⃣ ARM Template Structure (Critical for Exams)

An ARM template contains structured sections.

🔹 1. $schema (Mandatory)

Defines:

  • Template schema version
  • Validation rules
  • IntelliSense behavior

Example:

Important:

  • Date = schema version
  • deploymentTemplate = resource group scope

🔹 2. contentVersion (Mandatory)

Example:

  • "contentVersion": "1.0.0.0"

Purpose:

  • Manual template versioning
  • Rarely used heavily in real-world
  • Git usually handles versioning

🔹 3. parameters (Optional but Powerful)

Used to:

  • ✔ Pass values at deployment time ✔ Make templates reusable ✔ Customize per environment

Example:

  • "parameters": {
  • "environmentName": {
  • "type": "string"
  • }
  • }

Use cases:

  • Dev → dev-webapp Test → test-webapp Prod → prod-webapp
  • Same template, different inputs.

Parameter File Example

Separate file:

  • {
  • "parameters": {
  • "environmentName": {
  • "value": "dev"
  • }
  • }
  • }
  • Used in CI/CD pipelines.

5️⃣ Built-in vs User-Defined Functions

ARM supports:

🔹 Built-in Functions

Examples:

  • resourceGroup()
  • subscription()
  • concat()
  • parameters()
  • variables()
  • uniqueString()

Docs:

🔹 User-Defined Functions (Optional Section)

Used when:

  • Complex logic needed
  • Combining multiple built-in functions

Defined under:

  • "functions": []
  • Less common in basic deployments.

6️⃣ Variables Section

Variables:

  • ✔ Reusable values ✔ Reduce repetition ✔ Improve readability

Example:

  • "variables": {
  • "location": "eastus"
  • }

Or dynamic:

  • "variables": {
  • "storageAccountName": "[concat('stor', uniqueString(resourceGroup().id))]"
  • }

Variables improve:

  • Maintainability
  • Template clarity

7️⃣ Resources Section (Core of Template)

  • This is the most important section.

Defines:

  • ✔ Resource type ✔ API version ✔ Name ✔ Location ✔ Properties ✔ Dependencies

Example:

  • "resources": [
  • {
  • "type": "Microsoft.Storage/storageAccounts",
  • "apiVersion": "2022-09-01",
  • "name": "[parameters('storageName')]",
  • "location": "[resourceGroup().location]",
  • "properties": {}
  • }
  • ]
  • Multiple resources can be deployed in one template.

🔹 Dependency Management

ARM automatically:

  • ✔ Detects dependencies ✔ Orders deployment

Or you can explicitly define:

  • "dependsOn": []

8️⃣ Outputs Section (Optional but Useful)

Used to:

  • ✔ Return values after deployment ✔ Feed values into pipelines ✔ Chain deployments

Example:

  • "outputs": {
  • "storageAccountName": {
  • "type": "string",
  • "value": "[variables('storageAccountName')]"
  • }
  • }

Common in:

  • CI/CD
  • Automation
  • DevOps workflows

9️⃣ Deployment Modes

Two deployment modes:

🔹 Incremental (Default)

Adds/updates resources defined in template Does NOT delete unspecified resources

🔹 Complete

  • Deletes resources not defined in template
  • ⚠ Complete mode can remove resources.

Docs:

🔟 Declarative vs Imperative Model

  • ARM Templates are Declarative.

You define:

  • Desired state.

ARM figures out:

  • Execution order.

Unlike:

  • Azure CLI scripts → Imperative (step-by-step).

1️⃣1️⃣ ARM vs Bicep

  • ARM = JSON (verbose) Bicep = Simplified DSL that compiles to ARM

Modern best practice:

  • Use Bicep instead of raw ARM.

Docs:

1️⃣2️⃣ Common Exam Pitfalls

🚩 ARM Templates are imperative → False 🚩 Schema section is optional → False 🚩 Parameters are mandatory → False 🚩 Resources section optional → False 🚩 Outputs required → False 🚩 ARM Templates manage data plane → False

1️⃣3️⃣ Real-World Deployment Example

Scenario:

Deploy:

  • VNet
  • Subnets
  • VM
  • NSG
  • Storage account

All defined in:

  • Single ARM template.

Benefits:

  • ✔ One-click deployment ✔ Dev/Test/Prod reuse ✔ Disaster recovery ready ✔ Git-controlled infrastructure

1️⃣4️⃣ Infrastructure as Code (IaC) Philosophy

Advantages:

✔ Version control ✔ Auditable changes ✔ CI/CD integration ✔ Reduced configuration drift ✔ Faster environment recreation

1️⃣5️⃣ Mental Model

Think of ARM template as:

  • Blueprint of infrastructure.

You define:

  • Inputs (parameters)
  • Internal logic (variables/functions)
  • Resources
  • Outputs
  • ARM enforces structure via schema.

1️⃣6️⃣ Final Key Takeaways

  • ✔ ARM Templates = JSON Infrastructure as Code ✔ Declarative model ✔ Repeatable deployments ✔ Schema validates template ✔ Parameters enable reuse ✔ Resources define infrastructure ✔ Outputs enable automation ✔ Deployable at multiple scopes

ARM templates are foundational for:

  • AZ-104
  • AZ-204
  • AZ-305
  • DevOps
  • Cloud architecture

If you'd like next:

  • 🧠 30 ARM template exam questions
  • 📄 Full annotated ARM template example
  • 🔄 ARM vs Bicep comparison deep dive
  • 🚀 CI/CD pipeline example using ARM
  • 🏗 Multi-resource production deployment template
  • Tell me your goal.

More in Microsoft Azure