模块指南

模块结构

modules/ └── vpc/ ├── main.tf # 资源 ├── variables.tf # 输入变量 ├── outputs.tf # 输出值 └── versions.tf # Provider 版本要求 # variables.tf variable "vpc_cidr" { type = string description = "VPC 的 CIDR 块" default = "10.0.0.0/16" validation { condition = can(cidrhost(var.vpc_cidr, 0)) error_message = "必须是有效的 CIDR 块。" } }

模块来源

# 本地路径 module "vpc" { source = "./modules/vpc" } # Terraform Registry(公有) module "eks" { source = "terraform-aws-modules/eks/aws" version = "~> 20.0" } # GitHub module "vpc" { source = "github.com/my-org/terraform-modules//vpc?ref=v2.0.0" } # Terraform Cloud 私有 Registry module "vpc" { source = "app.terraform.io/my-org/vpc/aws" version = "~> 2.0" }

调用模块

module "production_vpc" { source = "./modules/vpc" vpc_cidr = "10.0.0.0/16" enable_nat_gateway = true tags = { Environment = "production" Team = "platform" } } # 使用模块输出 resource "aws_security_group" "app" { vpc_id = module.production_vpc.vpc_id }

使用 for_each 创建多个模块实例

variable "environments" { default = { dev = { cidr = "10.0.0.0/16" } prod = { cidr = "10.2.0.0/16" } } } module "vpcs" { for_each = var.environments source = "./modules/vpc" name = each.key vpc_cidr = each.value.cidr } # 访问特定实例的输出 output "prod_vpc_id" { value = module.vpcs["prod"].vpc_id }