| created | "2025-12-16T00:00:00.000Z" |
| modified | "2026-05-09T00:00:00.000Z" |
| reviewed | "2026-04-25T00:00:00.000Z" |
| name | infrastructure-terraform |
| description | Terraform IaC: HCL, state management, modules, plan-apply workflows. Use when the user mentions Terraform, HCL, terraform plan/apply, tfstate, or IaC provisioning. |
| user-invocable | false |
| allowed-tools | Glob, Grep, Read, Bash, Edit, Write, TodoWrite |
Infrastructure Terraform
Expert knowledge for Infrastructure as Code using Terraform with focus on declarative HCL, state management, and resilient infrastructure.
When to Use This Skill
| Use this skill when... | Use a tfc-* sibling instead when... |
|---|
| Writing or modifying Terraform HCL configuration locally | Inspecting Terraform Cloud run state via API (tfc-run-status) |
Running terraform init/plan/apply/destroy against a backend | Reading TFC plan/apply log streams (tfc-run-logs) |
| Designing module structure, providers, or remote backends | Analyzing structured plan JSON from a TFC run (tfc-plan-json) |
| Debugging local state, drift, or import workflows | Listing or filtering TFC run history (tfc-list-runs, tfc-workspace-runs) |
Core Expertise
Terraform & IaC
- Declarative Infrastructure: Clean, modular, and reusable HCL code
- State Management: Protecting and managing Terraform state with remote backends
- Providers & Modules: Leveraging community and custom providers/modules
- Execution Lifecycle: Mastering the plan -> review -> apply workflow
Infrastructure Provisioning Process
- Plan First: Always generate
terraform plan and review carefully before changes
- Modularize: Break down infrastructure into reusable and composable modules
- Secure State: Use remote backends with locking to protect state file
- Parameterize: Use variables and outputs for flexible and configurable infrastructure
- Destroy with Caution: Double-check plan before running
terraform destroy
Essential Commands
terraform init
terraform plan
terraform apply
terraform destroy
terraform state list
terraform state show <resource>
terraform state pull > backup.tfstate
terraform validate
terraform fmt -recursive
terraform fmt path/to/dir
terraform graph | dot -Tsvg > graph.svg
terraform -chdir=gcp fmt
terraform -chdir=gcp validate
terraform -chdir=gcp plan
terraform -chdir=modules/vpc init
export TF_LOG=DEBUG
terraform plan -out=tfplan
terraform show tfplan
Best Practices
Module Structure
module "vpc" {
source = "./modules/vpc"
version = "1.0.0"
vpc_cidr = var.vpc_cidr
environment = var.environment
}
output "vpc_id" {
value = module.vpc.vpc_id
}
Variable Configuration
variable "environment" {
description = "Environment name"
type = string
validation {
condition = contains(["dev", "staging", "prod"], var.environment)
error_message = "Environment must be dev, staging, or prod."
}
}
Remote State Backend
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}
Provider Configuration
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
required_version = ">= 1.5"
}
Key Debugging Techniques
State Debugging
terraform state list
terraform state show aws_instance.web
terraform refresh
terraform plan -refresh-only
terraform import aws_instance.existing i-1234567890
Error Resolution
terraform init -upgrade
terraform init -reconfigure
terraform taint aws_instance.broken
terraform apply -target=aws_instance.web
Agentic Optimizations
| Context | Command |
|---|
| Format directory | terraform -chdir=path/to/dir fmt |
| Check format (CI) | terraform fmt -check -recursive |
| Validate config | terraform -chdir=path/to/dir validate |
| Compact plan | terraform plan -compact-warnings |
| JSON plan output | terraform plan -out=plan.tfplan && terraform show -json plan.tfplan |
| List resources | terraform state list |
Quick Reference
| Flag | Description |
|---|
-chdir=DIR | Change to DIR before running command |
-recursive | Process directories recursively |
-check | Check formatting without changes (CI) |
-compact-warnings | Show warnings in compact form |
-json | Output in JSON format |
-out=FILE | Save plan to file |
-target=RESOURCE | Target specific resource |
-refresh-only | Only refresh state, no changes |
For detailed debugging patterns, advanced module design, CI/CD integration, and troubleshooting strategies, see REFERENCE.md.