0
0
Terraformcloud~5 mins

Module inputs (variables) in Terraform - Commands & Configuration

Choose your learning style9 modes available
Introduction
When you build reusable parts in Terraform called modules, you need a way to give them information. Module inputs, called variables, let you send values into these modules so they can work with different settings without changing the code inside.
When you want to reuse the same Terraform code for different environments like testing and production with different settings.
When you need to pass configuration details like region, instance size, or network settings into a module.
When you want to keep your Terraform code clean and flexible by separating fixed code from changeable values.
When you share Terraform modules with others and want them to provide their own inputs easily.
When you want to avoid repeating the same code by using modules with different inputs.
Config File - variables.tf
variables.tf
variable "region" {
  description = "The AWS region to deploy resources"
  type        = string
  default     = "us-east-1"
}

variable "instance_type" {
  description = "The type of EC2 instance to use"
  type        = string
  default     = "t2.micro"
}

variable "environment" {
  description = "The deployment environment"
  type        = string
  default     = "dev"
}

This file defines three input variables for a Terraform module:

  • region: The AWS region where resources will be created, defaulting to us-east-1.
  • instance_type: The size/type of the EC2 instance, defaulting to t2.micro.
  • environment: A label for the deployment environment, defaulting to dev.

These variables allow the module to be flexible and reusable by accepting different values when used.

Commands
This command initializes the Terraform working directory, downloading necessary providers and preparing to run Terraform commands.
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!
This command shows what Terraform will do using the provided variable values to override defaults. It helps verify changes before applying.
Terminal
terraform plan -var='region=us-west-2' -var='instance_type=t3.small' -var='environment=prod'
Expected OutputExpected
Refreshing Terraform state in-memory prior to plan... An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_instance.example will be created + resource "aws_instance" "example" { + ami = "ami-0c55b159cbfafe1f0" + instance_type = "t3.small" + tags = { + "Environment" = "prod" } } Plan: 1 to add, 0 to change, 0 to destroy.
-var - Override variable values from the command line
This command applies the planned changes using the specified variable values, creating or updating resources without asking for confirmation.
Terminal
terraform apply -var='region=us-west-2' -var='instance_type=t3.small' -var='environment=prod' -auto-approve
Expected OutputExpected
aws_instance.example: Creating... aws_instance.example: Still creating... [10s elapsed] aws_instance.example: Creation complete after 20s [id=i-0abcd1234efgh5678] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
-auto-approve - Skip interactive approval before applying changes
This command shows the outputs defined in the Terraform module, which can include information about created resources.
Terminal
terraform output
Expected OutputExpected
instance_id = "i-0abcd1234efgh5678" instance_public_ip = "54.123.45.67"
Key Concept

If you remember nothing else from this pattern, remember: variables let you send different settings into a Terraform module to reuse the same code with flexibility.

Common Mistakes
Not providing required variable values when running Terraform commands.
Terraform will fail to plan or apply because it lacks necessary input values.
Always provide variable values via -var flags, variable files, or defaults in the variables.tf file.
Defining variables but never using them inside the module resources.
Variables have no effect if not referenced, so the module won't change based on inputs.
Use variables inside resource blocks with syntax like var.variable_name to make them effective.
Using inconsistent variable names or typos when passing values on the command line.
Terraform ignores unknown variables and may use defaults or error, causing unexpected behavior.
Double-check variable names and spellings when passing values with -var flags.
Summary
Define input variables in a variables.tf file to make modules flexible.
Use terraform plan with -var flags to test different input values before applying.
Apply changes with terraform apply and pass variable values to customize resource creation.