This tutorial explains variable types in Terraform.

Variables are used to store the value. Declare it once, use it in multiple files, and provides dynamics.

What variables are required?

Let’s define a provider for AWS

provider "aws"{
    access_key="access_key"
    secret_key="secret_key"
    region ="us-north-1"
}

access_key,secret_key, and region are hard-coded values. These can be used in multiple places for different resources.

There is a duplicate If you hardcoded in multiple places. and some properties are secret details that are not exposed. Variables solved for the above problems.

How to declare a variable in Terraform

variables provides terraform configuraiton dynamic

Here is a syntax

variable "variable_name"{
    type = "datatype"
    description = "variable description"
    default = "default value"
}
  • name: Name of a variable
  • type: can be one of string, list, map and boolean
  • default: Default value to a variable
  • description: Variable description
  • validation: validation rules applied
  • sensitive: true for masking the value for sensitivity

Here is a variable.tf example

variable "access_key"{
    type = "string"
    description = "aws access_key"
}

variable "region"{
    type = "string"
    description = "aws region"
}


variable "secret_key"{
    type = "string"
    description = "aws secret_key"
}

Once the variable is declared, you need to assign the values. terraform.tfvars contains variables with values

terraform.tfvars:

access_key="test access key"
secret_key="test secret key"
region="test region"

Once variables are assigned with values, You can access the variables as given below in multiple files

variables are accessed using ${var.variablename} syntax.

provider "aws"{
    access_key="${var.access_key}"
    secret_key="${var.secret_key}"
    region ="${var.region}"
}

Difference between terraform.tfvars and variables.tf

variables.tf is a terraform configuration file, contains used to declare a variable with an optional default value.

For example

variable "region" {
    default = "us-west-1"
    description = "Region of Azure VPC"
}

terraform.tfvars contains used to assign the values for an variable.

terraform.tfvars:

region="us-north-1"

Naming conventions for variables

  • Variables are identifier names that contain alphanumeric characters and underscores (_), and hyphens (-)
  • The first character is not a digit, but a character.
  • It contains a valid name to depict the meaningful to the user

What are variable types in Terraform?

There are multiple variable types in Terraform

  • Input Variable:

    Input variables are values supplied to infrastructure that can be used in many files.

  • Output Variable: These variables hold the information from infrastructure code result

  • Local Variable:

Local variables are declared using the locals keyword. These scopes are limited to the declared modules block only

locals {
  ami="ami-12345"
  type="t1.micro"
}

These can be accessed using local.variablename

resources "aws_instance"{
  ami=local.ami
  type=local.type
}

How many ways variables create and assign values in Terraform?

Variables can be created using three ways

  • variable block
  • CLI prompt
  • using -var command line arguments