Bird
Raised Fist0
Azurecloud~20 mins

ARM template structure in Azure - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
ARM Template Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Identify the main sections of an ARM template
Which of the following lists the main sections you will find in a valid ARM template?
Asettings, modules, scripts, outputs
Bparameters, variables, resources, outputs
Cinputs, functions, services, results
Dconfigurations, templates, deployments, logs
Attempts:
2 left
💡 Hint
Think about the parts that define inputs, reusable values, what to create, and what to return.
Configuration
intermediate
2:00remaining
Determine the output value from an ARM template snippet
Given this ARM template output section, what will be the value of the output named 'storageAccountName' after deployment?
{
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "mystorageaccount123"
    }
  }
}
Anull
B"storageAccountName"
C"mystorageaccount123"
DAn error occurs because the value is not a parameter
Attempts:
2 left
💡 Hint
Outputs return the value specified in the 'value' field.
Architecture
advanced
2:00remaining
Choose the correct resource declaration in an ARM template
Which option correctly declares a resource of type 'Microsoft.Storage/storageAccounts' with API version '2022-09-01' and name 'mystorageaccount'?
A
{
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "2022-09-01",
  "name": "mystorageaccount",
  "location": "eastus",
  "properties": {}
}
B
{
  "resourceType": "Microsoft.Storage/storageAccounts",
  "version": "2022-09-01",
  "resourceName": "mystorageaccount",
  "region": "eastus",
  "settings": {}
}
C
{
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "2022-09-01",
  "name": "storageaccount",
  "location": "eastus",
  "properties": {}
}
D
{
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "2021-04-01",
  "name": "mystorageaccount",
  "location": "eastus",
  "properties": {}
}
Attempts:
2 left
💡 Hint
Check the exact property names and values for resource declaration.
security
advanced
2:00remaining
Identify the security risk in an ARM template snippet
What is the main security risk in this ARM template parameter declaration?
{
  "parameters": {
    "adminPassword": {
      "type": "string",
      "defaultValue": "P@ssw0rd123",
      "metadata": {
        "description": "Admin password"
      }
    }
  }
}
AThere is no security risk in this declaration
BThe parameter type should be 'secureString' instead of 'string'
CThe metadata description reveals the password
DThe password is hardcoded as a default value, exposing sensitive data
Attempts:
2 left
💡 Hint
Think about how sensitive information should be handled in templates.
service_behavior
expert
2:00remaining
Predict the deployment behavior with missing required properties
If an ARM template resource declaration for a virtual machine omits the 'location' property, what will happen during deployment?
ADeployment fails with an error indicating the missing 'location' property
BAzure assigns a default location automatically
CDeployment succeeds but the VM is created in an undefined location
DDeployment is queued until the location is specified manually
Attempts:
2 left
💡 Hint
Consider required properties for Azure resources in ARM templates.

Practice

(1/5)
1. Which section in an ARM template is used to define the Azure resources you want to create?
easy
A. outputs
B. parameters
C. resources
D. variables

Solution

  1. Step 1: Understand ARM template sections

    An ARM template has sections like parameters, variables, resources, and outputs.
  2. Step 2: Identify the section for Azure resources

    The 'resources' section lists the Azure services and components to create.
  3. Final Answer:

    resources -> Option C
  4. Quick Check:

    Resources section defines Azure resources [OK]
Hint: Resources section always holds Azure resource definitions [OK]
Common Mistakes:
  • Confusing parameters with resources
  • Thinking variables define resources
  • Mixing outputs with resource definitions
2. Which of the following is the correct way to start an ARM template JSON file?
easy
A. { "parameters": { }, "variables": { }, "resources": [ ] }
B. [ "parameters", "variables", "resources" ]
C.
D. parameters: {}, variables: {}, resources: []

Solution

  1. Step 1: Recognize ARM template format

    ARM templates are JSON files with keys like parameters, variables, and resources.
  2. Step 2: Check JSON syntax correctness

    { "parameters": { }, "variables": { }, "resources": [ ] } uses valid JSON object syntax with keys and empty objects/arrays.
  3. Final Answer:

    { "parameters": { }, "variables": { }, "resources": [ ] } -> Option A
  4. Quick Check:

    ARM templates start with JSON objects [OK]
Hint: ARM templates are JSON objects with keys, not arrays or XML [OK]
Common Mistakes:
  • Using array brackets instead of object braces
  • Writing XML tags instead of JSON
  • Omitting quotes around keys
3. Given this ARM template snippet:
{ "parameters": { "vmName": { "type": "string" } }, "variables": { "location": "eastus" }, "resources": [ { "type": "Microsoft.Compute/virtualMachines", "name": "[parameters('vmName')]", "location": "[variables('location')]" } ] }

What will be the location of the virtual machine if the parameter vmName is set to "MyVM"?
medium
A. MyVM
B. westus
C. undefined
D. eastus

Solution

  1. Step 1: Identify location value in variables

    The variable 'location' is set to "eastus" in the variables section.
  2. Step 2: Understand resource location assignment

    The VM's location uses the variable 'location', so it will be "eastus" regardless of vmName.
  3. Final Answer:

    eastus -> Option D
  4. Quick Check:

    Location comes from variables, not parameters [OK]
Hint: Resource location uses variables, not parameters [OK]
Common Mistakes:
  • Confusing vmName parameter with location
  • Assuming location is from parameters
  • Ignoring variable usage syntax
4. Identify the error in this ARM template snippet:
{ "parameters": { "storageName": { "type": "string" } }, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "name": "storageName", "location": "eastus" } ] }
medium
A. The location value must be a variable, not a string
B. The resource name should use parameter syntax with brackets
C. Parameters section cannot be empty
D. Resource type is invalid

Solution

  1. Step 1: Check resource name usage

    The resource name is set as "storageName" string, but it should reference the parameter.
  2. Step 2: Correct parameter reference syntax

    Parameters are referenced with "[parameters('storageName')]" to use the parameter value.
  3. Final Answer:

    The resource name should use parameter syntax with brackets -> Option B
  4. Quick Check:

    Parameter references need brackets and function call [OK]
Hint: Use [parameters('name')] to reference parameters in resources [OK]
Common Mistakes:
  • Using parameter name as plain string
  • Thinking location must be variable
  • Assuming resource type is wrong
5. You want to output the public IP address of a VM created in your ARM template. Which section should you add this output to, and what is the correct syntax to reference the IP address property named "ipAddress" from a resource named "myPublicIP"?
hard
A. Add to outputs section with "ip": { "value": "[reference('myPublicIP').ipAddress]" }
B. Add to variables section with "ip": "myPublicIP.ipAddress"
C. Add to parameters section with "ipAddress": { "type": "string" }
D. Add to resources section with "outputs": { "ip": "myPublicIP.ipAddress" }

Solution

  1. Step 1: Identify output section usage

    Outputs section is used to return values after deployment, like IP addresses.
  2. Step 2: Use correct syntax to reference resource property

    Use the reference() function with resource name and property: "[reference('myPublicIP').ipAddress]".
  3. Final Answer:

    Add to outputs section with "ip": { "value": "[reference('myPublicIP').ipAddress]" } -> Option A
  4. Quick Check:

    Outputs use reference() to get resource properties [OK]
Hint: Use outputs section and reference() function for resource properties [OK]
Common Mistakes:
  • Putting outputs in variables or parameters
  • Using dot notation without reference()
  • Misplacing outputs inside resources