Bird
Raised Fist0
Terraformcloud~5 mins

Nested dynamic blocks in Terraform - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a nested dynamic block in Terraform?
A nested dynamic block is a dynamic block placed inside another dynamic block, allowing you to generate complex, repeated nested configurations based on input data.
Click to reveal answer
beginner
Why use nested dynamic blocks instead of static blocks?
Nested dynamic blocks let you create flexible, reusable infrastructure code that adapts to varying input sizes and structures without manually writing repetitive blocks.
Click to reveal answer
beginner
In Terraform, what keyword is used to define a dynamic block?
The keyword dynamic is used to define a dynamic block, which generates nested blocks based on a for_each expression.
Click to reveal answer
intermediate
How do you access the inner block's content inside a nested dynamic block?
Inside a nested dynamic block, you use content to define the inner block's attributes, and you can reference the current item with each.value or each.key.
Click to reveal answer
intermediate
What is a common use case for nested dynamic blocks in Terraform?
A common use case is defining complex resources like security groups with multiple rules, where each rule has multiple nested attributes like ports and protocols.
Click to reveal answer
What does a nested dynamic block in Terraform allow you to do?
AGenerate repeated nested blocks based on input data
BCreate static blocks only
CRun Terraform commands automatically
DDefine variables outside modules
Which keyword starts a dynamic block in Terraform?
Adynamic
Bblock
Crepeat
Dfor_each
How do you reference the current item inside a dynamic block?
Aitem.value
Bcurrent.value
Ceach.value
Dthis.value
What is the purpose of the 'content' block inside a dynamic block?
AImports modules
BRuns Terraform apply
CDeclares variables
DDefines the nested block's attributes
Which scenario best fits using nested dynamic blocks?
ARunning Terraform plan
BCreating multiple nested firewall rules with varying ports
CDefining a single static resource
DSetting environment variables
Explain how nested dynamic blocks work in Terraform and why they are useful.
Think about how you can repeat blocks inside other repeated blocks.
You got /4 concepts.
    Describe a real-world example where nested dynamic blocks would simplify Terraform code.
    Consider network security settings with many detailed rules.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What is the main purpose of using nested dynamic blocks in Terraform?

      easy
      A. To write static configuration without loops
      B. To create repeated blocks inside other repeated blocks dynamically
      C. To define provider settings only
      D. To manage Terraform state files

      Solution

      1. Step 1: Understand dynamic blocks

        Dynamic blocks allow repeating a block multiple times based on a list or map.
      2. Step 2: Understand nested dynamic blocks

        Nested dynamic blocks repeat blocks inside other repeated blocks, useful for complex nested lists.
      3. Final Answer:

        To create repeated blocks inside other repeated blocks dynamically -> Option B
      4. Quick Check:

        Nested dynamic blocks = repeated blocks inside repeated blocks [OK]
      Hint: Think of loops inside loops for nested resources [OK]
      Common Mistakes:
      • Confusing dynamic blocks with static blocks
      • Using nested dynamic blocks for simple flat lists
      • Thinking dynamic blocks manage state files
      2.

      Which of the following is the correct syntax to start a nested dynamic block named subnet inside a dynamic block named network?

      dynamic "network" {
        for_each = var.networks
        content {
          name = network.value.name
          // What goes here?
        }
      }
      easy
      A. dynamic "subnet" { for_each = network.value.subnets content { cidr_block = subnet.value } }
      B. dynamic subnet { for_each = network.value.subnets content { cidr_block = subnet.value } }
      C. dynamic "subnet" for_each = network.value.subnets { content { cidr_block = subnet.value } }
      D. dynamic "subnet" { for_each = var.subnets content { cidr_block = subnet.value } }

      Solution

      1. Step 1: Identify correct dynamic block syntax

        Dynamic blocks require the keyword dynamic, block name in quotes, then for_each and content blocks.
      2. Step 2: Check nested dynamic block context

        Inside the network dynamic block, use network.value.subnets for for_each and define content with subnet.value.
      3. Final Answer:

        dynamic "subnet" { for_each = network.value.subnets content { cidr_block = subnet.value } } -> Option A
      4. Quick Check:

        Correct syntax uses quotes and nested for_each [OK]
      Hint: Remember dynamic block name must be in quotes [OK]
      Common Mistakes:
      • Omitting quotes around block name
      • Using wrong variable for for_each
      • Placing for_each outside the braces
      3.

      Given the following Terraform snippet, what will be the value of resource.aws_vpc.example tags after deployment?

      variable "vpcs" {
        default = [
          { name = "vpc1", tags = ["tag1", "tag2"] },
          { name = "vpc2", tags = ["tag3"] }
        ]
      }
      
      resource "aws_vpc" "example" {
        for_each = { for v in var.vpcs : v.name => v }
        cidr_block = "10.0.0.0/16"
      
        dynamic "tags" {
          for_each = each.value.tags
          content {
            key   = tags.value
            value = "true"
          }
        }
      }
      medium
      A. Tags will be empty because tags block is not supported inside aws_vpc
      B. {"tags" = ["tag1", "tag2"]} for vpc1 and {"tags" = ["tag3"]} for vpc2
      C. No tags will be created because dynamic blocks cannot be nested
      D. {"tag1" = "true", "tag2" = "true"} for vpc1 and {"tag3" = "true"} for vpc2

      Solution

      1. Step 1: Understand for_each on resource

        Resource creates two VPCs named vpc1 and vpc2 with their respective tags list.
      2. Step 2: Analyze nested dynamic block for tags

        Dynamic block iterates over each.value.tags, creating a tag key with value "true" for each tag string.
      3. Final Answer:

        {"tag1" = "true", "tag2" = "true"} for vpc1 and {"tag3" = "true"} for vpc2 -> Option D
      4. Quick Check:

        Dynamic tags create key-value pairs from list items [OK]
      Hint: Dynamic blocks create repeated nested blocks from lists [OK]
      Common Mistakes:
      • Assuming tags remain as list instead of key-value map
      • Thinking dynamic blocks cannot be nested
      • Ignoring the for_each on resource
      4.

      Identify the error in this nested dynamic block snippet:

      dynamic "network" {
        for_each = var.networks
        content {
          name = network.value.name
          dynamic "subnet" {
            for_each = var.subnets
            content {
              cidr_block = subnet.value.cidr
            }
          }
        }
      }
      medium
      A. Incorrect use of content block inside dynamic
      B. Missing quotes around subnet in dynamic block
      C. Using var.subnets instead of network.value.subnets for nested for_each
      D. network.value.name is invalid syntax

      Solution

      1. Step 1: Check nested for_each source

        The nested dynamic block should iterate over subnets related to the current network, not the entire var.subnets list.
      2. Step 2: Confirm correct variable usage

        Using var.subnets ignores the current network context; it should be network.value.subnets to nest properly.
      3. Final Answer:

        Using var.subnets instead of network.value.subnets for nested for_each -> Option C
      4. Quick Check:

        Nested for_each must use parent block's value [OK]
      Hint: Nested loops must use parent block's current item [OK]
      Common Mistakes:
      • Using global variables instead of nested context
      • Forgetting quotes around dynamic block names
      • Misplacing content blocks
      5.

      You have a variable var.services which is a list of maps. Each map has a name and a list of ports. You want to create an aws_security_group resource with nested dynamic blocks to create ingress rules for each port of each service. Which Terraform code snippet correctly implements this?

      hard
      A.
      resource "aws_security_group" "example" {
        for_each = { for s in var.services : s.name => s }
        name = each.key
      
        dynamic "ingress" {
          for_each = each.value.ports
          content {
            from_port   = ingress.value
            to_port     = ingress.value
            protocol    = "tcp"
            cidr_blocks = ["0.0.0.0/0"]
          }
        }
      }
      B.
      resource "aws_security_group" "example" {
        for_each = var.services
        name = each.value.name
      
        dynamic ingress {
          for_each = each.value.ports
          content {
            from_port = ingress.value
            to_port = ingress.value
            protocol = "tcp"
            cidr_blocks = ["0.0.0.0/0"]
          }
        }
      }
      C.
      resource "aws_security_group" "example" {
        for_each = { for s in var.services : s.name => s }
        name = each.key
      
        dynamic "ingress" {
          for_each = each.value.ports
          content {
            from_port = ports.value
            to_port = ports.value
            protocol = "tcp"
            cidr_blocks = ["0.0.0.0/0"]
          }
        }
      }
      D.
      resource "aws_security_group" "example" {
        for_each = { for s in var.services : s.name => s }
        name = each.key
      
        dynamic "ingress" {
          for_each = each.value.ports
          content {
            from_port = ingress.key
            to_port = ingress.key
            protocol = "tcp"
            cidr_blocks = ["0.0.0.0/0"]
          }
        }
      }

      Solution

      1. Step 1: Use for_each on resource with map keyed by service name

        This allows referencing each service by name with each.key and each.value.
      2. Step 2: Use nested dynamic block for ingress rules

        Dynamic block named "ingress" iterates over each.value.ports with for_each and uses ingress.value for port numbers.
      3. Final Answer:

        Code snippet in Option A correctly uses nested dynamic blocks with proper variable references -> Option A
      4. Quick Check:

        Nested dynamic blocks need correct for_each and value references [OK]
      Hint: Use each.value and ingress.value inside nested dynamic blocks [OK]
      Common Mistakes:
      • Omitting quotes around dynamic block name
      • Using wrong variable names like ports.value instead of ingress.value
      • Not using map for resource for_each
      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