Terraform:在创建资源时使用计数时,输出中的拆分函数会出错
Terraform: split function in output gives error when count is used while creating a resource
我正在通过在其中使用计数来创建资源。当我在输出中使用 split 函数时,它给我错误,而没有使用 split 的正常输出工作正常。
我现在 运行 在 stack=dev 上。我希望相同的资源不会在开发堆栈中创建,但它应该在生产堆栈中创建。我正在尝试以这种方式编写代码
下面是给出错误的代码
data "aws_cloudformation_stack" "some_name" {
count = (local.stack == "dev" ? 0 : 1)
name = "${local.stack}_some_name"
}
output "public_alb_subnets" {
value = split(",", "${data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSubnets"]}")
}
它给我错误
错误:函数参数无效
on managed_alb.tf line 138, in output "public_alb_subnets":
138: value = split(",", "${data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSubnets"]}")
|----------------
| data.aws_cloudformation_stack.some_name is empty tuple
Invalid value for "str" parameter: string required.
然而下面是可行的
output "public_alb_security_groups" {
value = [
data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSecurityGroup"],
data.aws_cloudformation_stack.some_name[*].outputs["InternalElbSecurityGroup"]
]
}
我在网上尝试了很多不同的选项,但 none 其中的选项有效。我在这里做错了什么。即使使用 count.index 或 0 代替 * 也不起作用
您必须根据您的 dev
或 prod
环境使您的输出也有条件:
output "public_alb_subnets" {
value = length(data.aws_cloudformation_stack.some_name) > 0 ? split(",", "${data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSubnets"]}") : null
}
我正在通过在其中使用计数来创建资源。当我在输出中使用 split 函数时,它给我错误,而没有使用 split 的正常输出工作正常。
我现在 运行 在 stack=dev 上。我希望相同的资源不会在开发堆栈中创建,但它应该在生产堆栈中创建。我正在尝试以这种方式编写代码
下面是给出错误的代码
data "aws_cloudformation_stack" "some_name" {
count = (local.stack == "dev" ? 0 : 1)
name = "${local.stack}_some_name"
}
output "public_alb_subnets" {
value = split(",", "${data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSubnets"]}")
}
它给我错误
错误:函数参数无效
on managed_alb.tf line 138, in output "public_alb_subnets":
138: value = split(",", "${data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSubnets"]}")
|----------------
| data.aws_cloudformation_stack.some_name is empty tuple
Invalid value for "str" parameter: string required.
然而下面是可行的
output "public_alb_security_groups" {
value = [
data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSecurityGroup"],
data.aws_cloudformation_stack.some_name[*].outputs["InternalElbSecurityGroup"]
]
}
我在网上尝试了很多不同的选项,但 none 其中的选项有效。我在这里做错了什么。即使使用 count.index 或 0 代替 * 也不起作用
您必须根据您的 dev
或 prod
环境使您的输出也有条件:
output "public_alb_subnets" {
value = length(data.aws_cloudformation_stack.some_name) > 0 ? split(",", "${data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSubnets"]}") : null
}