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

Terraform存在重复代码时如何扩展或复用模块?

Terraform 代码精简方案

你可以使用Terraform的for_each元参数实现公共配置抽离,和Node.js中封装函数传入差异化参数的逻辑完全一致,具体实现如下:

实现代码

首先定义存储差异化参数的本地值:

locals {
  # 键为原模块的自定义名称,值为a_module_specific_var对应的差异化取值
  module_configs = {
    my_module     = "1"
    another_module = "2"
  }
}

统一声明模块,抽离所有公共配置:

module "shared_instance" {
  # 遍历上面定义的配置集合
  for_each = local.module_configs

  source = "../something"
  # 公共参数直接固定写,无需重复声明
  some_var = "a value"
  another_var = "another value"
  wow_more_var = "wow"
  # 差异化参数从遍历项中取值
  a_module_specific_var = each.value
}

扩展说明

如果后续有多个差异化参数,可以把本地值的取值改为对象格式:

locals {
  module_configs = {
    my_module = {
      specific_var = "1"
      extra_var = "自定义参数1"
    }
    another_module = {
      specific_var = "2"
      extra_var = "自定义参数2"
    }
  }
}

对应模块内取值改为each.value.specific_var、each.value.extra_var即可。

注意事项

  • 模块实例的引用格式会发生变化:原来的module.my_module改为module.shared_instance["my_module"],属性引用逻辑和之前完全一致
  • 后续新增/删除模块实例只需要修改local.module_configs即可,Terraform只会操作对应变更的实例,不会影响其他已有实例

内容的提问来源于stack exchange,提问作者JᴀʏMᴇᴇ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:45:01