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

如何在Terraform 1.0.0中实现模块条件执行与参数动态传递

Terraform 条件选择模块+动态传参实现方案

步骤1:定义输入变量

先创建variables.tf文件,声明输入参数并增加合法性校验:

variable "region" {
  type        = string
  description = "AWS区域"
}

variable "module_name" {
  type        = string
  description = "要执行的模块名称,可选值:CreateResource1、CreateResource2"
  validation {
    condition     = contains(["CreateResource1", "CreateResource2"], var.module_name)
    error_message = "module_name仅支持传入CreateResource1或CreateResource2"
  }
}

variable "parameters" {
  type        = map(any)
  description = "传递给目标模块的参数字典"
}

步骤2:改造main.tf实现条件执行和动态传参

利用Terraform的count参数实现模块的条件启停,利用map参数展开语法实现动态传参:

provider "aws" {
  region = var.region
}

module "CreateResource1" {
  count  = var.module_name == "CreateResource1" ? 1 : 0
  source = "./modules/CreateResource1"
  // 自动展开parameters的键值对作为模块的输入参数
  var.parameters...
}

module "CreateResource2" {
  count  = var.module_name == "CreateResource2" ? 1 : 0
  source = "./modules/CreateResource2"
  // 自动展开parameters的键值对作为模块的输入参数
  var.parameters...
}

调用示例

你可以按照需求传入参数调用:

module "Resource" {
  source = "./当前根模块的本地路径"
  
  module_name = "CreateResource1"
  parameters = {
    ProductName = "Test1"
    ProductColour = "Red"
    ProductShape = "Hexagone"
  }
}

注意事项

  • 传入的parameters的键名、数据类型必须和目标模块的输入参数完全匹配,否则会触发参数校验错误
  • 由于使用了count做条件控制,模块的输出会变为列表类型,引用模块输出时需要增加索引,例如:module.CreateResource1[0].输出参数名
  • 上述语法完全兼容Terraform 1.0及以上版本,无需开启额外特性开关

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:27:01