Terraform Basics

HCL Basics

# terraform.tf โ€” provider and backend configuration terraform { required_version = ">= 1.5.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } backend "s3" { bucket = "my-terraform-state" key = "prod/terraform.tfstate" region = "us-east-1" } } provider "aws" { region = var.aws_region }

Resources & Variables

# variables.tf variable "aws_region" { type = string description = "AWS region" default = "us-east-1" } variable "instance_type" { type = string default = "t3.micro" } # main.tf resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true tags = { Name = "main-vpc" Environment = var.environment } } resource "aws_subnet" "public" { count = 2 vpc_id = aws_vpc.main.id cidr_block = cidrsubnet("10.0.0.0/16", 8, count.index) availability_zone = data.aws_availability_zones.available.names[count.index] } # outputs.tf output "vpc_id" { description = "VPC ID" value = aws_vpc.main.id }

Common CLI Commands

# Initialize working directory terraform init # Format code terraform fmt -recursive # Validate configuration terraform validate # Preview changes terraform plan terraform plan -out=tfplan # Apply changes terraform apply terraform apply tfplan # apply saved plan terraform apply -auto-approve # skip confirmation # Destroy resources terraform destroy terraform destroy -target=aws_instance.web # specific resource # State management terraform state list terraform state show aws_vpc.main terraform state mv aws_instance.old aws_instance.new terraform import aws_s3_bucket.existing my-bucket-name