Home > Net >  Terraform: split function in output gives error when count is used while creating a resource
Terraform: split function in output gives error when count is used while creating a resource

Time:01-30

I am creating a resource by using count in it. When I use split function in the output it gives me error while normal output where split is not used just works fine.

I am running on stack=dev right now. I expect the same resource to not get created on dev stack but it should get created in prod stack. I am trying to write a code in such a way

Below is the piece of code which gives error

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"]}")
 
}

It gives me error

Error: Invalid function argument

  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.

However below works

output "public_alb_security_groups" {
  value = [
    data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSecurityGroup"],
    data.aws_cloudformation_stack.some_name[*].outputs["InternalElbSecurityGroup"]
  ]
}

I tried many different options on the web but none of them worked. What I am doing wrong here. Even using count.index or 0 in place of * doesn't work

CodePudding user response:

You have to make your output also conditional, based on your dev or prod environments:

output "public_alb_subnets" {
  value = length(data.aws_cloudformation_stack.some_name) > 0 ? split(",", "${data.aws_cloudformation_stack.some_name[*].outputs["PublicElbSubnets"]}") : null 
}
  •  Tags:  
  • Related