Bird
Raised Fist0
Terraformcloud~5 mins

Dynamic block syntax in Terraform - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a dynamic block in Terraform?
A dynamic block lets you generate multiple nested blocks inside a resource or module based on a list or map, making configuration flexible and reusable.
Click to reveal answer
beginner
Which keyword starts a dynamic block in Terraform?
The keyword dynamic starts a dynamic block, followed by the block type in quotes, like dynamic "ingress".
Click to reveal answer
intermediate
What are the two main parts inside a dynamic block?
Inside a dynamic block, you have for_each to loop over a collection, and content which defines the block structure to repeat.
Click to reveal answer
intermediate
Why use dynamic blocks instead of static blocks?
Dynamic blocks reduce repetition by generating multiple blocks from data, making configurations easier to maintain and adapt to changing inputs.
Click to reveal answer
advanced
Show a simple example of a dynamic block creating multiple ingress rules.
Example:
dynamic "ingress" {
  for_each = var.ingress_rules
  content {
    from_port   = ingress.value.from_port
    to_port     = ingress.value.to_port
    protocol    = ingress.value.protocol
    cidr_blocks = ingress.value.cidr_blocks
  }
}
Click to reveal answer
What does the for_each attribute inside a dynamic block do?
ALoops over a collection to create multiple nested blocks
BDefines the type of resource to create
CSpecifies the provider for the resource
DSets the block's name
Which part of a dynamic block defines the repeated block's structure?
Ablock_type
Bfor_each
Cvariable
Dcontent
True or False: Dynamic blocks can only be used inside resource blocks.
ATrue
BFalse
COnly in modules
DOnly in variables
What happens if the for_each collection is empty in a dynamic block?
AOne empty block is created
BTerraform throws an error
CNo nested blocks are created
DTerraform ignores the resource
Which of these is a benefit of using dynamic blocks?
AAvoids repeating similar blocks manually
BIncreases Terraform plan time significantly
CRequires writing more code
DLimits resource scalability
Explain how a dynamic block works in Terraform and when you would use it.
Think about how to create multiple similar blocks from a list or map.
You got /4 concepts.
    Describe the structure of a dynamic block with an example of creating multiple ingress rules.
    Imagine you want to add many firewall rules without writing each one manually.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a dynamic block in Terraform?
      easy
      A. To generate multiple nested blocks from a list or map dynamically
      B. To create a new Terraform provider
      C. To define variables with default values
      D. To execute shell commands during deployment

      Solution

      1. Step 1: Understand the role of dynamic blocks

        Dynamic blocks allow repeating nested blocks based on a collection like a list or map.
      2. Step 2: Compare with other options

        Options A, B, and D describe unrelated Terraform features.
      3. Final Answer:

        To generate multiple nested blocks from a list or map dynamically -> Option A
      4. Quick Check:

        Dynamic block = repeated nested blocks [OK]
      Hint: Dynamic blocks repeat nested blocks from lists/maps [OK]
      Common Mistakes:
      • Confusing dynamic blocks with variable declarations
      • Thinking dynamic blocks create providers
      • Assuming dynamic blocks run commands
      2. Which of the following is the correct syntax to start a dynamic block named ingress in Terraform?
      easy
      A. dynamic ingress { for_each = var.rules content { ... } }
      B. dynamic(ingress) { for_each = var.rules content { ... } }
      C. dynamic "ingress" { for_each = var.rules content { ... } }
      D. dynamic { ingress for_each = var.rules content { ... } }

      Solution

      1. Step 1: Recall dynamic block syntax

        The block must be declared as dynamic "block_name" { ... } with quotes around the block name.
      2. Step 2: Check each option

        dynamic "ingress" { for_each = var.rules content { ... } } uses correct syntax with quotes and proper structure; others miss quotes or have wrong syntax.
      3. Final Answer:

        dynamic "ingress" { for_each = var.rules content { ... } } -> Option C
      4. Quick Check:

        Dynamic block syntax requires quotes around block name [OK]
      Hint: Use quotes around block name in dynamic block [OK]
      Common Mistakes:
      • Omitting quotes around the block name
      • Using parentheses instead of braces
      • Placing block name outside dynamic keyword
      3. Given this Terraform snippet:
      dynamic "tag" {
        for_each = {"env" = "prod", "team" = "devops"}
        content {
          key   = tag.key
          value = tag.value
        }
      }

      What will be the result in the generated resource configuration?
      medium
      A. No tag blocks generated because map keys are strings
      B. A single tag block with key and value set to the entire map
      C. Syntax error due to incorrect for_each usage
      D. Two tag blocks with keys "env" and "team" and their values

      Solution

      1. Step 1: Understand for_each with map in dynamic block

        Using a map with for_each creates one nested block per key-value pair.
      2. Step 2: Analyze content block usage

        Inside content, tag.key and tag.value refer to each map entry's key and value, creating two blocks.
      3. Final Answer:

        Two tag blocks with keys "env" and "team" and their values -> Option D
      4. Quick Check:

        Map for_each creates one block per key-value pair [OK]
      Hint: Map in for_each creates one block per key-value pair [OK]
      Common Mistakes:
      • Thinking only one block is created for whole map
      • Confusing key and value references inside content
      • Assuming syntax error due to map usage
      4. Identify the error in this Terraform dynamic block snippet:
      dynamic "egress" {
        for_each = var.egress_rules
        content = {
          from_port = egress.value.from
          to_port   = egress.value.to
        }
      }
      medium
      A. The content block should use braces, not an assignment
      B. The variable egress is undefined inside the block
      C. Missing quotes around "egress" in dynamic block declaration
      D. for_each cannot be used with variables

      Solution

      1. Step 1: Check dynamic block content syntax

        The content must be a block, not an assignment. It should be content { ... }, not content = { ... }.
      2. Step 2: Verify other parts

        Variable egress is valid as the iterator, quotes are present, and for_each can use variables.
      3. Final Answer:

        The content block should use braces, not an assignment -> Option A
      4. Quick Check:

        content must be a block, not an equals assignment [OK]
      Hint: Use content { ... } block, not content = { ... } [OK]
      Common Mistakes:
      • Writing content as an assignment instead of a block
      • Assuming iterator variable is undefined
      • Forgetting quotes around dynamic block name
      5. You want to create multiple network_interface blocks dynamically in an AWS instance resource using a list of maps with keys device_index and subnet_id. Which dynamic block correctly achieves this?
      hard
      A. dynamic "network_interface" { for_each = var.interfaces content { device_index = network_interface.value.device_index subnet_id = network_interface.value.subnet_id } }
      B. dynamic "network_interface" { for_each = var.interfaces content { device_index = each.value.device_index subnet_id = each.value.subnet_id } }
      C. dynamic "network_interface" { for_each = var.interfaces content { device_index = network_interface.device_index subnet_id = network_interface.subnet_id } }
      D. dynamic "network_interface" { for_each = var.interfaces content { device_index = network_interface.key.device_index subnet_id = network_interface.key.subnet_id } }

      Solution

      1. Step 1: Identify the iterator variable in dynamic block

        Terraform uses each as the iterator inside dynamic blocks for for_each.
      2. Step 2: Check how to access map values

        Use each.value.key_name to access map elements inside content block.
      3. Step 3: Evaluate options

        dynamic "network_interface" { for_each = var.interfaces content { device_index = each.value.device_index subnet_id = each.value.subnet_id } } correctly uses each.value.device_index and each.value.subnet_id. Others incorrectly use network_interface or network_interface.key.
      4. Final Answer:

        dynamic "network_interface" { for_each = var.interfaces content { device_index = each.value.device_index subnet_id = each.value.subnet_id } } -> Option B
      5. Quick Check:

        Use each.value to access map in dynamic block [OK]
      Hint: Use each.value inside dynamic content block [OK]
      Common Mistakes:
      • Using block name as iterator variable
      • Using .key instead of .value for map access
      • Omitting the each keyword
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard