Back to Skills

terraform-modules

verified

Use when creating and using reusable Terraform modules for organizing and sharing infrastructure code.

View on GitHub

Marketplace

han

TheBushidoCollective/han

Plugin

jutsu-terraform

Technique

Repository

TheBushidoCollective/han
60stars

jutsu/jutsu-terraform/skills/terraform-modules/SKILL.md

Last Verified

January 24, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/TheBushidoCollective/han/blob/main/jutsu/jutsu-terraform/skills/terraform-modules/SKILL.md -a claude-code --skill terraform-modules

Installation paths:

Claude
.claude/skills/terraform-modules/
Powered by add-skill CLI

Instructions

# Terraform Modules

Creating and using reusable Terraform modules.

## Module Structure

```
modules/vpc/
├── main.tf
├── variables.tf
├── outputs.tf
└── README.md
```

## Creating a Module

### main.tf

```hcl
resource "aws_vpc" "main" {
  cidr_block           = var.cidr_block
  enable_dns_hostnames = var.enable_dns_hostnames
  
  tags = merge(var.tags, {
    Name = var.name
  })
}

resource "aws_subnet" "public" {
  count             = length(var.public_subnets)
  vpc_id            = aws_vpc.main.id
  cidr_block        = var.public_subnets[count.index]
  availability_zone = var.availability_zones[count.index]
  
  tags = merge(var.tags, {
    Name = "${var.name}-public-${count.index + 1}"
  })
}
```

### variables.tf

```hcl
variable "name" {
  description = "VPC name"
  type        = string
}

variable "cidr_block" {
  description = "VPC CIDR block"
  type        = string
}

variable "public_subnets" {
  description = "Public subnet CIDR blocks"
  type        = list(string)
  default     = []
}

variable "tags" {
  description = "Resource tags"
  type        = map(string)
  default     = {}
}
```

### outputs.tf

```hcl
output "vpc_id" {
  description = "VPC ID"
  value       = aws_vpc.main.id
}

output "public_subnet_ids" {
  description = "Public subnet IDs"
  value       = aws_subnet.public[*].id
}
```

## Using Modules

### Local Module

```hcl
module "vpc" {
  source = "./modules/vpc"
  
  name        = "production-vpc"
  cidr_block  = "10.0.0.0/16"
  public_subnets = [
    "10.0.1.0/24",
    "10.0.2.0/24",
  ]
  
  tags = {
    Environment = "production"
  }
}

# Access module outputs
resource "aws_instance" "web" {
  subnet_id = module.vpc.public_subnet_ids[0]
}
```

### Registry Module

```hcl
module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.0.0"
  
  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", "

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
3705 chars