К основному содержанию
скилл Claude Code CX Codex Cursor

terraform-module-library — скилл для Claude: модули Terraform

Скилл для написания переиспользуемых модулей Terraform под AWS, Azure, GCP и OCI. Пригодится, когда нужно навести порядок в облачном провижининге.

Установить в Claude Code · Через маркетплейс плагинов Все способы и платформы ↓
/plugin marketplace add wshobson/agents
/plugin install cloud-infrastructure@claude-code-workflows
Открыть на GitHub

Что делает terraform-module-library

Скилл задаёт структуру модуля: main.tf, variables.tf, outputs.tf, versions.tf, папку examples/ и тесты на Terratest. Внутри — готовые шаблоны под VPC, EKS, RDS, S3 для AWS, аналоги для Azure, GCP и OCI. Агент опирается на них, когда вы просите собрать новый модуль или привести существующий к общему виду.

Отдельно прописаны правила: семантическое версионирование, описания у всех переменных, блоки validation для входных значений, закреплённые версии провайдеров, теги на ресурсах. Есть пример композиции, где модуль VPC передаёт vpc_id и private_subnet_ids в модуль RDS.

Ставить стоит тем, кто держит инфраструктуру в Terraform и устал от копипасты между проектами. Если у вас один маленький стек на пару ресурсов, скилл только добавит лишние файлы. Для работы нужен сам Terraform и Go, если планируете гонять тесты.

Какие задачи решает

  • собрать переиспользуемый модуль VPC с приватными подсетями
  • привести переменные модуля к общему стилю с описаниями и валидацией
  • связать модули между собой через outputs
  • написать тест Terratest для проверки модуля
  • закрепить версии провайдеров в versions.tf

Примеры запросов агенту

  • Сделай модуль Terraform для VPC в AWS по шаблону из скилла
  • Добавь validation для переменной cidr_block
  • Напиши тест Terratest для модуля vpc

Как установить terraform-module-library

1Через маркетплейс плагинов

/plugin marketplace add wshobson/agents
/plugin install cloud-infrastructure@claude-code-workflows

2Через Skills CLI (Vercel)

npx skills add wshobson/agents --skill terraform-module-library -a claude-code

3Вручную: положить файлы

~/.claude/skills/terraform-module-library/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/terraform-module-library/

Похожие

wizard Matt Pocock Скилл создаёт интерактивный bash-скрипт для ручных шагов: настройки сервисов, секретов CI и разовых миграций. Claude Code 553 369установок setup-pre-commit Matt Pocock Скилл настраивает pre-commit для JavaScript-репозитория: Husky запускает форматирование, проверку типов и тесты перед коммитом. Claude Code 489 289установок using-git-worktrees Jesse Vincent Готовит изолированное рабочее дерево перед доработкой или выполнением плана. Проверяет текущий репозиторий, выбирает нативные средства платформы либо Git. Claude Code CX Codex 217 153установок finishing-a-development-branch Jesse Vincent Скилл проверяет тесты и помогает выбрать, как завершить работу в ветке: слить её, открыть Pull Request или оставить как есть. Claude Code CX Codex 214 439установок dotnet-upgrade официальный github Помогает спланировать обновление проектов .NET: проверить зависимости, выбрать порядок миграции и подготовить проверки после неё. GitHub Copilot 11 475установок create-github-action-workflow-specification официальный github Скилл разбирает существующий GitHub Actions workflow и оформляет его поведение, зависимости и ограничения как спецификацию для ИИ. GitHub Copilot 10 745установок

Вопросы о terraform-module-library

Как установить terraform-module-library в Claude?

Через маркетплейс: /plugin marketplace add wshobson/agents, затем /plugin install cloud-infrastructure@claude-code-workflows. Либо npx skills add wshobson/agents --skill terraform-module-library -a claude-code.

Что делает terraform-module-library?

Даёт агенту шаблоны и правила для сборки модулей Terraform под AWS, Azure, GCP и OCI: структура файлов, валидация переменных, outputs, примеры и тесты.

Какие облака поддерживаются?

AWS, Azure, GCP и OCI. В шаблонах есть VPC, EKS, RDS, S3 и их аналоги у остальных провайдеров.

Исходный текст

SKILL.md · MIT
---
name: terraform-module-library
description: Build reusable Terraform modules for AWS, Azure, GCP, and OCI infrastructure following infrastructure-as-code best practices. Use when creating infrastructure modules, standardizing cloud provisioning, or implementing reusable IaC components.
---

# Terraform Module Library

Production-ready Terraform module patterns for AWS, Azure, GCP, and OCI infrastructure.

## Purpose

Create reusable, well-tested Terraform modules for common cloud infrastructure patterns across multiple cloud providers.

## When to Use

- Build reusable infrastructure components
- Standardize cloud resource provisioning
- Implement infrastructure as code best practices
- Create multi-cloud compatible modules
- Establish organizational Terraform standards

## Module Structure

```
terraform-modules/
├── aws/
│   ├── vpc/
│   ├── eks/
│   ├── rds/
│   └── s3/
├── azure/
│   ├── vnet/
│   ├── aks/
│   └── storage/
├── gcp/
│   ├── vpc/
│   ├── gke/
│   └── cloud-sql/
└── oci/
    ├── vcn/
    ├── oke/
    └── object-storage/
```

## Standard Module Pattern

```
module-name/
├── main.tf          # Main resources
├── variables.tf     # Input variables
├── outputs.tf       # Output values
├── versions.tf      # Provider versions
├── README.md        # Documentation
├── examples/        # Usage examples
│   └── complete/
│       ├── main.tf
│       └── variables.tf
└── tests/           # Terratest files
    └── module_test.go
```

## AWS VPC Module Example

**main.tf:**

```hcl
resource "aws_vpc" "main" {
  cidr_block           = var.cidr_block
  enable_dns_hostnames = var.enable_dns_hostnames
  enable_dns_support   = var.enable_dns_support

  tags = merge(
    {
      Name = var.name
    },
    var.tags
  )
}

resource "aws_subnet" "private" {
  count             = length(var.private_subnet_cidrs)
  vpc_id            = aws_vpc.main.id
  cidr_block        = var.private_subnet_cidrs[count.index]
  availability_zone = var.availability_zones[count.index]

  tags = merge(
    {
      Name = "${var.name}-private-${count.index + 1}"
      Tier = "private"
    },
    var.tags
  )
}

resource "aws_internet_gateway" "main" {
  count  = var.create_internet_gateway ? 1 : 0
  vpc_id = aws_vpc.main.id

  tags = merge(
    {
      Name = "${var.name}-igw"
    },
    var.tags
  )
}
```

**variables.tf:**

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

variable "cidr_block" {
  description = "CIDR block for VPC"
  type        = string
  validation {
    condition     = can(regex("^([0-9]{1,3}\\.){3}[0-9]{1,3}/[0-9]{1,2}$", var.cidr_block))
    error_message = "CIDR block must be valid IPv4 CIDR notation."
  }
}

variable "availability_zones" {
  description = "List of availability zones"
  type        = list(string)
}

variable "private_subnet_cidrs" {
  description = "CIDR blocks for private subnets"
  type        = list(string)
  default     = []
}

variable "enable_dns_hostnames" {
  description = "Enable DNS hostnames in VPC"
  type        = bool
  default     = true
}

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

**outputs.tf:**

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

output "private_subnet_ids" {
  description = "IDs of private subnets"
  value       = aws_subnet.private[*].id
}

output "vpc_cidr_block" {
  description = "CIDR block of VPC"
  value       = aws_vpc.main.cidr_block
}
```

## Best Practices

1. **Use semantic versioning** for modules
2. **Document all variables** with descriptions
3. **Provide examples** in examples/ directory
4. **Use validation blocks** for input validation
5. **Output important attributes** for module composition
6. **Pin provider versions** in versions.tf
7. **Use locals** for computed values
8. **Implement conditional resources** with count/for_each
9. **Test modules** with Terratest
10. **Tag all resources** consistently

**Reference:** See `references/aws-modules.md` and `references/oci-modules.md`

## Module Composition

```hcl
module "vpc" {
  source = "../../modules/aws/vpc"

  name               = "production"
  cidr_block         = "10.0.0.0/16"
  availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]

  private_subnet_cidrs = [
    "10.0.1.0/24",
    "10.0.2.0/24",
    "10.0.3.0/24"
  ]

  tags = {
    Environment = "production"
    ManagedBy   = "terraform"
  }
}

module "rds" {
  source = "../../modules/aws/rds"

  identifier     = "production-db"
  engine         = "postgres"
  engine_version = "15.3"
  instance_class = "db.t3.large"

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnet_ids

  tags = {
    Environment = "production"
  }
}
```


## Testing

```go
// tests/vpc_test.go
package test

import (
    "testing"
    "github.com/gruntwork-io/terratest/modules/terraform"
    "github.com/stretchr/testify/assert"
)

func TestVPCModule(t *testing.T) {
    terraformOptions := &terraform.Options{
        TerraformDir: "../examples/complete",
    }

    defer terraform.Destroy(t, terraformOptions)
    terraform.InitAndApply(t, terraformOptions)

    vpcID := terraform.Output(t, terraformOptions, "vpc_id")
    assert.NotEmpty(t, vpcID)
}
```

## Related Skills

- `multi-cloud-architecture` - For architectural decisions
- `cost-optimization` - For cost-effective designs

© Seth Hobson · MIT · wshobson/agents

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой