如何在Terraform中创建可用于setproduct函数的set集合
Terraform构造符合setproduct入参要求的set集合解决方案
该报错的本质是直接书写的
[a,b,c]在Terraform中会被推断为tuple类型,如果a、b、c三个值的类型不完全一致,tuple无法直接被toset/tolist转换为同构的集合类型,触发类型不匹配错误。
可直接使用的解决方案:
- 方案1:显式声明list类型约束,强制转换为同构集合
确定三个值可安全转换为同一类型时,直接在构造list时指定类型即可(以下示例为字符串类型,可根据实际元素类型替换为list(number)、list(list(string))等合法类型):
该写法会强制Terraform把三个元素都转换为指定的类型,生成符合要求的同构list后再转set,不会触发类型错误。toset(list(string)[a, b, c]) - 方案2:先统一每个元素的类型再构造集合
如果元素是复杂类型(如嵌套list、object),可先对每个元素单独做类型转换保证类型一致,再构造set:toset([ tolist(a), tolist(b), tolist(c) ])
结合setproduct的使用示例:
locals { # 构造第一个set集合(三个元素为字符串类型) env_set = toset(list(string)["dev", "test", "prod"]) # 第二个set集合 spec_set = toset(["t2.micro", "t2.small"]) # 调用setproduct生成笛卡尔乘积 product_result = setproduct(local.env_set, local.spec_set) }
内容的提问来源于stack exchange,提问作者Sabo Boz
相关产品推荐
相关产品推荐

