ARM template resources section in Azure - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When deploying infrastructure with ARM templates, it's important to understand how the deployment time grows as you add more resources.
We want to know: How does adding more resources affect the number of deployment operations?
Analyze the time complexity of deploying multiple resources defined in the ARM template's resources section.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "storageAccount1",
"location": "eastus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {}
},
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "storageAccount2",
"location": "eastus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {}
}
]
}
This template deploys two storage accounts as separate resources.
Identify the API calls, resource provisioning, data transfers that repeat.
- Primary operation: Deploying each resource defined in the resources array.
- How many times: Once per resource listed in the resources section.
Each resource requires a separate deployment operation, so as you add more resources, the number of operations grows directly with the number of resources.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | 10 resource deployments |
| 100 | 100 resource deployments |
| 1000 | 1000 resource deployments |
Pattern observation: The number of deployment operations increases linearly as you add more resources.
Time Complexity: O(n)
This means deployment time grows in direct proportion to the number of resources you define.
[X] Wrong: "Adding more resources won't affect deployment time much because Azure deploys everything instantly."
[OK] Correct: Each resource requires its own deployment call and provisioning time, so more resources mean more work and longer deployment.
Understanding how deployment time scales with resource count helps you design efficient templates and estimate deployment durations in real projects.
What if we used nested templates to deploy resources instead? How would that change the time complexity?
Practice
resources section in an ARM template?Solution
Step 1: Understand the role of the resources section
Theresourcessection defines what cloud parts (like servers, databases) to create or update automatically.Step 2: Compare options with this role
Only To list all cloud parts to create or update correctly describes this purpose. Other options describe unrelated tasks.Final Answer:
To list all cloud parts to create or update -> Option AQuick Check:
Resources section = list cloud parts [OK]
- Thinking resources section stores credentials
- Confusing resources with monitoring tools
- Assuming resources section is for scripts
resources section of an ARM template?Solution
Step 1: Identify required properties for each resource
Every Azure resource requirestype,apiVersion, andname. Thelocationproperty is required for regional resources to specify where the resource is created.Step 2: Check options for required property
location (location) is required.versionis incorrect; the correct property isapiVersion.tagsanddependsOnare optional.Final Answer:
location -> Option CQuick Check:
Location is required for resource placement [OK]
- Confusing apiVersion with version
- Assuming tags are mandatory
- Thinking dependsOn is always required
resources section:{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "mystorageaccount",
"location": "eastus",
"sku": { "name": "Standard_LRS" },
"kind": "StorageV2"
}What will happen when this template is deployed?
Solution
Step 1: Analyze resource properties
The resource defines a storage account with a valid type, apiVersion, name, location, sku, and kind. All required fields are present and valid.Step 2: Understand deployment behavior
Since all required properties are correct, deployment will create the storage account named 'mystorageaccount' in 'eastus' with the specified SKU and kind.dependsOnis optional here.Final Answer:
A new storage account named 'mystorageaccount' is created in East US -> Option BQuick Check:
Valid resource properties = successful creation [OK]
- Thinking dependsOn is always mandatory
- Assuming default SKU applies if specified
- Believing 'kind' property is invalid
resources section:{
"type": "Microsoft.Web/sites",
"apiVersion": "2021-02-01",
"name": "mywebapp",
"location": "westus"
}Deployment fails with an error about missing properties. What is the likely cause?
Solution
Step 1: Review required properties for Microsoft.Web/sites
Besides type, apiVersion, name, and location, a web app resource requires apropertiessection to define site settings.Step 2: Identify missing required section
The snippet lacks thepropertiessection, causing deployment failure.skuanddependsOnare optional, andkinddefaults to 'app' if omitted.Final Answer:
Missing 'properties' section with site configuration -> Option AQuick Check:
Web app needs properties section [OK]
- Assuming dependsOn is mandatory
- Confusing kind as required
- Ignoring properties section necessity
Solution
Step 1: Understand resource deployment order control
ARM templates use thedependsOnproperty to specify that one resource must finish deploying before another starts.Step 2: Apply dependsOn for correct order
Adding the storage account's resource name in the web app'sdependsOnensures the web app waits for the storage account to be ready.Final Answer:
Add the storage account's name in the web app's 'dependsOn' property -> Option DQuick Check:
dependsOn controls deployment order [OK]
- Thinking resource order in array controls deployment
- Believing apiVersion affects deployment order
- Assuming location controls deployment sequence
