📖 Scenario: You are creating a reusable Terraform module to deploy a simple AWS EC2 instance. To make the module flexible, you will use variables as inputs.
🎯 Goal: Build a Terraform module that accepts input variables for instance_type and ami_id, and uses them to configure an AWS EC2 instance resource.
📋 What You'll Learn
Create variables for instance_type and ami_id with default values
Use the variables in the aws_instance resource configuration
Output the instance ID after deployment
💡 Why This Matters
🌍 Real World
Terraform modules often use variables to make infrastructure reusable and configurable for different environments or projects.
💼 Career
Understanding how to use module inputs is essential for cloud engineers and DevOps professionals to write flexible and maintainable infrastructure as code.
Progress0 / 4 steps
1
Create variables for instance type and AMI ID
Create two variables in Terraform: instance_type with default value t2.micro, and ami_id with default value ami-12345678. Use the variable block syntax.
Terraform
Hint
Use variable "name" {} blocks with default values.
2
Add provider configuration
Add the AWS provider configuration block with region set to us-east-1. Use the provider "aws" block.
Terraform
Hint
Use provider "aws" { region = "us-east-1" } to set the AWS region.
3
Create the AWS EC2 instance resource using variables
Create an aws_instance resource named example that uses the variables instance_type and ami_id for its instance_type and ami attributes respectively.
Terraform
Hint
Use var.instance_type and var.ami_id to reference variables inside the resource.
4
Add output for the instance ID
Add an output named instance_id that outputs the id attribute of the aws_instance.example resource.
Terraform
Hint
Use output "name" { value = resource.attribute } syntax.
Practice
(1/5)
1. What is the main purpose of using variables in a Terraform module?
easy
A. To customize module behavior without changing its code
B. To store sensitive data only
C. To define output values from the module
D. To create resources automatically
Solution
Step 1: Understand module customization
Variables allow users to provide input values to modules, changing how they behave without editing the module code itself.
Step 2: Differentiate variables from other features
Variables are not for outputs or automatic resource creation; they are inputs to customize modules.
Final Answer:
To customize module behavior without changing its code -> Option A
Quick Check:
Module inputs = customization [OK]
Hint: Variables customize modules without code edits [OK]
Common Mistakes:
Confusing variables with outputs
Thinking variables create resources
Assuming variables only store secrets
2. Which of the following is the correct syntax to declare a string variable named region with a default value of us-west-1?
easy
A. variable "region" = "us-west-1"
B. variable region { type = "string" default = us-west-1 }
C. variable "region" { default = us-west-1 type = string }
D. variable "region" { type = string default = "us-west-1" }
Solution
Step 1: Check variable block syntax
Terraform variables use the syntax: variable "name" { type = string default = "value" } with quotes around strings.
What will happen if the module is called without specifying instance_count?
medium
A. Only one instance will be created
B. Two AWS instances will be created
C. An error occurs because instance_count is missing
D. No instances will be created
Solution
Step 1: Understand default variable behavior
If a variable has a default value and is not overridden, Terraform uses the default.
Step 2: Apply default to resource count
The count argument uses var.instance_count, which defaults to 2, so two instances are created.
Final Answer:
Two AWS instances will be created -> Option B
Quick Check:
Default variable value used = 2 instances [OK]
Hint: Default variable values apply if no input given [OK]
Common Mistakes:
Assuming missing variable causes error
Thinking default is ignored
Confusing count with instance_type
4. You have this variable declaration inside a module:
variable "env" {
type = string
}
When calling the module, you forget to provide a value for env. What will happen?
medium
A. Terraform will throw an error about missing required variable
B. Terraform will use an empty string as default
C. Terraform will assign null automatically
D. Terraform will use the string "env" as default
Solution
Step 1: Check variable declaration for default
The variable env has no default value, so it is required.
Step 2: Understand Terraform behavior on missing required variables
If a required variable is not provided, Terraform throws an error and stops.
Final Answer:
Terraform will throw an error about missing required variable -> Option A
Quick Check:
Required variable missing = error [OK]
Hint: No default means variable is required [OK]
Common Mistakes:
Assuming empty string or null is automatic default
Thinking Terraform guesses a value
Confusing variable name with default
5. You want to create a reusable module that accepts a list of subnet IDs as input. Which variable declaration correctly enforces that the input must be a list of strings and has no default value?
hard
A. variable "subnet_ids" { type = string default = [] }
B. variable "subnet_ids" { type = list number default = ["subnet-123"] }
C. variable "subnet_ids" { type = list(string) }
D. variable "subnet_ids" { type = list(string) default = null }
Solution
Step 1: Identify correct type syntax for list of strings
Terraform uses list(string) to specify a list where each item is a string.
Step 2: Check default value presence
No default means the variable is required. variable "subnet_ids" { type = list(string) } has no default, so input must be provided.
Final Answer:
variable "subnet_ids" { type = list(string) } -> Option C
Quick Check:
List of strings required, no default = variable "subnet_ids" { type = list(string) } [OK]
Hint: Use type = list(string) and omit default to require input [OK]
Common Mistakes:
Using wrong type like string instead of list(string)
Providing default empty list when input should be required
Using invalid syntax for type or default
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.