Terraform AWS
Provision and manage AWS infrastructure with Terraform.
Provider Configuration
hclterraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } backend "s3" { bucket = "terraform-state" key = "prod/terraform.tfstate" region = "us-east-1" } } provider "aws" { region = var.region default_tags { tags = { Environment = var.environment ManagedBy = "terraform" } } }
Example Resources
hclresource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true tags = { Name = "main-vpc" } } resource "aws_instance" "web" { ami = data.aws_ami.amazon_linux.id instance_type = "t3.micro" subnet_id = aws_subnet.public.id tags = { Name = "web-server" } }
Modules
hclmodule "vpc" { source = "terraform-aws-modules/vpc/aws" name = "my-vpc" cidr = "10.0.0.0/16" azs = ["us-east-1a", "us-east-1b"] 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 }
Commands
bashterraform init terraform plan -out=plan.tfplan terraform apply plan.tfplan terraform destroy
Best Practices
- Use remote state with locking
- Implement module structure
- Use workspaces or separate states per environment
- Pin provider versions
- Use data sources for AMIs


