Bird
Raised Fist0
Terraformcloud~20 mins

Why dynamic blocks reduce repetition in Terraform - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Dynamic Blocks Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding dynamic blocks in Terraform

Which statement best explains why dynamic blocks in Terraform reduce repetition?

AThey allow you to write a single block that can generate multiple nested blocks based on a list or map, avoiding manual copy-pasting.
BThey replace all variables with fixed values, so you only write blocks once.
CThey automatically create resources without any configuration, so you don't need to write blocks at all.
DThey remove the need for any loops or conditions in Terraform configurations.
Attempts:
2 left
💡 Hint

Think about how you can generate repeated blocks from data structures instead of copying code.

❓ Configuration
intermediate
2:00remaining
Output count of nested blocks generated by dynamic block

Given this Terraform snippet using a dynamic block, how many ingress blocks will be created?

resource "aws_security_group" "example" {
  name = "example"

  dynamic "ingress" {
    for_each = var.rules
    content {
      from_port   = ingress.value.from_port
      to_port     = ingress.value.to_port
      protocol    = ingress.value.protocol
      cidr_blocks = ingress.value.cidr_blocks
    }
  }
}

Assuming var.rules is a list with 3 elements.

A3
B1
C0
DDepends on the number of security groups
Attempts:
2 left
💡 Hint

Dynamic blocks create one nested block per item in the collection.

❓ Architecture
advanced
2:30remaining
Choosing dynamic blocks for modular Terraform design

You are designing a Terraform module to create firewall rules. You want to support any number of rules without repeating code. Which approach best uses dynamic blocks to achieve this?

AUse count on the resource itself to create multiple resources, each with a single rule block hardcoded.
BManually write one block per rule and require users to copy the module multiple times.
CUse a dynamic block with for_each over a variable list of rules to generate nested rule blocks inside the resource.
DUse a static block with a fixed number of rules and ignore extra rules.
Attempts:
2 left
💡 Hint

Think about how to generate multiple nested blocks inside one resource dynamically.

❓ service_behavior
advanced
2:00remaining
Effect of dynamic blocks on resource behavior

When using dynamic blocks to create multiple nested blocks in a Terraform resource, what is the effect on the deployed infrastructure?

AOnly the first nested block generated by the dynamic block will be applied to the infrastructure.
BThe infrastructure will have multiple nested configurations applied as specified by the dynamic block iterations.
CDynamic blocks only affect Terraform state but do not change the actual infrastructure.
DThe resource will fail to deploy because dynamic blocks are not supported by providers.
Attempts:
2 left
💡 Hint

Consider how Terraform translates configuration into real infrastructure changes.

❓ security
expert
3:00remaining
Security risks of improper dynamic block usage

What is a potential security risk when using dynamic blocks in Terraform to generate firewall rules from user input without validation?

ADynamic blocks prevent any changes to firewall rules once applied.
BDynamic blocks automatically encrypt all inputs, so no security risk exists.
CTerraform will reject any dynamic block with user input, preventing risks.
DUnvalidated input could create overly permissive firewall rules, exposing resources to unwanted access.
Attempts:
2 left
💡 Hint

Think about what happens if user data controls security settings without checks.

Practice

(1/5)
1. What is the main benefit of using dynamic blocks in Terraform?
easy
A. They replace the need for variables in Terraform configurations.
B. They improve the speed of Terraform plan and apply operations.
C. They reduce repetition by generating multiple nested blocks automatically.
D. They allow Terraform to run without a backend configuration.

Solution

  1. Step 1: Understand the purpose of dynamic blocks

    Dynamic blocks let you create repeated nested blocks from a list or map without manually copying code.
  2. Step 2: Compare benefits

    This reduces repetition and keeps code clean and scalable, unlike options about speed, variables, or backend.
  3. Final Answer:

    They reduce repetition by generating multiple nested blocks automatically. -> Option C
  4. Quick Check:

    Dynamic blocks reduce repetition = C [OK]
Hint: Dynamic blocks create repeated blocks from lists automatically [OK]
Common Mistakes:
  • Thinking dynamic blocks speed up Terraform execution
  • Confusing dynamic blocks with variables
  • Believing dynamic blocks remove backend needs
2. Which of the following is the correct syntax to start a dynamic block in Terraform?
easy
A. dynamic "block_name" { for_each = var.list }
B. dynamic block_name { for_each = var.list }
C. dynamic block_name = var.list { }
D. dynamic "block_name" = var.list { }

Solution

  1. Step 1: Recall dynamic block syntax

    Dynamic blocks use the keyword dynamic followed by the block name in quotes, then a block with for_each.
  2. Step 2: Match syntax to options

    Only dynamic "block_name" { for_each = var.list } matches the correct syntax: dynamic "block_name" { for_each = var.list }.
  3. Final Answer:

    dynamic "block_name" { for_each = var.list } -> Option A
  4. Quick Check:

    Correct dynamic block syntax = D [OK]
Hint: Dynamic block name must be in quotes after keyword dynamic [OK]
Common Mistakes:
  • Omitting quotes around block name
  • Using equals sign instead of braces
  • Placing for_each outside the block
3. Given this Terraform snippet:
variable "ports" { default = [80, 443] }

resource "aws_security_group" "example" {
  name = "example"

  dynamic "ingress" {
    for_each = var.ports
    content {
      from_port   = ingress.value
      to_port     = ingress.value
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    }
  }
}

How many ingress blocks will be created in the security group?
medium
A. Depends on AWS region
B. 1
C. 0
D. 2

Solution

  1. Step 1: Analyze the for_each list

    The variable ports contains two values: 80 and 443.
  2. Step 2: Count dynamic block iterations

    The dynamic block creates one ingress block per item in var.ports, so 2 blocks total.
  3. Final Answer:

    2 -> Option D
  4. Quick Check:

    List length = number of blocks = 2 [OK]
Hint: Dynamic blocks create one nested block per list item [OK]
Common Mistakes:
  • Assuming only one block is created
  • Thinking AWS region affects block count
  • Confusing dynamic block with static block
4. Identify the error in this Terraform dynamic block snippet:
dynamic "egress" {
  for_each = var.rules
  content = {
    from_port   = egress.value.from
    to_port     = egress.value.to
    protocol    = "tcp"
  }
}
medium
A. Incorrect use of equals sign for content block
B. Missing quotes around block name "egress"
C. for_each must be outside the dynamic block
D. Variable var.rules cannot be used in dynamic blocks

Solution

  1. Step 1: Check dynamic block content syntax

    The content must be a block, not assigned with equals sign.
  2. Step 2: Identify correct syntax

    Correct syntax uses content { ... } without equals sign. The snippet incorrectly uses content = { ... }.
  3. Final Answer:

    Incorrect use of equals sign for content block -> Option A
  4. Quick Check:

    content block uses braces, no equals sign = B [OK]
Hint: Use content { } block, not content = { } [OK]
Common Mistakes:
  • Using equals sign with content
  • Placing for_each outside dynamic block
  • Misquoting block name
5. You want to create multiple lifecycle_rule blocks in an aws_s3_bucket resource using a dynamic block. Your variable is a map with keys as rule names and values as rule details. Which approach correctly uses dynamic blocks to reduce repetition and handle the map structure?
hard
A. Use for_each = var.rules and access each rule with lifecycle_rule.key only inside content block.
B. Use for_each = var.rules and access each rule with lifecycle_rule.value inside content block.
C. Use count = length(var.rules) and index into var.rules inside content block.
D. Manually write each lifecycle_rule block without dynamic blocks.

Solution

  1. Step 1: Understand dynamic block with map variable

    When using a map, for_each iterates over key-value pairs. The value is accessed with lifecycle_rule.value.
  2. Step 2: Identify correct usage

    Use for_each = var.rules and access each rule with lifecycle_rule.value inside content block. correctly uses for_each = var.rules and accesses lifecycle_rule.value inside the content block to get rule details.
  3. Final Answer:

    Use for_each = var.rules and access each rule with lifecycle_rule.value inside content block. -> Option B
  4. Quick Check:

    Map iteration uses .value for content = A [OK]
Hint: Use .value to access map values inside dynamic block content [OK]
Common Mistakes:
  • Using only .key without .value for map data
  • Using count instead of for_each for maps
  • Writing blocks manually instead of dynamic
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