From terraform
Guides writing and organizing Terraform HCL configurations for cloud resource provisioning, including providers, resources, variables, outputs, data sources, locals, commands, and file structure best practices.
How this skill is triggered — by the user, by Claude, or both
Slash command
/terraform:terraform-configurationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Writing and organizing Terraform infrastructure-as-code configurations.
Writing and organizing Terraform infrastructure-as-code configurations.
# Provider configuration
terraform {
required_version = ">= 1.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.region
}
resource "aws_instance" "web" {
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = "web-server"
Environment = var.environment
}
lifecycle {
create_before_destroy = true
prevent_destroy = false
}
}
variable "environment" {
description = "Environment name"
type = string
default = "development"
validation {
condition = contains(["development", "staging", "production"], var.environment)
error_message = "Environment must be development, staging, or production."
}
}
variable "instance_count" {
description = "Number of instances"
type = number
default = 1
}
variable "tags" {
description = "Resource tags"
type = map(string)
default = {}
}
output "instance_id" {
description = "ID of the EC2 instance"
value = aws_instance.web.id
}
output "public_ip" {
description = "Public IP address"
value = aws_instance.web.public_ip
sensitive = false
}
data "aws_ami" "amazon_linux" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["amzn2-ami-hvm-*-x86_64-gp2"]
}
}
data "aws_vpc" "default" {
default = true
}
locals {
common_tags = {
Project = "myapp"
ManagedBy = "terraform"
Environment = var.environment
}
name_prefix = "${var.project}-${var.environment}"
}
resource "aws_instance" "web" {
# ...
tags = merge(local.common_tags, {
Name = "${local.name_prefix}-web"
})
}
# Initialize
terraform init
# Format
terraform fmt -recursive
# Validate
terraform validate
# Plan
terraform plan -out=tfplan
# Apply
terraform apply tfplan
# Destroy
terraform destroy
# Show state
terraform show
# List resources
terraform state list
project/
├── main.tf # Main resources
├── variables.tf # Variable declarations
├── outputs.tf # Output declarations
├── versions.tf # Provider versions
├── terraform.tfvars # Variable values (gitignored if sensitive)
└── modules/ # Local modules
└── network/
# Bad
resource "aws_instance" "web" {
instance_type = "t2.micro"
}
# Good
resource "aws_instance" "web" {
instance_type = var.instance_type
}
locals {
timestamp = formatdate("YYYY-MM-DD-hhmmss", timestamp())
full_name = "${var.prefix}-${var.name}-${var.suffix}"
}
npx claudepluginhub thebushidocollective/han --plugin terraformManages Terraform IaC with HCL configuration, state management, modular design, plan-apply workflows for cloud and on-prem resource provisioning.
Generates and formats Terraform HCL code following HashiCorp's official style guide, including file organization, naming conventions, and best practices for writing or reviewing configurations.
Provides Terraform coding conventions and best practices for resource naming, file organization, variable definitions, locals, data sources, and AWS-specific IAM roles and policies.