📖 Scenario: You are setting up a simple cloud infrastructure using Terraform. You want to create a variable that decides the size of a virtual machine based on a condition. This helps you understand how expressions add logic to your infrastructure code.
🎯 Goal: Build a Terraform configuration that uses a count expression with a condition to decide how many virtual machines to create based on a variable.
📋 What You'll Learn
Create a variable called create_vm with a boolean value
Create a local variable called vm_count that uses a conditional expression based on create_vm
Use the vm_count variable in the count argument of a resource
Define a simple aws_instance resource that uses the count to create instances
💡 Why This Matters
🌍 Real World
Cloud engineers often need to create resources conditionally based on environment or user input. Expressions let them add simple logic to infrastructure code.
💼 Career
Understanding expressions and conditional logic in Terraform is essential for writing flexible and reusable infrastructure as code.
Progress0 / 4 steps
1
Create a variable to control VM creation
Create a Terraform variable called create_vm of type bool and set its default value to true.
Terraform
Hint
This variable will control if the VM should be created or not.
2
Add a local variable with a conditional expression
Create a local variable called vm_count that uses a conditional expression: if var.create_vm is true, set vm_count to 1, else 0.
Terraform
Hint
Use the ternary operator ? : to add logic in the local variable.
3
Use the local variable in a resource count
Create an aws_instance resource called example that uses count = local.vm_count to decide how many instances to create. Use ami = "ami-12345678" and instance_type = "t2.micro" as fixed values.
Terraform
Hint
The count argument controls how many instances are created.
4
Complete the Terraform configuration
Add a provider block for AWS with region set to us-east-1 to complete the configuration.
Terraform
Hint
The provider block tells Terraform which cloud to use.
Practice
(1/5)
1. What is the main purpose of a conditional expression (also called a "why expression") in Terraform?
easy
A. To define variables with fixed values
B. To create loops that repeat resources
C. To choose between two values based on a condition
D. To import external modules automatically
Solution
Step 1: Understand conditional expressions
Conditional expressions let Terraform pick one of two values depending on a true or false condition.
Step 2: Compare with other Terraform features
Loops repeat resources, variables hold values, and modules are imported differently, so they don't match the conditional expression purpose.
Final Answer:
To choose between two values based on a condition -> Option C
Quick Check:
Conditional expression = choose value [OK]
Hint: Conditional expressions pick values based on true/false [OK]
Common Mistakes:
Confusing conditionals with loops
Thinking conditionals define variables
Mixing conditionals with module imports
2. Which of the following is the correct syntax for a Terraform conditional expression?
easy
A. condition ? true_value : false_value
B. if (condition) { true_value } else { false_value }
C. condition => true_value, false_value
D. switch(condition) { true_value, false_value }
Solution
Step 1: Recall Terraform conditional syntax
Terraform uses the syntax: condition ? true_value : false_value for conditionals.
Step 2: Identify incorrect options
Options A, C, and D use syntax styles from other languages or invalid formats not supported by Terraform.
Final Answer:
condition ? true_value : false_value -> Option A
Quick Check:
Terraform conditional = ? : syntax [OK]
Hint: Look for question mark and colon in conditional syntax [OK]
Common Mistakes:
Using if-else blocks instead of ? :
Confusing with arrow or switch syntax
Missing colon or question mark
3. Given the Terraform expression: var.is_production ? "prod-server" : "dev-server", what will be the output if var.is_production is false?
medium
A. "dev-server"
B. "prod-server"
C. null
D. Error: invalid expression
Solution
Step 1: Evaluate the condition
The condition is var.is_production, which is false in this case.
Step 2: Apply the conditional expression
Since the condition is false, the expression returns the value after the colon, which is "dev-server".
Final Answer:
"dev-server" -> Option A
Quick Check:
False condition returns false_value [OK]
Hint: False condition returns value after colon [OK]
Common Mistakes:
Choosing true_value instead of false_value
Expecting null instead of false branch
Thinking it causes an error
4. Identify the error in this Terraform conditional expression: count = var.enable_feature ? 1, 0
medium
A. Conditional expressions cannot be used for count
B. Missing colon between true and false values
C. Variable name is invalid
D. Using comma instead of question mark
Solution
Step 1: Check conditional expression syntax
The correct syntax requires a colon ':' between true and false values, not a comma.
Step 2: Confirm other parts are valid
Variable name and use for count are valid; only the separator is wrong.
Final Answer:
Missing colon between true and false values -> Option B
Quick Check:
Conditional needs ? and : separators [OK]
Hint: Use colon, not comma, between true and false parts [OK]
Common Mistakes:
Using comma instead of colon
Thinking count cannot use conditionals
Assuming variable name is wrong
5. You want to create a resource with a name that depends on environment type. If var.env is "prod", use "server-prod", otherwise use "server-dev". Which expression correctly implements this logic?
hard
A. name = if var.env == "prod" then "server-prod" else "server-dev"
B. name = var.env ? "server-prod" : "server-dev"
C. name = var.env == "prod" : "server-prod" ? "server-dev"
D. name = var.env == "prod" ? "server-prod" : "server-dev"
Solution
Step 1: Check condition and syntax
The condition must compare var.env to "prod" using ==, then use ? and : for true/false values.
Step 2: Validate each option
name = var.env == "prod" ? "server-prod" : "server-dev" uses correct syntax. name = var.env ? "server-prod" : "server-dev" misses comparison. name = var.env == "prod" : "server-prod" ? "server-dev" swaps ? and :. name = if var.env == "prod" then "server-prod" else "server-dev" uses invalid if-then-else syntax in Terraform.
Final Answer:
name = var.env == "prod" ? "server-prod" : "server-dev" -> Option D
Quick Check:
Use == with ? : for conditionals [OK]
Hint: Compare with ==, then use ? : for true/false [OK]
Common Mistakes:
Omitting comparison operator
Swapping ? and : positions
Using if-then-else syntax not supported
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.