Terraform 0.14 按条件创建依赖模块时引用属性报错如何解决
问题原因
当你为module块添加count参数后,Terraform会将该模块识别为包含0或1个实例的列表集合,而非单个模块对象。直接访问module.rg-sample.name会因为类型不匹配,抛出属性不存在的错误。
解决方案
两种可选方案都可以保留原有的隐式依赖关系:
- 列表下标访问
因为两个模块的count触发条件完全一致,当vnet模块需要创建时,rg-sample模块必然存在下标为0的实例,直接指定索引即可:
module "vnet" { count = var.environment != "dev" ? 1 : 0 source = "../Modules/module-az-vnet" name = "vnet-${var.environment}-01" location = module.rg-sample[0].location resource_group_name = module.rg-sample[0].name address_space = var.address_space }
- 加
try函数兼容
如果需要兼容更复杂的条件场景,可以用try函数做兜底,避免极端情况下的索引报错:
location = try(module.rg-sample[0].location, var.location) resource_group_name = try(module.rg-sample[0].name, "rg-${var.environment}-vnet")
你当前的场景两个模块触发条件完全一致,第一种方案已经可以稳定运行,不需要额外添加depends_on配置。
内容的提问来源于stack exchange,提问作者pers
相关产品推荐
相关产品推荐

