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ᴇᴇ
相关产品推荐
相关产品推荐

