如何在Terraform中使用条件count语句按工作区控制模块创建
问题原因
- Terraform的
count参数要求传入非负整数,不能直接使用布尔值作为参数值 - 你报错的代码中额外对布尔返回值调用了
length()函数,布尔类型不属于length()支持的字符串、集合、结构类型范围,因此触发类型不匹配错误
正确配置方案
直接将条件表达式的返回值修改为数值即可:条件成立时返回1(创建1个模块实例),条件不成立时返回0(不创建模块),不需要多余的插值语法和length()调用:
module us-west-2 { count = local.environments[terraform.workspace] == "logging" ? 1 : 0 # 其余原有配置保持不变 source = "./modules/flow_log" providers = { aws = aws.us-west-2 } log_destination = module.nf_cis_benchmark.aws_s3_bucket_vpc_flow_log log_destination_type = "s3" traffic_type = "REJECT" depends_on = [ module.nf_cis_benchmark.raws_s3_bucket_vpc_flow_log_arn ] aws_vpc_ids = data.aws_vpcs.us-west-2.ids }
注意事项
- 使用
count条件创建的模块,后续引用该模块输出时需要添加索引,例如module.us-west-2[0].<输出属性名>,否则会因为返回的是实例列表而报错 - 模块级别的
count参数需要Terraform 0.13及以上版本支持,低于该版本需要先升级Terraform - 你当前的工作区为
nf-logging,请先确认local.environments["nf-logging"]的取值确实为"logging",否则条件不会触发,模块不会创建
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

