[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-a49a6ae5-0453-4079-9c06-36de7c4a37e1":3,"$fyHtHigt6s1PkoKH2XV8SEr3iON5evQ0Imq3nP3PwSn4":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"a49a6ae5-0453-4079-9c06-36de7c4a37e1","terraform-module-library","适用于AWS、Azure和GCP基础设施的生产就绪Terraform模块模式。","cat_coding_devops","mod_coding","sickn33,coding","---\nname: terraform-module-library\ndescription: \"Production-ready Terraform module patterns for AWS, Azure, and GCP infrastructure.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Terraform Module Library\n\nProduction-ready Terraform module patterns for AWS, Azure, and GCP infrastructure.\n\n## Do not use this skill when\n\n- The task is unrelated to terraform module library\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources\u002Fimplementation-playbook.md`.\n\n## Purpose\n\nCreate reusable, well-tested Terraform modules for common cloud infrastructure patterns across multiple cloud providers.\n\n## Use this skill when\n\n- Build reusable infrastructure components\n- Standardize cloud resource provisioning\n- Implement infrastructure as code best practices\n- Create multi-cloud compatible modules\n- Establish organizational Terraform standards\n\n## Module Structure\n\n```\nterraform-modules\u002F\n├── aws\u002F\n│   ├── vpc\u002F\n│   ├── eks\u002F\n│   ├── rds\u002F\n│   └── s3\u002F\n├── azure\u002F\n│   ├── vnet\u002F\n│   ├── aks\u002F\n│   └── storage\u002F\n└── gcp\u002F\n    ├── vpc\u002F\n    ├── gke\u002F\n    └── cloud-sql\u002F\n```\n\n## Standard Module Pattern\n\n```\nmodule-name\u002F\n├── main.tf          # Main resources\n├── variables.tf     # Input variables\n├── outputs.tf       # Output values\n├── versions.tf      # Provider versions\n├── README.md        # Documentation\n├── examples\u002F        # Usage examples\n│   └── complete\u002F\n│       ├── main.tf\n│       └── variables.tf\n└── tests\u002F           # Terratest files\n    └── module_test.go\n```\n\n## AWS VPC Module Example\n\n**main.tf:**\n```hcl\nresource \"aws_vpc\" \"main\" {\n  cidr_block           = var.cidr_block\n  enable_dns_hostnames = var.enable_dns_hostnames\n  enable_dns_support   = var.enable_dns_support\n\n  tags = merge(\n    {\n      Name = var.name\n    },\n    var.tags\n  )\n}\n\nresource \"aws_subnet\" \"private\" {\n  count             = length(var.private_subnet_cidrs)\n  vpc_id            = aws_vpc.main.id\n  cidr_block        = var.private_subnet_cidrs[count.index]\n  availability_zone = var.availability_zones[count.index]\n\n  tags = merge(\n    {\n      Name = \"${var.name}-private-${count.index + 1}\"\n      Tier = \"private\"\n    },\n    var.tags\n  )\n}\n\nresource \"aws_internet_gateway\" \"main\" {\n  count  = var.create_internet_gateway ? 1 : 0\n  vpc_id = aws_vpc.main.id\n\n  tags = merge(\n    {\n      Name = \"${var.name}-igw\"\n    },\n    var.tags\n  )\n}\n```\n\n**variables.tf:**\n```hcl\nvariable \"name\" {\n  description = \"Name of the VPC\"\n  type        = string\n}\n\nvariable \"cidr_block\" {\n  description = \"CIDR block for VPC\"\n  type        = string\n  validation {\n    condition     = can(regex(\"^([0-9]{1,3}\\\\.){3}[0-9]{1,3}\u002F[0-9]{1,2}$\", var.cidr_block))\n    error_message = \"CIDR block must be valid IPv4 CIDR notation.\"\n  }\n}\n\nvariable \"availability_zones\" {\n  description = \"List of availability zones\"\n  type        = list(string)\n}\n\nvariable \"private_subnet_cidrs\" {\n  description = \"CIDR blocks for private subnets\"\n  type        = list(string)\n  default     = []\n}\n\nvariable \"enable_dns_hostnames\" {\n  description = \"Enable DNS hostnames in VPC\"\n  type        = bool\n  default     = true\n}\n\nvariable \"tags\" {\n  description = \"Additional tags\"\n  type        = map(string)\n  default     = {}\n}\n```\n\n**outputs.tf:**\n```hcl\noutput \"vpc_id\" {\n  description = \"ID of the VPC\"\n  value       = aws_vpc.main.id\n}\n\noutput \"private_subnet_ids\" {\n  description = \"IDs of private subnets\"\n  value       = aws_subnet.private[*].id\n}\n\noutput \"vpc_cidr_block\" {\n  description = \"CIDR block of VPC\"\n  value       = aws_vpc.main.cidr_block\n}\n```\n\n## Best Practices\n\n1. **Use semantic versioning** for modules\n2. **Document all variables** with descriptions\n3. **Provide examples** in examples\u002F directory\n4. **Use validation blocks** for input validation\n5. **Output important attributes** for module composition\n6. **Pin provider versions** in versions.tf\n7. **Use locals** for computed values\n8. **Implement conditional resources** with count\u002Ffor_each\n9. **Test modules** with Terratest\n10. **Tag all resources** consistently\n\n## Module Composition\n\n```hcl\nmodule \"vpc\" {\n  source = \"..\u002F..\u002Fmodules\u002Faws\u002Fvpc\"\n\n  name               = \"production\"\n  cidr_block         = \"10.0.0.0\u002F16\"\n  availability_zones = [\"us-west-2a\", \"us-west-2b\", \"us-west-2c\"]\n\n  private_subnet_cidrs = [\n    \"10.0.1.0\u002F24\",\n    \"10.0.2.0\u002F24\",\n    \"10.0.3.0\u002F24\"\n  ]\n\n  tags = {\n    Environment = \"production\"\n    ManagedBy   = \"terraform\"\n  }\n}\n\nmodule \"rds\" {\n  source = \"..\u002F..\u002Fmodules\u002Faws\u002Frds\"\n\n  identifier     = \"production-db\"\n  engine         = \"postgres\"\n  engine_version = \"15.3\"\n  instance_class = \"db.t3.large\"\n\n  vpc_id     = module.vpc.vpc_id\n  subnet_ids = module.vpc.private_subnet_ids\n\n  tags = {\n    Environment = \"production\"\n  }\n}\n```\n\n## Reference Files\n\n- `assets\u002Fvpc-module\u002F` - Complete VPC module example\n- `assets\u002Frds-module\u002F` - RDS module example\n- `references\u002Faws-modules.md` - AWS module patterns\n- `references\u002Fazure-modules.md` - Azure module patterns\n- `references\u002Fgcp-modules.md` - GCP module patterns\n\n## Testing\n\n```go\n\u002F\u002F tests\u002Fvpc_test.go\npackage test\n\nimport (\n    \"testing\"\n    \"github.com\u002Fgruntwork-io\u002Fterratest\u002Fmodules\u002Fterraform\"\n    \"github.com\u002Fstretchr\u002Ftestify\u002Fassert\"\n)\n\nfunc TestVPCModule(t *testing.T) {\n    terraformOptions := &terraform.Options{\n        TerraformDir: \"..\u002Fexamples\u002Fcomplete\",\n    }\n\n    defer terraform.Destroy(t, terraformOptions)\n    terraform.InitAndApply(t, terraformOptions)\n\n    vpcID := terraform.Output(t, terraformOptions, \"vpc_id\")\n    assert.NotEmpty(t, vpcID)\n}\n```\n\n## Related Skills\n\n- `multi-cloud-architecture` - For architectural decisions\n- `cost-optimization` - For cost-effective designs\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,217,1015,"2026-05-16 13:43:38",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"DevOps","devops","mdi-cog-outline","CI\u002FCD、容器化、部署运维",3,162,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"e09c5caf-75a9-4db2-a290-ecccdf6368a8","1.0.0","terraform-module-library.zip",3250,"uploads\u002Fskills\u002Fa49a6ae5-0453-4079-9c06-36de7c4a37e1\u002Fterraform-module-library.zip","83ea047f2cf83f80a0ad4002d4f05f2beb4ee2aeab41474da2baaa7830a9829b","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":6308},{\"path\":\"references\u002Faws-modules.md\",\"isDirectory\":false,\"size\":1307}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]