ASD

Terraform Module Library

Construye módulos Terraform reutilizables para infraestructura AWS, Azure, GCP y OCI siguiendo buenas prácticas de infraestructura como código.

Estrellas
38.8k

en todo el repo

Actividad
35

0–100, la ruta de este skill

Actualizado
hace 5 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
1.4k tok

61 tok en reposo

Paquete
3 archivos

8 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

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

Se instala solo en este repositorio.

Qué hace

  • Estructura módulos Terraform reutilizables para AWS, Azure, GCP y OCI con el patrón main.tf/variables.tf/outputs.tf/versions.tf
  • Aporta ejemplos concretos como un módulo VPC de AWS con validación de CIDR y tags
  • Define buenas prácticas: versionado semántico, validación de variables, Terratest, pinning de providers
  • Muestra composición de módulos entre VPC y RDS mediante outputs encadenados

Úsalo cuando

  • Construir componentes de infraestructura reutilizables
  • Estandarizar el aprovisionamiento de recursos cloud
  • Implementar buenas prácticas de infraestructura como código
  • Crear módulos compatibles con multi-cloud o establecer estándares organizacionales de Terraform

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Crea un módulo Terraform reutilizable para VPC en AWS
    • Ayúdame a estandarizar nuestros módulos de Terraform multi-cloud
    • Necesito estructurar un módulo con tests usando Terratest

    SKILL.md

    En inglés

    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:

    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:

    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:

    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

    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

    // 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

    Reproducido de wshobson/agents bajo licencia MIT. Leer esta página en markdown.

    Archivos

    3 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Detalles

    Creador
    wshobson
    Licencia
    MIT
    Recursos incluidos
    referencias
    Repositorio
    wshobson/agents
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de wshobson/agents

    Este repo incluye 180 skills. Si instalas uno, normalmente ya tienes los demás.

    Úsalo al seleccionar y colocar iconos, imágenes, SVGs, diagramas o infografías de apoyo aprobados en un PPTX editable.

    Costo de contexto al activarse
    344 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    10 archivos
    Última actualización
    el mes pasado
    herramientas desarrollo

    Úsalo al redactar o reparar una especificación JSON con coordenadas explícitas para un PPTX editable.

    Costo de contexto al activarse
    489 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para validar o reparar un PPTX editable en cuanto a geometría, accesibilidad, editabilidad nativa, linaje de fuente e integridad del paquete OOXML.

    Costo de contexto al activarse
    409 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para analizar un PPTX de referencia en modo solo lectura: estructura, tema, tipografía, ritmo de layout, diagnósticos, catálogos de plantillas derivados o inspección segura del paquete OOXML.

    Costo de contexto al activarse
    689 tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo al preparar la narrativa, las fuentes y el contexto de diseño para un nuevo deck PPTX editable.

    Costo de contexto al activarse
    415 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Skills relacionados

    Configura Turborepo para builds de monorepo eficientes con caché local y remota. Útil al configurar Turborepo, optimizar pipelines de build o implementar caching distribuido.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 5 meses
    devops infraestructura

    Implementa observabilidad integral para service meshes, incluyendo tracing distribuido, métricas y visualización. Útil para monitoreo de mesh, depuración de latencia y SLOs.

    Costo de contexto al activarse
    708 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    devops infraestructura

    Define e implementa Indicadores (SLI) y Objetivos (SLO) de nivel de servicio con error budgets y alertas, para establecer metas de fiabilidad y prácticas SRE.

    Costo de contexto al activarse
    1.8k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    devops infraestructura