Terraform Cheatsheet
A comprehensive reference for Terraform CLI commands, options, and examples.
String Functions
Functions for manipulating and working with strings
join
Examples:
join("-", ["app", "web", "db"])
# Result: "app-web-db"
split
Examples:
split(",", "foo,bar,baz")
# Result: ["foo", "bar", "baz"]
replace
Examples:
replace("path/to/file.txt", "/", "\\")
# Result: "path\\to\\file.txt"
substr
Examples:
substr("i-1234567890abcdef0", 2, 8)
# Result: "12345678"
lower / upper
Examples:
lower("Production") # "production"
upper("Production") # "PRODUCTION"
format
Examples:
format("Created %d instances", 5)
# Result: "Created 5 instances"
format("%04d", 42)
# Result: "0042"
regex
Examples:
regex("v(\\d+)\\.(\\d+)\\.(\\d+)", "v1.2.3")
# Result: ["1", "2", "3"]
regexall
Examples:
regexall("\\d+\\.\\d+\\.\\d+\\.\\d+", "IP: 192.168.1.1 and 10.0.0.1")
# Result: ["192.168.1.1", "10.0.0.1"]
Collection Functions
Functions for working with lists, sets, and maps
concat
Examples:
concat(["a", "b"], ["c", "d"])
# Result: ["a", "b", "c", "d"]
flatten
Examples:
flatten([["a", "b"], ["c"], ["d", "e"]])
# Result: ["a", "b", "c", "d", "e"]
slice
Examples:
slice(["a", "b", "c", "d", "e"], 1, 4)
# Result: ["b", "c", "d"]
element
Examples:
element(["a", "b", "c"], 1) # "b"
element(["a", "b", "c"], 5) # "c" (5 % 3 = 2)
index
Examples:
index(["a", "b", "c"], "b")
# Result: 1
merge
Examples:
merge({ a = 1, b = 2 }, { b = 5, c = 3 })
# Result: { a = 1, b = 5, c = 3 }
keys / values
Examples:
keys({ a = 1, b = 2, c = 3 }) # ["a", "b", "c"]
values({ a = 1, b = 2, c = 3 }) # [1, 2, 3]
lookup
Examples:
lookup({ "us-east-1" = "ami-123456" }, "us-east-1") # "ami-123456"
lookup({ "us-east-1" = "ami-123456" }, "eu-west-1", "ami-default")
zipmap
Examples:
zipmap(["web", "app", "db"], ["i-123", "i-456", "i-789"])
# Result: { web = "i-123", app = "i-456", db = "i-789" }
Type Conversion
Functions for converting between different data types
tostring
Examples:
tostring(42) # "42"
tostring(true) # "true"
tonumber
Examples:
tonumber("42") # 42
tonumber("3.14") # 3.14
tobool
Examples:
tobool("true") # true
tobool("false") # false
tolist
Examples:
tolist(toset(["a", "b", "c"])) # ["a", "b", "c"]
tolist(["a", 1, true]) # ["a", 1, true]
toset
Examples:
toset(["a", "b", "a", "c", "b"]) # ["a", "b", "c"]
tomap
Examples:
tomap({ name = "example", id = 123 }) # { name = "example", id = 123 }
Core Workflow
Essential commands for working with Terraform configurations
terraform init
Examples:
terraform init
terraform init -upgrade
terraform plan
Examples:
terraform plan
terraform plan -out=tfplan
terraform plan -var 'region=us-west-2'
terraform plan -var-file=vars.tfvars
terraform apply
Examples:
terraform apply
terraform apply tfplan
terraform apply -auto-approve
terraform destroy
Examples:
terraform destroy
terraform destroy -auto-approve
terraform destroy -target=aws_instance.example
State Management
Commands for managing Terraform state
terraform state list
Examples:
terraform state list
terraform state list aws_instance.*
terraform state show
Examples:
terraform state show aws_instance.example
terraform state mv
Examples:
terraform state mv aws_instance.example module.app.aws_instance.example
terraform import
Examples:
terraform import aws_instance.example i-abcd1234
terraform import 'aws_security_group.example' sg-123456
Workspace Management
Commands for managing Terraform workspaces
terraform workspace new
Examples:
terraform workspace new dev
terraform workspace new prod
terraform workspace select
Examples:
terraform workspace select dev
terraform workspace select default
terraform workspace list
Examples:
terraform workspace list
terraform workspace delete
Examples:
terraform workspace delete dev
terraform workspace delete -force old-workspace
Module Management
Commands for working with Terraform modules
terraform get
Examples:
terraform get
terraform get -update
terraform init -upgrade
Examples:
terraform init -upgrade
Utility Commands
Utility commands for working with Terraform configurations
terraform console
Examples:
terraform console
terraform console -var="environment=prod"
terraform output
Examples:
terraform output
terraform output instance_ip
terraform output -json
terraform refresh
Examples:
terraform refresh
terraform refresh -var-file=prod.tfvars
terraform validate
Examples:
terraform validate
terraform validate -json
terraform fmt
Examples:
terraform fmt
terraform fmt -recursive
terraform fmt -check
Meta-Arguments
Special arguments that change behavior across resource types
depends_on
Examples:
resource "aws_instance" "web" {
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
# This instance depends on the database being available first
depends_on = [
aws_db_instance.database
]
}
count
Examples:
resource "aws_instance" "server" {
count = 4
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
tags = {
Name = "Server ${count.index}"
}
}
for_each
Examples:
resource "aws_instance" "server" {
for_each = {
web = "t2.micro"
app = "t2.medium"
db = "t2.large"
}
ami = "ami-a1b2c3d4"
instance_type = each.value
tags = {
Name = "${each.key}-server"
}
}
provider
Examples:
# Define an alternate AWS provider for the us-west-2 region
provider "aws" {
alias = "west"
region = "us-west-2"
}
# Use the alternate provider
resource "aws_instance" "web" {
provider = aws.west
ami = "ami-0a1b2c3d4" # AMI in us-west-2
instance_type = "t2.micro"
}
lifecycle
Examples:
resource "aws_instance" "web" {
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
lifecycle {
create_before_destroy = true
prevent_destroy = true
ignore_changes = [
tags,
]
}
}
Providers
Configuration for provider plugins that interact with cloud providers, SaaS providers, and other APIs
Provider Configuration
Examples:
provider "aws" {
region = "us-east-1"
version = "~> 3.0"
}
Multiple Provider Configurations
Examples:
# Default provider configuration
provider "aws" {
region = "us-east-1"
}
# Additional provider configuration for west coast region
provider "aws" {
alias = "west"
region = "us-west-2"
}
Provider Authentication
Examples:
# Static credentials (not recommended for production)
provider "aws" {
region = "us-east-1"
access_key = "AKIAIOSFODNN7EXAMPLE"
secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}
# Environment variables (recommended)
# Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables
provider "aws" {
region = "us-east-1"
}
Provisioners
Mechanisms for executing commands on local or remote machines as part of resource creation or destruction
local-exec
Examples:
resource "aws_instance" "web" {
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
provisioner "local-exec" {
command = "echo ${self.private_ip} >> private_ips.txt"
}
}
remote-exec
Examples:
resource "aws_instance" "web" {
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
key_name = "example-key"
connection {
type = "ssh"
user = "ec2-user"
private_key = file("~/.ssh/example-key.pem")
host = self.public_ip
}
provisioner "remote-exec" {
inline = [
"sudo yum update -y",
"sudo yum install -y httpd",
"sudo systemctl start httpd"
]
}
}
file
Examples:
resource "aws_instance" "web" {
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
key_name = "example-key"
connection {
type = "ssh"
user = "ec2-user"
private_key = file("~/.ssh/example-key.pem")
host = self.public_ip
}
provisioner "file" {
source = "app/index.html"
destination = "/var/www/html/index.html"
}
}
Terraform Functions
Built-in functions for transforming and combining values in Terraform
String Functions
Examples:
# String interpolation
name = "Hello, ${var.username}!"
# String manipulation
lower_name = lower(var.name) # Convert to lowercase
upper_name = upper(var.name) # Convert to uppercase
trimmed = trimspace(var.text) # Remove whitespace from start and end
joined = join(", ", var.list) # Join list elements with a delimiter
split_result = split(",", "a,b,c") # Split string into list
Collection Functions
Examples:
# List operations
first_item = element(var.list, 0) # Get element at index
list_length = length(var.list) # Get length of list
sliced = slice(var.list, 0, 2) # Get a subset of list
contains_item = contains(var.list, "item") # Check if list contains value
# Map operations
keys = keys(var.map) # Get all keys from map
values = values(var.map) # Get all values from map
lookup_value = lookup(var.map, "key", "default") # Get value with default
# Merging
merged_map = merge(var.map1, var.map2) # Merge maps
Type Conversion
Examples:
# Type conversion
str_to_num = tonumber("123") # Convert string to number
num_to_str = tostring(123) # Convert number to string
to_list = tolist(["a", "b", "c"]) # Convert to list
to_map = tomap({key = "value"}) # Convert to map
to_set = toset(["a", "b", "c"]) # Convert to set