I am trying to create an outputs.tf for a resource in Terraform which has count set. When count is 1, all works fine, however when count is 0, it does not:
If I create the output like this
output "ec2_instance_id" {
value = aws_instance.ec2_instance.id
}
It errors
because aws_instance.ec2_instance has "count" set, its attributes must be accessed on specific instances.
However, changing it to
output "ec2_instance_id" {
value = aws_instance.ec2_instance[0].id
}
works for a count of 1, but when count is 0 gives
aws_instance.ec2_instance is empty tuple
The given key does not identify an element in this collection value.
Therefore I saw this post and tried
output "ec2_instance_id" {
value = aws_instance.ec2_instance[count.index].id
}
but that gives
The "count" object can be used only in "resource" and "data" blocks, and only when the "count" argument is set.
What is the correct syntax?
As long as you only care about 1 or 0 instances, you can access the whole list can use the splat expression aws_instance.ec2_instance[*].id
with the join
function and an empty string, which results in the ID or an empty string depending on whether the resource was created or not.
output "ec2_instance_id" {
value = join("", aws_instance.ec2_instance[*].id)
}
Example:
variable "thing1" {
default = [
{ id = "one" }
]
}
variable "thing2" {
default = []
}
output "thing1" {
value = join("", var.thing1[*].id)
}
output "thing2" {
value = join("", var.thing2[*].id)
}
Results in
➜ terraform apply
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
thing1 = one
thing2 =
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.