Bird
Raised Fist0
Azurecloud~5 mins

ARM template outputs in Azure - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is the purpose of outputs in an ARM template?
Outputs in an ARM template provide information about the deployed resources, such as resource IDs or connection strings, which can be used after deployment.
Click to reveal answer
beginner
How do you define an output value in an ARM template?
You define an output by specifying a name, type, and value inside the outputs section of the ARM template JSON.
Click to reveal answer
intermediate
Which data types are valid for ARM template outputs?
Valid output data types include string, int, bool, array, and object.
Click to reveal answer
intermediate
Can ARM template outputs reference resource properties?
Yes, outputs can reference properties of deployed resources using functions like reference() or resourceId().
Click to reveal answer
intermediate
Why is it useful to use outputs in ARM templates when chaining deployments?
Outputs allow passing important information from one deployment to another, enabling automation and integration between resources.
Click to reveal answer
What section in an ARM template contains the output values?
Aresources
Boutputs
Cvariables
Dparameters
Which of the following is NOT a valid output data type in ARM templates?
Afloat
Bint
Cstring
Darray
How can you get the resource ID of a deployed resource in an output?
AUsing the <code>resourceId()</code> function
BUsing the <code>concat()</code> function only
CUsing the <code>parameters()</code> function
DUsing the <code>variables()</code> function
Can outputs be used to pass data between ARM template deployments?
ANo, outputs are only for display
BOnly if the deployment is manual
CYes, outputs can be consumed by other deployments
DOnly for virtual machines
Which keyword is required when defining an output in an ARM template?
AdependsOn
Blocation
Cname
Dtype
Explain how outputs in ARM templates help after resource deployment.
Think about what you want to know after your cloud resources are created.
You got /3 concepts.
    Describe how to define an output in an ARM template with an example.
    Look at the JSON structure for outputs.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of outputs in an ARM template?
      easy
      A. To display important information after deployment
      B. To define the resources to deploy
      C. To specify deployment parameters
      D. To set access permissions for resources

      Solution

      1. Step 1: Understand the role of outputs in ARM templates

        Outputs are used to show key information after the deployment finishes, such as resource IDs or connection strings.
      2. Step 2: Differentiate outputs from other template sections

        Resources define what to deploy, parameters set inputs, and outputs show results after deployment.
      3. Final Answer:

        To display important information after deployment -> Option A
      4. Quick Check:

        Outputs = show info after deployment [OK]
      Hint: Outputs always show info after deployment [OK]
      Common Mistakes:
      • Confusing outputs with parameters
      • Thinking outputs define resources
      • Assuming outputs set permissions
      2. Which of the following is the correct syntax to define an output named storageAccountName of type string in an ARM template?
      easy
      A. "outputs": { "storageAccountName": { "type": "string", "val": "[variables('storageName')]" } }
      B. "outputs": { "storageAccountName": { "type": "string", "value": "[variables('storageName')]" } }
      C. "outputs": { "storageAccountName": { "datatype": "string", "value": "[variables('storageName')]" } }
      D. "outputs": { "storageAccountName": { "type": "string", "value": "variables('storageName')" } }

      Solution

      1. Step 1: Check the required keys for output

        An output must have a "type" key specifying the data type and a "value" key with an expression or value.
      2. Step 2: Validate the syntax for referencing variables

        The value must be an expression in square brackets, e.g., "[variables('storageName')]".
      3. Final Answer:

        "outputs": { "storageAccountName": { "type": "string", "value": "[variables('storageName')]" } } -> Option B
      4. Quick Check:

        Output syntax = type + value with [expression] [OK]
      Hint: Outputs need "type" and "value" keys with expressions in brackets [OK]
      Common Mistakes:
      • Using 'datatype' instead of 'type'
      • Using 'val' instead of 'value'
      • Missing brackets around expressions
      3. Given this output snippet in an ARM template:
      "outputs": { "appEndpoint": { "type": "string", "value": "[concat('https://', reference(resourceId('Microsoft.Web/sites', variables('appName'))).defaultHostName)]" }}

      What will appEndpoint output after deployment?
      medium
      A. The app name only
      B. The resource ID of the web app
      C. The full URL of the deployed web app
      D. An error because of wrong syntax

      Solution

      1. Step 1: Understand the expression used in the output value

        The expression uses concat to build a URL string starting with 'https://' and appends the defaultHostName property of the web app resource.
      2. Step 2: Determine what reference() returns

        reference() fetches runtime properties of the deployed resource, here the web app's hostname.
      3. Final Answer:

        The full URL of the deployed web app -> Option C
      4. Quick Check:

        Output builds URL using reference() = full URL [OK]
      Hint: reference() gets deployed resource info, concat builds URL [OK]
      Common Mistakes:
      • Thinking output returns resource ID instead of hostname
      • Confusing variable name with output value
      • Assuming syntax error due to complex expression
      4. You have this output defined:
      "outputs": { "storageKey": { "type": "string", "value": "listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageName')), '2021-04-01').keys[0].value" }}

      After deployment, you get an error. What is the likely cause?
      medium
      A. Missing square brackets around the expression value
      B. Incorrect API version in listKeys function
      C. Output type should be 'securestring' instead of 'string'
      D. Variables section missing the storageName variable

      Solution

      1. Step 1: Check the syntax for output value expressions

        Output values must be enclosed in square brackets to indicate an expression, e.g., "[expression]".
      2. Step 2: Identify the missing brackets in the given output

        The value is missing the surrounding brackets, so ARM treats it as a literal string causing an error.
      3. Final Answer:

        Missing square brackets around the expression value -> Option A
      4. Quick Check:

        Output expressions need [ ] brackets [OK]
      Hint: Always wrap output expressions in [ ] brackets [OK]
      Common Mistakes:
      • Forgetting brackets around expressions
      • Assuming API version is wrong without checking
      • Confusing output type with expression syntax
      5. You want to output a list of VM names created by a loop in your ARM template. Which output definition correctly returns an array of VM names?
      hard
      A. "outputs": { "vmNames": { "type": "array", "value": "[array(variables('vmNames'))]" } }
      B. "outputs": { "vmNames": { "type": "object", "value": "variables('vmNames')" } }
      C. "outputs": { "vmNames": { "type": "string", "value": "[variables('vmNames')]" } }
      D. "outputs": { "vmNames": { "type": "array", "value": "[variables('vmNames')]" } }

      Solution

      1. Step 1: Identify the correct output type for a list of names

        A list of VM names is an array, so the output type should be "array".
      2. Step 2: Check the syntax for output value expressions

        The value must be an expression enclosed in brackets, e.g., "[variables('vmNames')]". Wrapping with array() is unnecessary if vmNames is already an array.
      3. Final Answer:

        "outputs": { "vmNames": { "type": "array", "value": "[variables('vmNames')]" } } -> Option D
      4. Quick Check:

        Output array = type array + value in [ ] [OK]
      Hint: Use type 'array' and wrap value in [ ] brackets [OK]
      Common Mistakes:
      • Using type 'string' for arrays
      • Omitting brackets around expressions
      • Adding unnecessary array() function