Bird
Raised Fist0
Terraformcloud~10 mins

Environment variables (TF_VAR_) in Terraform - Step-by-Step Execution

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
Process Flow - Environment variables (TF_VAR_)
Set environment variable TF_VAR_name=value
↓
Run terraform command
↓
Terraform reads environment variables
↓
Terraform maps TF_VAR_name to variable 'name'
↓
Variable 'name' gets value from environment
↓
Terraform applies configuration using variable value
Terraform reads environment variables starting with TF_VAR_ and uses their values to set input variables during execution.
Execution Sample
Terraform
export TF_VAR_region="us-west-2"
terraform apply
Sets the variable 'region' to 'us-west-2' via environment variable before running terraform apply.
Process Table
StepActionEnvironment VariableTerraform VariableValue Assigned
1Set environment variableTF_VAR_region=us-west-2--
2Run terraform apply---
3Terraform reads environment variablesTF_VAR_region=us-west-2--
4Map TF_VAR_region to variable 'region'TF_VAR_regionregionus-west-2
5Use variable 'region' in configuration-regionus-west-2
💡 Terraform completes apply using 'region' variable set from environment variable TF_VAR_region
Status Tracker
VariableStartAfter Step 4Final
regionundefinedus-west-2us-west-2
Key Moments - 3 Insights
Why does Terraform use the environment variable TF_VAR_region for the variable 'region'?
Terraform automatically maps environment variables starting with TF_VAR_ to input variables by removing the prefix. See execution_table row 4 where TF_VAR_region maps to 'region'.
What happens if the environment variable TF_VAR_region is not set?
The variable 'region' remains undefined unless set elsewhere (like in a tfvars file or default). Terraform will prompt or error if required. This is implied by the variable_tracker showing 'undefined' at start.
Can environment variables override variables set in files?
Yes, environment variables TF_VAR_ have higher precedence and override values from files. This is why Terraform reads environment variables first as shown in execution_table step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what value is assigned to the Terraform variable 'region' at step 4?
Aus-west-2
Bundefined
CTF_VAR_region
Dnull
💡 Hint
Check the 'Value Assigned' column at step 4 in the execution_table.
At which step does Terraform read the environment variables?
AStep 1
BStep 3
CStep 5
DStep 2
💡 Hint
Look at the 'Action' column in execution_table where Terraform reads environment variables.
If TF_VAR_region was not set, what would the variable_tracker show for 'region' after step 4?
Aus-west-2
Bnull
Cundefined
Dempty string
💡 Hint
Refer to variable_tracker showing 'region' as 'undefined' before assignment.
Concept Snapshot
Terraform environment variables starting with TF_VAR_ set input variables.
Syntax: export TF_VAR_variableName=value
Terraform reads these before applying config.
They override variable defaults and tfvars files.
Use to pass sensitive or dynamic values easily.
Full Transcript
Terraform allows setting input variables using environment variables prefixed with TF_VAR_. For example, setting TF_VAR_region to 'us-west-2' assigns the variable 'region' this value during terraform apply. The flow starts by exporting the environment variable, then running terraform commands. Terraform reads these variables, maps them by removing the TF_VAR_ prefix, and uses the values in the configuration. If the environment variable is not set, the variable remains undefined unless set elsewhere. Environment variables override other variable sources, making them useful for dynamic or secret values.

Practice

(1/5)
1. What is the purpose of using environment variables with the TF_VAR_ prefix in Terraform?
easy
A. To set Terraform input variables without hardcoding them in configuration files
B. To define backend storage for Terraform state files
C. To specify the Terraform provider version
D. To enable debugging output during Terraform runs

Solution

  1. Step 1: Understand Terraform variable usage

    Terraform variables allow customization of configurations without changing code files.
  2. Step 2: Role of TF_VAR_ prefix

    Environment variables prefixed with TF_VAR_ automatically set Terraform input variables, keeping code clean and secure.
  3. Final Answer:

    To set Terraform input variables without hardcoding them in configuration files -> Option A
  4. Quick Check:

    Environment variables with TF_VAR_ prefix set variables [OK]
Hint: TF_VAR_ prefix sets Terraform variables via environment [OK]
Common Mistakes:
  • Confusing TF_VAR_ with backend configuration
  • Using TF_VAR_ to set provider versions
  • Expecting TF_VAR_ to enable debug logs
2. Which of the following is the correct way to set a Terraform variable named region using an environment variable?
easy
A. TF_VARregion=us-west-2
B. set TF_VAR-region=us-west-2
C. export TF_VAR_region=us-west-2
D. terraform var region=us-west-2

Solution

  1. Step 1: Identify correct environment variable syntax

    Terraform expects environment variables for variables to be prefixed with TF_VAR_ followed by the variable name.
  2. Step 2: Correct shell export command

    In Unix-like shells, export TF_VAR_region=us-west-2 correctly sets the variable.
  3. Final Answer:

    export TF_VAR_region=us-west-2 -> Option C
  4. Quick Check:

    Use export TF_VAR_variable=value [OK]
Hint: Use export TF_VAR_variable=value to set variables [OK]
Common Mistakes:
  • Using dash instead of underscore in TF_VAR_ prefix
  • Missing export keyword in Unix shell
  • Trying to set variables with terraform command directly
3. Given the Terraform variable declaration:
variable "instance_type" { default = "t2.micro" }

and the environment variable set as export TF_VAR_instance_type=t3.medium, what will be the value of var.instance_type during Terraform apply?
medium
A. "t2.micro" (default value)
B. "t3.medium" (from environment variable)
C. null (no value set)
D. Error: variable instance_type not set

Solution

  1. Step 1: Understand variable precedence

    Terraform uses environment variables with TF_VAR_ prefix to override default variable values.
  2. Step 2: Apply environment variable value

    Since TF_VAR_instance_type is set to "t3.medium", this value overrides the default "t2.micro".
  3. Final Answer:

    "t3.medium" (from environment variable) -> Option B
  4. Quick Check:

    Environment variable overrides default value [OK]
Hint: Environment variable overrides default Terraform variable [OK]
Common Mistakes:
  • Assuming default always applies ignoring environment variable
  • Expecting error if environment variable is set
  • Confusing null with default value
4. You set the environment variable TF_VAR_count=3 but Terraform still uses the default value count = 1 from the variable declaration. What is the most likely cause?
medium
A. The environment variable name is case-sensitive and should be TF_VAR_Count
B. The environment variable was set after running terraform init
C. The variable count is declared as a string, but environment variable is numeric
D. The shell session where Terraform runs does not have the environment variable exported

Solution

  1. Step 1: Check environment variable visibility

    Terraform reads environment variables from the shell session it runs in; if not exported, Terraform won't see it.
  2. Step 2: Confirm export of variable

    Setting TF_VAR_count=3 without export means it's not passed to child processes like Terraform.
  3. Final Answer:

    The shell session where Terraform runs does not have the environment variable exported -> Option D
  4. Quick Check:

    Environment variables must be exported to be visible [OK]
Hint: Always export environment variables before running Terraform [OK]
Common Mistakes:
  • Assuming variable names are case-insensitive
  • Thinking terraform init caches variable values
  • Confusing variable type mismatch as cause
5. You want to securely provide a sensitive variable db_password to Terraform without storing it in code or plain text files. Which approach using environment variables is best practice?
hard
A. Set export TF_VAR_db_password=your_password in your shell before running Terraform
B. Hardcode the password in terraform.tfvars file
C. Use terraform apply -var 'db_password=your_password' every time
D. Store the password in a public GitHub repository and reference it

Solution

  1. Step 1: Avoid storing sensitive data in code files

    Hardcoding passwords in files or public repos risks exposure.
  2. Step 2: Use environment variables for sensitive data

    Setting TF_VAR_db_password in the shell keeps secrets out of code and version control.
  3. Final Answer:

    Set export TF_VAR_db_password=your_password in your shell before running Terraform -> Option A
  4. Quick Check:

    Environment variables keep secrets out of code [OK]
Hint: Use TF_VAR_ environment variables to keep secrets out of code [OK]
Common Mistakes:
  • Storing secrets in terraform.tfvars files
  • Passing secrets on command line risking history leaks
  • Publishing secrets in public repositories