模块指南
模块结构
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
}