Bird
Raised Fist0
Azurecloud~20 mins

ARM vs Bicep vs Terraform decision in Azure - Practice Questions

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
🎖️
Infrastructure as Code Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Choosing the right tool for Azure infrastructure as code

You want to deploy Azure resources using infrastructure as code. Which tool is best if you want native Azure support with simple syntax and no external dependencies?

AAzure CLI scripts, because they are easy to write and run commands directly.
BTerraform, because it supports multiple clouds and has a large community.
CBicep, because it is a domain-specific language that compiles to ARM templates and offers simpler syntax.
DARM templates, because they are native JSON templates directly supported by Azure.
Attempts:
2 left
💡 Hint

Think about which tool is directly supported by Azure without extra layers.

Architecture
intermediate
2:00remaining
Selecting a tool for multi-cloud infrastructure management

Your company manages infrastructure across Azure, AWS, and Google Cloud. Which tool is best suited to manage all clouds with a single configuration language?

ATerraform, because it supports multiple cloud providers with one language.
BBicep, because it simplifies ARM templates for Azure but does not support other clouds.
CARM templates, because they are designed for Azure resources only.
DAzure Resource Manager portal, because it provides a graphical interface for all clouds.
Attempts:
2 left
💡 Hint

Consider which tool supports multiple cloud providers natively.

security
advanced
2:30remaining
Handling secrets securely in infrastructure as code

You need to deploy Azure resources and include sensitive data like passwords. Which approach best secures secrets when using Bicep or ARM templates?

AEmbed secrets directly in the ARM or Bicep files as parameters.
BUse Azure Key Vault references in the templates to fetch secrets at deployment time.
CStore secrets in plain text files alongside the templates.
DHardcode secrets in the deployment scripts that call the templates.
Attempts:
2 left
💡 Hint

Think about how to avoid storing secrets in code files.

Best Practice
advanced
2:30remaining
Maintaining infrastructure code readability and reuse

Which practice improves readability and reuse when writing infrastructure as code for Azure using Bicep?

AUse Bicep modules to break down infrastructure into smaller reusable parts.
BWrite all resources in one large Bicep file without modules.
CCopy and paste resource definitions across multiple Bicep files.
DAvoid comments and documentation to keep files short.
Attempts:
2 left
💡 Hint

Think about how to organize code for reuse and clarity.

service_behavior
expert
3:00remaining
Understanding deployment behavior differences between ARM and Terraform

You deploy the same Azure resource using ARM template and Terraform. After deployment, you update the resource outside the tools. What happens when you redeploy with each tool?

ABoth ARM and Terraform detect external changes and update the resource accordingly.
BARM redeploys and overwrites changes; Terraform ignores external changes and does not update the resource.
CARM redeploys and overwrites changes; Terraform detects drift and can update the resource to match the configuration.
DTerraform redeploys and overwrites changes; ARM ignores external changes and does not update the resource.
Attempts:
2 left
💡 Hint

Consider how each tool tracks resource state and handles drift.

Practice

(1/5)
1. Which tool is native to Azure and uses JSON for defining infrastructure?
easy
A. Terraform
B. Bicep
C. ARM templates
D. Ansible

Solution

  1. Step 1: Understand native Azure tools

    ARM templates are the original native infrastructure-as-code tool for Azure using JSON format.
  2. Step 2: Compare with other tools

    Bicep simplifies ARM but is not JSON; Terraform is multi-cloud and not native Azure.
  3. Final Answer:

    ARM templates -> Option C
  4. Quick Check:

    Native Azure tool with JSON = ARM templates [OK]
Hint: Native Azure + JSON = ARM templates [OK]
Common Mistakes:
  • Confusing Bicep as native JSON tool
  • Thinking Terraform is Azure native
  • Selecting Ansible which is not Azure native
2. Which syntax correctly declares a resource in Bicep?
easy
A. resource vm 'Microsoft.Compute/virtualMachines@2021-07-01' = { name: 'myVM' }
B.
C. resource "vm" { type = "Microsoft.Compute/virtualMachines" name = "myVM" }
D. vm_resource = { type: 'Microsoft.Compute/virtualMachines', name: 'myVM' }

Solution

  1. Step 1: Identify Bicep syntax

    Bicep uses the keyword 'resource' followed by a symbolic name, type with API version, and properties in braces.
  2. Step 2: Compare options

    resource vm 'Microsoft.Compute/virtualMachines@2021-07-01' = { name: 'myVM' } matches Bicep syntax; the XML-like syntax is invalid, the HCL-style block is Terraform syntax, and the plain object is invalid.
  3. Final Answer:

    resource vm 'Microsoft.Compute/virtualMachines@2021-07-01' = { name: 'myVM' } -> Option A
  4. Quick Check:

    Bicep resource syntax = resource vm 'Microsoft.Compute/virtualMachines@2021-07-01' = { name: 'myVM' } [OK]
Hint: Bicep uses 'resource name type@version = { }' syntax [OK]
Common Mistakes:
  • Choosing Terraform syntax for Bicep
  • Confusing ARM JSON/XML with Bicep
  • Using invalid assignment formats
3. Given this Terraform snippet:
resource "azurerm_resource_group" "rg" {
  name     = "example-rg"
  location = "eastus"
}

What will happen when you run terraform apply?
medium
A. Deletes existing resource groups in East US
B. Fails because 'azurerm_resource_group' is invalid
C. Creates a virtual machine instead of a resource group
D. Creates a resource group named 'example-rg' in East US

Solution

  1. Step 1: Understand Terraform resource block

    The block defines an Azure resource group named 'example-rg' in 'eastus' location.
  2. Step 2: Predict Terraform apply behavior

    Terraform will create the resource group if it doesn't exist, no deletion or VM creation occurs.
  3. Final Answer:

    Creates a resource group named 'example-rg' in East US -> Option D
  4. Quick Check:

    Terraform resource block creates defined resource [OK]
Hint: Terraform resource block creates specified resource [OK]
Common Mistakes:
  • Thinking resource type is invalid
  • Confusing resource group with VM
  • Assuming deletion happens automatically
4. You try to deploy an ARM template but get a syntax error. Which is the most likely cause?
medium
A. Missing resource group in Terraform provider
B. Using Bicep syntax directly in ARM JSON template
C. Incorrect API version in Bicep resource declaration
D. Using Terraform commands on ARM template

Solution

  1. Step 1: Identify syntax error source

    ARM templates require JSON syntax; using Bicep syntax directly causes errors.
  2. Step 2: Eliminate other options

    Missing resource group affects Terraform, not ARM JSON; API version errors in Bicep cause deployment errors but not syntax errors; Terraform commands on ARM templates cause command errors, not syntax errors.
  3. Final Answer:

    Using Bicep syntax directly in ARM JSON template -> Option B
  4. Quick Check:

    ARM JSON syntax error = Bicep syntax used wrongly [OK]
Hint: ARM templates need JSON, not Bicep syntax [OK]
Common Mistakes:
  • Mixing Bicep syntax in ARM JSON
  • Confusing deployment errors with syntax errors
  • Assuming Terraform errors affect ARM templates
5. Your company uses Azure and AWS. You want a single tool to manage infrastructure on both clouds with reusable code. Which tool should you choose?
hard
A. Terraform
B. Bicep
C. Azure CLI scripts
D. ARM templates

Solution

  1. Step 1: Identify multi-cloud support

    Terraform supports multiple cloud providers including Azure and AWS with reusable code modules.
  2. Step 2: Compare other tools

    ARM and Bicep are Azure-only; Azure CLI scripts are Azure-specific and not declarative infrastructure code.
  3. Final Answer:

    Terraform -> Option A
  4. Quick Check:

    Multi-cloud infrastructure tool = Terraform [OK]
Hint: Terraform works across clouds, ARM/Bicep only Azure [OK]
Common Mistakes:
  • Choosing ARM or Bicep for multi-cloud
  • Thinking Azure CLI manages AWS
  • Ignoring Terraform's multi-cloud strength