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