Bird
Raised Fist0
Terraformcloud~5 mins

For expressions for transformation in Terraform - Commands & Configuration

Choose your learning style10 modes available
Introduction
Sometimes you want to change a list or map into a new list or map with different values. For expressions in Terraform help you do this easily by looping over each item and making a new one.
When you have a list of server names and want to add a prefix to each name.
When you want to convert a list of numbers into strings for display.
When you need to create a map from a list by using each item as a key.
When you want to filter and change values in a list before using them.
When you want to build a new list of resources based on existing data.
Config File - main.tf
main.tf
variable "server_names" {
  type    = list(string)
  default = ["app1", "app2", "app3"]
}

output "prefixed_servers" {
  value = [for name in var.server_names : "prod-${name}"]
}

output "server_name_lengths" {
  value = { for name in var.server_names : name => length(name) }
}

This Terraform file defines a variable server_names as a list of strings.

The first output prefixed_servers uses a for expression to add the prefix "prod-" to each server name, creating a new list.

The second output server_name_lengths uses a for expression to create a map where each server name is a key and its length is the value.

Commands
This command initializes the Terraform working directory. It downloads the necessary provider plugins and prepares Terraform to run.
Terminal
terraform init
Expected OutputExpected
Initializing the backend... Initializing provider plugins... - Finding latest version of hashicorp/random... - Installing hashicorp/random v3.4.3... - Installed hashicorp/random v3.4.3 (signed by HashiCorp) Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure.
This command applies the Terraform configuration to create or update infrastructure. The -auto-approve flag skips the confirmation prompt.
Terminal
terraform apply -auto-approve
Expected OutputExpected
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create No changes. Your infrastructure matches the configuration. Outputs: prefixed_servers = [ "prod-app1", "prod-app2", "prod-app3", ] server_name_lengths = { "app1" = 4 "app2" = 4 "app3" = 4 } Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
→
-auto-approve - Automatically approve the apply without asking for confirmation
This command shows the value of the output named prefixed_servers, which is the list of server names with the prefix added.
Terminal
terraform output prefixed_servers
Expected OutputExpected
[ "prod-app1", "prod-app2", "prod-app3" ]
This command shows the value of the output named server_name_lengths, which is a map of server names to their lengths.
Terminal
terraform output server_name_lengths
Expected OutputExpected
{ "app1" = 4 "app2" = 4 "app3" = 4 }
Key Concept

If you remember nothing else from this pattern, remember: for expressions let you create new lists or maps by transforming each item in an existing list or map.

Common Mistakes
Using for expressions without specifying the output structure correctly
Terraform expects a list or map output, so missing the colon or wrong syntax causes errors.
Always use the syntax [for item in list : expression] for lists or {for key, value in map : key => value} for maps.
Trying to use for expressions outside of Terraform expressions blocks
For expressions only work inside Terraform expressions like variables, outputs, or resource arguments.
Use for expressions only inside Terraform configuration expressions, not as standalone commands.
Summary
Use for expressions to transform each item in a list or map into a new list or map.
Apply the Terraform configuration with terraform apply to see the transformed outputs.
Use terraform output to view the results of your for expressions.

Practice

(1/5)
1. What does a for expression in Terraform primarily do?
easy
A. Creates a new resource in the cloud
B. Transforms each item in a list or map into a new list or map
C. Deletes resources based on a condition
D. Runs a shell command on the local machine

Solution

  1. Step 1: Understand the purpose of for expressions

    For expressions in Terraform are used to transform collections like lists or maps into new collections by applying a transformation to each item.
  2. Step 2: Differentiate from other Terraform actions

    Creating or deleting resources and running shell commands are not done by for expressions; they are handled by resource blocks or provisioners.
  3. Final Answer:

    Transforms each item in a list or map into a new list or map -> Option B
  4. Quick Check:

    For expressions = transform collections [OK]
Hint: For expressions change each item in a list/map to a new form [OK]
Common Mistakes:
  • Thinking for expressions create or delete resources
  • Confusing for expressions with provisioners
  • Assuming for expressions run commands
2. Which of the following is the correct syntax for a simple for expression transforming a list [1, 2, 3] to their squares in Terraform?
easy
A. [for n in [1, 2, 3] : n * n]
B. [for n : n * n in [1, 2, 3]]
C. [for n in [1, 2, 3] n * n]
D. [for n in [1, 2, 3] => n * n]

Solution

  1. Step 1: Recall Terraform for expression syntax

    The correct syntax is: [for <variable> in <list> : <expression>]. [for n in [1, 2, 3] : n * n] matches this exactly.
  2. Step 2: Check other options for syntax errors

    [for n : n * n in [1, 2, 3]] has wrong order, [for n in [1, 2, 3] n * n] misses colon, [for n in [1, 2, 3] => n * n] uses => which is invalid in Terraform for expressions.
  3. Final Answer:

    [for n in [1, 2, 3] : n * n] -> Option A
  4. Quick Check:

    Correct syntax = [for var in list : expr] [OK]
Hint: Remember syntax: for var in list : expression [OK]
Common Mistakes:
  • Omitting the colon ':' after the list variable
  • Using arrow '=>' instead of colon
  • Placing expression before 'in' keyword
3. Given the Terraform expression:
[for s in ["apple", "banana", "cherry"] : upper(s) if length(s) > 5]

What is the resulting list?
medium
A. ["banana", "cherry"]
B. ["APPLE", "BANANA", "CHERRY"]
C. ["BANANA", "CHERRY"]
D. ["APPLE"]

Solution

  1. Step 1: Identify filtering condition

    The expression filters strings with length greater than 5. "banana" (6) and "cherry" (6) qualify; "apple" (5) does not.
  2. Step 2: Apply transformation function

    For qualifying strings, upper(s) converts them to uppercase: "BANANA", "CHERRY".
  3. Final Answer:

    ["BANANA", "CHERRY"] -> Option C
  4. Quick Check:

    Filter length > 5 + uppercase = ["BANANA", "CHERRY"] [OK]
Hint: Filter first, then transform inside for expression [OK]
Common Mistakes:
  • Including items that don't meet the if condition
  • Not applying the upper() function
  • Confusing syntax order of filter and expression
4. Identify the error in this Terraform for expression:
[for k, v in {a=1, b=2} : "${k}=${v}" if v > 1]
medium
A. Using if condition outside the for expression
B. Missing colon after the map
C. Incorrect use of string interpolation syntax
D. Using two variables without parentheses in for expression

Solution

  1. Step 1: Check syntax for multiple variables in for expressions

    When using two variables (key and value) in a for expression, parentheses are required: for (k, v) in map.
  2. Step 2: Identify the error in given expression

    The expression uses 'for k, v in' without parentheses, causing syntax error.
  3. Final Answer:

    Using two variables without parentheses in for expression -> Option D
  4. Quick Check:

    Two variables need parentheses: for (k, v) in map [OK]
Hint: Use parentheses for multiple variables in for expressions [OK]
Common Mistakes:
  • Omitting parentheses around multiple variables
  • Placing if condition incorrectly
  • Misusing string interpolation syntax
5. You have a map of instance names to their CPU counts:
{"web"=2, "db"=4, "cache"=1}

Write a Terraform for expression that creates a list of instance names with CPU count greater than 1, all in uppercase.
hard
A. [for (name, cpu) in {"web"=2, "db"=4, "cache"=1} : upper(name) if cpu > 1]
B. [for name, cpu in {"web"=2, "db"=4, "cache"=1} : upper(name) if cpu > 1]
C. [for (name, cpu) in {"web"=2, "db"=4, "cache"=1} : name if cpu > 1]
D. [for (name, cpu) in {"web"=2, "db"=4, "cache"=1} : upper(cpu) if cpu > 1]

Solution

  1. Step 1: Use parentheses for key-value iteration

    When iterating over a map with two variables, use parentheses: for (name, cpu) in map.
  2. Step 2: Apply filter and transformation

    Filter with if cpu > 1 to select "web" and "db". Transform name to uppercase with upper(name).
  3. Final Answer:

    [for (name, cpu) in {"web"=2, "db"=4, "cache"=1} : upper(name) if cpu > 1] -> Option A
  4. Quick Check:

    Parentheses + filter + upper(name) = [for (name, cpu) in {"web"=2, "db"=4, "cache"=1} : upper(name) if cpu > 1] [OK]
Hint: Parentheses for map keys, filter with if, transform with upper() [OK]
Common Mistakes:
  • Omitting parentheses for key-value pairs
  • Transforming cpu instead of name
  • Not filtering correctly with if condition
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