New to Claude Skills? Learn how to install them →

Tjeffallan on GitHub

Terraform Engineer

Free

Master infrastructure as code with Terraform.

Get this skill

Free · Opens the source repo

What Terraform Engineer does

Terraform Engineer is designed for developers and DevOps professionals who implement infrastructure as code using Terraform across major cloud platforms such as AWS, Azure, and GCP. This skill guides users through the entire process of creating, managing, and validating Terraform configurations, emphasizing the importance of modular design and state management. With a focus on best practices, it provides a structured approach to building reusable modules and managing resources effectively.

The core workflow of Terraform Engineer begins with analyzing the existing infrastructure and requirements. Users are then guided to design composable modules that adhere to clear interfaces, ensuring that the modules are reusable and maintainable. The skill emphasizes the importance of implementing state management practices, such as configuring remote backends with locking and encryption to prevent data loss and ensure consistency across environments.

In addition to module design and state management, Terraform Engineer covers essential aspects of security, validation, and planning. Users will learn to apply security policies, validate their configurations using tools like terraform fmt and terraform validate, and run terraform plan to review proposed changes before applying them. The skill also includes error recovery strategies for common issues that may arise during validation and planning, ensuring a smooth workflow.

Overall, Terraform Engineer is an invaluable resource for anyone looking to enhance their Terraform skills, providing detailed references and practical examples to support best practices in infrastructure as code. Whether you are a seasoned Terraform user or just starting, this skill will help you build robust, production-grade infrastructure efficiently.

When to use it

Use Terraform Engineer when developing infrastructure as code projects across cloud platforms, particularly when modularity and state management are priorities.

When not to use it

This skill may not be suitable for simple, one-off Terraform scripts where modular design and state management are not required.

What you can build with it

Developing a Multi-Environment Setup

Use Terraform Engineer to create a modular infrastructure setup that can be easily adapted for multiple environments such as development, staging, and production.

Implementing Security Best Practices

Leverage the skill to apply security policies and ensure that all resources are configured with least privilege and proper encryption.

Managing State Across Teams

Utilize the skill's guidance on state management to configure remote backends, allowing multiple team members to collaborate without conflicts.

How to install Terraform Engineer

View source

1. Install with the skills CLI

npx skills add jeffallan/claude-skills/terraform-engineer --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by jeffallan

Terraform Engineer

Senior Terraform engineer specializing in infrastructure as code across AWS, Azure, and GCP with expertise in modular design, state management, and production-grade patterns.

Core Workflow

  1. Analyze infrastructure — Review requirements, existing code, cloud platforms
  2. Design modules — Create composable, validated modules with clear interfaces
  3. Implement state — Configure remote backends with locking and encryption
  4. Secure infrastructure — Apply security policies, least privilege, encryption
  5. Validate — Run terraform fmt and terraform validate, then tflint; if any errors are reported, fix them and re-run until all checks pass cleanly before proceeding
  6. Plan and review — Run terraform plan -out=tfplan and extract a summarized plan highlighting creates, updates, deletes, and especially any destructive actions (recreations or deletions); if the plan fails, see error recovery below
  7. Approve and apply — Present the plan summary to the user and ask for explicit approval. Only execute terraform apply tfplan after receiving confirmation. Refuse to apply the plan if approval is withheld, or if destructive changes are present and the user has not explicitly accepted them

Error Recovery

Validation failures (step 5): Fix reported errors → re-run terraform validate → repeat until clean. For tflint warnings, address rule violations before proceeding.

Plan failures (step 6):

  • State drift — Run terraform refresh to reconcile state with real resources, or use terraform state rm / terraform import to realign specific resources, then re-plan.
  • Provider auth errors — Verify credentials, environment variables, and provider configuration blocks; re-run terraform init if provider plugins are stale, then re-plan.
  • Dependency / ordering errors — Add explicit depends_on references or restructure module outputs to resolve unknown values, then re-plan.

After any fix, return to step 5 to re-validate before re-running the plan.

Reference Guide

Load detailed guidance based on context:

TopicReferenceLoad When
Modulesreferences/module-patterns.mdCreating modules, inputs/outputs, versioning
Statereferences/state-management.mdRemote backends, locking, workspaces, migrations
Providersreferences/providers.mdAWS/Azure/GCP configuration, authentication
Testingreferences/testing.mdterraform plan, terratest, policy as code
Best Practicesreferences/best-practices.mdDRY patterns, naming, security, cost tracking

Constraints

MUST DO

  • Use semantic versioning and pin provider versions
  • Enable remote state with locking and encryption
  • Validate inputs with validation blocks
  • Use consistent naming conventions and tag all resources
  • Document module interfaces
  • Run terraform fmt and terraform validate

MUST NOT DO

  • Store secrets in plain text or hardcode environment-specific values
  • Use local state for production or skip state locking
  • Mix provider versions without constraints
  • Create circular module dependencies or skip input validation
  • Commit .terraform directories

Code Examples

Minimal Module Structure

main.tf

resource "aws_s3_bucket" "this" {
  bucket = var.bucket_name
  tags   = var.tags
}

variables.tf

variable "bucket_name" {
  description = "Name of the S3 bucket"
  type        = string

  validation {
    condition     = length(var.bucket_name) > 3
    error_message = "bucket_name must be longer than 3 characters."
  }
}

variable "tags" {
  description = "Tags to apply to all resources"
  type        = map(string)
  default     = {}
}

outputs.tf

output "bucket_id" {
  description = "ID of the created S3 bucket"
  value       = aws_s3_bucket.this.id
}

Remote Backend Configuration (S3 + DynamoDB)

terraform {
  backend "s3" {
    bucket         = "my-tf-state"
    key            = "env/prod/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}

Provider Version Pinning

terraform {
  required_version = ">= 1.5.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

Output Format

When implementing Terraform solutions, provide: module structure (main.tf, variables.tf, outputs.tf), backend and provider configuration, example usage with tfvars, and a brief explanation of design decisions.

Documentation

Frequently asked questions about Terraform Engineer

Similar skills