cli-tool
cross-platform
iac
infrastructure
intermediate
📋 Copy All Commands
📄 Generate PDF
Comprehensive Terraform commands and workflows for Infrastructure as Code (IaC), including resource management, state operations, and multi-cloud deployments.
Installation & Setup
Command
Description
terraform version
Show Terraform version
terraform -help
Show help information
terraform -help plan
Show help for specific command
Core Workflow
Basic Operations
Command
Description
terraform init
Initialize working directory
terraform plan
Create execution plan
terraform apply
Apply changes
terraform destroy
Destroy infrastructure
terraform validate
Validate configuration
terraform fmt
Format configuration files
Advanced Planning
Command
Description
terraform plan -out=tfplan
Save plan to file
terraform apply tfplan
Apply saved plan
terraform plan -target=resource.name
Plan specific resource
terraform plan -var="key=value"
Plan with variables
terraform plan -var-file="vars.tfvars"
Plan with variable file
State Management
State Operations
Command
Description
terraform state list
List resources in state
terraform state show resource.name
Show resource details
terraform state mv old_name new_name
Move resource in state
terraform state rm resource.name
Remove resource from state
terraform state pull
Download remote state
terraform state push
Upload state to remote
State Backup and Recovery
Command
Description
terraform state backup
Create state backup
terraform force-unlock LOCK_ID
Force unlock state
terraform refresh
Update state with real resources
Workspaces
Command
Description
terraform workspace list
List workspaces
terraform workspace new dev
Create new workspace
terraform workspace select dev
Switch to workspace
terraform workspace delete dev
Delete workspace
terraform workspace show
Show current workspace
Import and Output
Import Resources
Command
Description
terraform import resource.name id
Import existing resource
terraform import aws_instance.example i-1234567890abcdef0
Import AWS instance
Outputs
Command
Description
terraform output
Show all outputs
terraform output instance_ip
Show specific output
terraform output -json
Show outputs in JSON
Configuration Examples
Basic AWS EC2 Instance
provider "aws" \\\\{
region = "us-west-2"
\\\\}
resource "aws_instance" "example" \\\\{
ami = "ami-0c55b159cbfafe1d0"
instance_type = "t2.micro"
tags = \\\\{
Name = "example-instance"
\\\\}
\\\\}
output "instance_ip" \\\\{
value = aws_instance.example.public_ip
\\\\}
Variables
variable "instance_type" \\\\{
description = "EC2 instance type"
type = string
default = "t2.micro"
\\\\}
variable "environment" \\\\{
description = "Environment name"
type = string
\\\\}
Data Sources
data "aws_ami" "ubuntu" \\\\{
most_recent = true
owners = ["099720109477"] # Canonical
filter \\\\{
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
\\\\}
\\\\}
Modules
module "vpc" \\\\{
source = "terraform-aws-modules/vpc/aws"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-west-2a", "us-west-2b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
enable_nat_gateway = true
enable_vpn_gateway = true
\\\\}
Remote State Configuration
S3 Backend
terraform \\\\{
backend "s3" \\\\{
bucket = "my-terraform-state"
key = "state/terraform.tfstate"
region = "us-west-2"
\\\\}
\\\\}
Azure Backend
terraform \\\\{
backend "azurerm" \\\\{
resource_group_name = "tfstate"
storage_account_name = "tfstate"
container_name = "tfstate"
key = "prod.terraform.tfstate"
\\\\}
\\\\}
Google Cloud Backend
terraform \\\\{
backend "gcs" \\\\{
bucket = "tf-state-bucket"
prefix = "terraform/state"
\\\\}
\\\\}
Provider Configuration
AWS Provider
provider "aws" \\\\{
region = "us-west-2"
profile = "default"
default_tags \\\\{
tags = \\\\{
Environment = "production"
Project = "my-project"
\\\\}
\\\\}
\\\\}
Azure Provider
provider "azurerm" \\\\{
features \\\\{\\\\}
subscription_id = "00000000-0000-0000-0000-000000000000"
tenant_id = "00000000-0000-0000-0000-000000000000"
\\\\}
Google Cloud Provider
provider "google" \\\\{
project = "my-project-id"
region = "us-central1"
zone = "us-central1-c"
\\\\}
Advanced Features
Conditional Resources
resource "aws_instance" "example" \\\\{
count = var.create_instance ? 1 : 0
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
\\\\}
For Each
resource "aws_instance" "example" \\\\{
for_each = toset(var.instance_names)
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
tags = \\\\{
Name = each.key
\\\\}
\\\\}
Dynamic Blocks
resource "aws_security_group" "example" \\\\{
name = "example"
dynamic "ingress" \\\\{
for_each = var.ingress_rules
content \\\\{
from_port = ingress.value.from_port
to_port = ingress.value.to_port
protocol = ingress.value.protocol
cidr_blocks = ingress.value.cidr_blocks
\\\\}
\\\\}
\\\\}
Testing and Validation
Command
Description
terraform validate
Validate syntax
terraform validate -json
Validate with JSON output
Command
Description
terraform plan -detailed-exitcode
Plan with detailed exit codes
terraform show
Show current state
terraform show -json
Show state in JSON
Command
Description
tflint
Terraform linter
terraform-docs
Generate documentation
checkov -f main.tf
Security scanning
tfsec .
Security analysis
Debugging and Troubleshooting
Logging
Command
Description
TF_LOG=DEBUG terraform plan
Enable debug logging
TF_LOG=TRACE terraform apply
Enable trace logging
TF_LOG_PATH=terraform.log terraform plan
Log to file
Common Issues
Command
Description
terraform refresh
Sync state with reality
terraform taint resource.name
Mark resource for recreation
terraform untaint resource.name
Remove taint from resource
Best Practices
File Organization
project/
├── main.tf # Main configuration
├── variables.tf # Variable definitions
├── outputs.tf # Output definitions
├── versions.tf # Provider versions
├── terraform.tfvars # Variable values
└── modules/
└── vpc/
├── main.tf
├── variables.tf
└── outputs.tf
Version Constraints
terraform \\\\{
required_version = ">= 1.0"
required_providers \\\\{
aws = \\\\{
source = "hashicorp/aws"
version = "~> 5.0"
\\\\}
\\\\}
\\\\}
Resource Naming
resource "aws_instance" "web_server" \\\\{
# Use descriptive names
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
tags = \\\\{
Name = "$\\\\{var.project_name\\\\}-web-$\\\\{var.environment\\\\}"
Environment = var.environment
Project = var.project_name
\\\\}
\\\\}
Security Best Practices
State Security : Use remote state with encryption
Secrets Management : Use external secret stores
Access Control : Implement proper IAM policies
Code Review : Review all infrastructure changes
Scanning : Use security scanning tools
Parallelism : Use -parallelism
flag for large deployments
Targeting : Use -target
for specific resources
State Splitting : Split large states into smaller ones
Module Design : Design reusable modules