如何在 Terraform 中使用条件计数语句

Eva*_*tis 0 terraform

给定一个像这样的模块

\n
module us-west-2 {\n    count          = "${local.environments[terraform.workspace] ==  "logging" ? true : false}"\n    source = "./modules/flow_log"\n    providers = {\n        aws = aws.us-west-2\n    }\n    log_destination = module.nf_cis_benchmark.aws_s3_bucket_vpc_flow_log\n    log_destination_type = "s3"\n    traffic_type = "REJECT"\n    depends_on = [ module.nf_cis_benchmark.raws_s3_bucket_vpc_flow_log_arn ]\n    aws_vpc_ids = data.aws_vpcs.us-west-2.ids\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

我们如何根据返回值有条件地创建这个模块local.environments[terraform.workspace]

\n

预期:\n当用户运行时,terraform apply将根据所选工作区有条件地创建资源。

\n

实际的:

\n
330:     count          = length("${local.environments[terraform.workspace] ==  "logging" ? true : false}")\n\xe2\x94\x82     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82     \xe2\x94\x82 local.environments is object with 9 attributes\n\xe2\x94\x82     \xe2\x94\x82 terraform.workspace is "nf-logging"\n\xe2\x94\x82 \n\xe2\x94\x82 Call to function "length" failed: argument must be a string, a collection type, or a structural type.\n
Run Code Online (Sandbox Code Playgroud)\n

Mar*_*k B 5

您的错误消息有一个length()调用,但您发布的代码没有。当您发布这样的问题时,请发布生成错误的实际代码。


我不知道为什么您尝试将计数表达式用双引号引起来,或者为什么您尝试返回 true 或 false,然后获取这些字符串的字符串长度来创建计数值。您使用的是非常旧版本的 Terraform 吗?我认为如果您使用 Terraform 0.12 或更高版本,您尝试做的事情实际上看起来像这样:

count = local.environments[terraform.workspace] == "logging" ? 1 : 0
Run Code Online (Sandbox Code Playgroud)