You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将单文件Terraform代码拆分为多目录模块并关联

Terraform代码拆分与模块间参数传递实现

目录结构规划

先按要求创建如下目录结构:

your-terraform-project/
├── main.tf          # 根模块,关联所有子模块
├── key-pair/
│   └── main.tf      # 密钥对子模块
└── ec2/
    └── main.tf      # EC2集群子模块

1. 编写密钥对子模块(key-pair/main.tf)

定义AWS密钥对资源,并输出key_name,供EC2模块调用:

resource "aws_key_pair" "cluster_key" {
  key_name   = "ec2-cluster-key" # 可替换为自定义名称,或改用变量实现动态配置
  public_key = file("~/.ssh/id_rsa.pub") # 替换为你的本地公钥路径
}

# 输出密钥对名称,作为模块对外暴露的参数
output "key_name" {
  value = aws_key_pair.cluster_key.key_name
}

2. 编写EC2集群子模块(ec2/main.tf)

先定义输入变量key_name,再在EC2实例资源中引用该变量:

# 定义接收密钥对名称的输入变量
variable "key_name" {
  type        = string
  description = "AWS密钥对名称,用于关联EC2实例"
}

resource "aws_instance" "cluster_nodes" {
  count         = 3 # 集群节点数量,按需调整
  ami           = "ami-0c55b159cbfafe1f0" # 替换为你目标区域的合适AMI
  instance_type = "t2.micro"
  key_name      = var.key_name # 使用传入的密钥对名称

  tags = {
    Name = "Cluster-Node-${count.index + 1}"
  }
}

3. 编写根模块(main.tf)

配置AWS Provider,调用两个子模块,并完成key_name参数传递:

# 配置AWS Provider
provider "aws" {
  region = "us-east-1" # 替换为你的目标AWS区域
}

# 调用密钥对子模块
module "key_pair" {
  source = "./key-pair"
}

# 调用EC2集群子模块,传递密钥对名称
module "ec2_cluster" {
  source   = "./ec2"
  key_name = module.key_pair.key_name # 引用密钥对子模块的输出值
}

4. 部署验证

执行以下Terraform命令完成部署:

terraform init   # 初始化模块与Provider
terraform plan  # 预览资源变更
terraform apply # 确认并创建资源

内容的提问来源于stack exchange,提问作者Junth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:33:14