启用计数时创建 Terraform 输出

Way*_*eio 9 amazon-ec2 amazon-web-services terraform

我正在尝试为 Terraform 中已设置计数的资源创建outputs.tf。当 count 为 1 时,一切正常,但是当 count 为 0 时,则不然:

如果我创建这样的输出

output "ec2_instance_id" {
  value = aws_instance.ec2_instance.id
}
Run Code Online (Sandbox Code Playgroud)

它错误

由于 aws_instance.ec2_instance 设置了“count”,因此必须在特定实例上访问其属性。

但是,将其更改为

output "ec2_instance_id" {
  value = aws_instance.ec2_instance[0].id
}
Run Code Online (Sandbox Code Playgroud)

适用于计数为 1,但当计数为 0 时给出

aws_instance.ec2_instance 是空元组

给定的键不标识此集合值中的元素。

因此我看到了这篇文章并尝试了

output "ec2_instance_id" {
  value = aws_instance.ec2_instance[count.index].id
}
Run Code Online (Sandbox Code Playgroud)

但这给了

“count”对象只能在“resource”和“data”块中使用,并且只能在设置了“count”参数时使用。

正确的语法是什么?

Nge*_*tor 9

只要您只关心 1 或 0 个实例,您就可以访问整个列表,可以使用带有函数和空字符串的splat 表达式 ,这会导致 ID 或空字符串,具体取决于资源是否创建。aws_instance.ec2_instance[*].idjoin

\n\n
output "ec2_instance_id" {\n  value = join("", aws_instance.ec2_instance[*].id)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子:

\n\n
variable "thing1" {\n  default = [\n    { id = "one" }\n  ]\n}\n\nvariable "thing2" {\n  default = []\n}\n\noutput "thing1" {\n  value = join("", var.thing1[*].id)\n}\n\noutput "thing2" {\n  value = join("", var.thing2[*].id)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是

\n\n
\xe2\x9e\x9c terraform apply\n\nApply complete! Resources: 0 added, 0 changed, 0 destroyed.\n\nOutputs:\n\nthing1 = one\nthing2 =\n
Run Code Online (Sandbox Code Playgroud)\n