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”参数时使用。
正确的语法是什么?
只要您只关心 1 或 0 个实例,您就可以访问整个列表,可以使用带有函数和空字符串的splat 表达式 ,这会导致 ID 或空字符串,具体取决于资源是否创建。aws_instance.ec2_instance[*].idjoin
output "ec2_instance_id" {\n value = join("", aws_instance.ec2_instance[*].id)\n}\nRun Code Online (Sandbox Code Playgroud)\n\n例子:
\n\nvariable "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}\nRun 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 =\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
10330 次 |
| 最近记录: |