Bird
Raised Fist0
Terraformcloud~5 mins

Variable declaration syntax in Terraform - Commands & Configuration

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Variables in Terraform let you customize your infrastructure without changing the code. They help you reuse configurations by setting values outside the main files.
When you want to set different values for your infrastructure in different environments like development and production.
When you want to avoid hardcoding sensitive information like passwords or API keys in your configuration files.
When you want to share your Terraform code with others and let them provide their own values.
When you want to make your Terraform modules flexible and reusable with different inputs.
When you want to organize your configuration by separating variable definitions from resource definitions.
Config File - variables.tf
variables.tf
variable "region" {
  description = "The AWS region to deploy resources"
  type        = string
  default     = "us-east-1"
}

variable "instance_count" {
  description = "Number of EC2 instances to launch"
  type        = number
  default     = 2
}

variable "tags" {
  description = "Tags to apply to resources"
  type        = map(string)
  default     = {
    Environment = "dev"
    Project     = "example"
  }
}

This file declares three variables:

  • region: a string with a default AWS region.
  • instance_count: a number for how many instances to create.
  • tags: a map of strings for resource tags.

Each variable has a description, type, and default value to make the configuration clear and flexible.

Commands
Initializes the Terraform working directory and downloads necessary provider plugins.
Terminal
terraform init
Expected OutputExpected
Initializing the backend... Initializing provider plugins... - Finding latest version of hashicorp/aws... - Installing hashicorp/aws v4.0.0... - Installed hashicorp/aws v4.0.0 (signed by HashiCorp) Terraform has been successfully initialized!
Checks the configuration files for syntax errors and validates variable declarations.
Terminal
terraform validate
Expected OutputExpected
Success! The configuration is valid.
Shows the execution plan using the declared variables and their default values.
Terminal
terraform plan
Expected OutputExpected
Refreshing Terraform state in-memory prior to plan... No changes. Infrastructure is up-to-date. This means that Terraform did not detect any differences between your configuration and real physical resources that exist.
Key Concept

If you remember nothing else from this pattern, remember: variables let you customize Terraform configurations without changing the code.

Common Mistakes
Not specifying the variable type and relying only on default values.
Terraform may infer wrong types or cause errors when you provide unexpected input later.
Always declare the variable type explicitly to ensure correct input and validation.
Hardcoding values directly in resource blocks instead of using variables.
This makes the configuration less flexible and harder to reuse in different environments.
Use variables to pass values into resources, making your code reusable and easier to manage.
Forgetting to run 'terraform init' before other commands.
Terraform needs to initialize providers and modules before planning or applying changes.
Always run 'terraform init' first in a new or changed working directory.
Summary
Declare variables in a separate file with type, description, and default values.
Run 'terraform init' to prepare the working directory and download providers.
Use 'terraform validate' to check for syntax and variable declaration errors.
Use 'terraform plan' to see how variables affect the infrastructure before applying.

Practice

(1/5)
1. What is the purpose of declaring a variable in Terraform?
easy
A. To write comments in the Terraform file
B. To create a new resource in the cloud
C. To define the output of a Terraform plan
D. To store values that can be reused and customized in the configuration

Solution

  1. Step 1: Understand variable role in Terraform

    Variables hold values that can be changed without editing the main code, making it flexible.
  2. Step 2: Compare with other options

    Creating resources, defining outputs, or comments are different Terraform features, not variable declaration.
  3. Final Answer:

    To store values that can be reused and customized in the configuration -> Option D
  4. Quick Check:

    Variables = reusable values [OK]
Hint: Variables hold reusable values to customize code easily [OK]
Common Mistakes:
  • Confusing variables with resources
  • Thinking variables define outputs
  • Using variables as comments
2. Which of the following is the correct syntax to declare a string variable named region with a default value of us-west-1 in Terraform?
easy
A. variable region = "us-west-1"
B. var region = "us-west-1"
C. variable "region" { type = string default = "us-west-1" }
D. variable "region" { default = us-west-1 type = string }

Solution

  1. Step 1: Recall Terraform variable declaration syntax

    Variables use the block format: variable "name" { type = TYPE default = VALUE } with quotes around strings.
  2. Step 2: Check each option

    variable "region" { type = string default = "us-west-1" } matches correct syntax with proper quotes and order. Options B and C are invalid syntax. variable "region" { default = us-west-1 type = string } misses quotes around default value.
  3. Final Answer:

    variable "region" { type = string default = "us-west-1" } -> Option C
  4. Quick Check:

    Correct block syntax with quotes [OK]
Hint: Use variable block with quotes and type before default [OK]
Common Mistakes:
  • Missing quotes around string values
  • Using assignment (=) outside variable block
  • Incorrect order or missing type keyword
3. Given this variable declaration in Terraform:
variable "instance_count" {
  type    = number
  default = 3
}

What will be the value of var.instance_count if no override is provided?
medium
A. 3
B. null
C. 0
D. Error: variable not set

Solution

  1. Step 1: Identify default value in variable block

    The variable instance_count has a default value set to 3.
  2. Step 2: Understand behavior when no override is given

    If no value is provided during plan or apply, Terraform uses the default value.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    Default value used when no override = 3 [OK]
Hint: Default value applies if no input given [OK]
Common Mistakes:
  • Assuming default is zero if not set
  • Expecting error without override
  • Confusing null with default
4. Identify the error in this Terraform variable declaration:
variable "enable_logging" {
  type = bool
  default = "true"
}
medium
A. The default value should not be in quotes for bool type
B. The type should be string, not bool
C. The variable name is invalid
D. Missing description field

Solution

  1. Step 1: Check type and default value compatibility

    The variable type is bool, so the default must be a boolean value, not a string.
  2. Step 2: Identify the error in default value

    The default is "true" (a string), but it should be true (boolean without quotes).
  3. Final Answer:

    The default value should not be in quotes for bool type -> Option A
  4. Quick Check:

    Boolean default must be unquoted true/false [OK]
Hint: Boolean defaults must be unquoted true or false [OK]
Common Mistakes:
  • Putting boolean default in quotes
  • Confusing string and bool types
  • Ignoring type mismatch errors
5. You want to declare a variable tags in Terraform that holds a map of strings with a default value of {"env" = "prod", "team" = "devops"}. Which is the correct declaration?
hard
A. variable "tags" { type = map(string) default = { env = prod, team = devops } }
B. variable "tags" { type = map(string) default = { "env" = "prod", "team" = "devops" } }
C. variable "tags" { type = map default = { "env" = "prod", "team" = "devops" } }
D. variable "tags" { type = map(string) default = ["env" = "prod", "team" = "devops"] }

Solution

  1. Step 1: Understand map type syntax in Terraform

    Maps of strings use type = map(string) and string values must be quoted.
  2. Step 2: Check default value format

    Default must be a map with quoted string values inside curly braces, not square brackets.
  3. Step 3: Evaluate options

    variable "tags" { type = map(string) default = { "env" = "prod", "team" = "devops" } } correctly uses type = map(string) and default with quoted values. variable "tags" { type = map(string) default = { env = prod, team = devops } } misses quotes on values, variable "tags" { type = map default = { "env" = "prod", "team" = "devops" } } misses string type, variable "tags" { type = map(string) default = ["env" = "prod", "team" = "devops"] } uses square brackets (list) incorrectly.
  4. Final Answer:

    variable "tags" { type = map(string) default = { "env" = "prod", "team" = "devops" } } -> Option B
  5. Quick Check:

    Map(string) with quoted string values in braces [OK]
Hint: Use map(string) type and quoted string values in braces [OK]
Common Mistakes:
  • Missing quotes on map values
  • Using map without specifying string type
  • Using list syntax instead of map