我需要将变量传递给数据构造。但是我不想用所有可能的迭代来构建数据对象。目的是查询AWS以获取资源ID。这是示例代码:
IO
答案 0 :(得分:0)
您的代码几乎可以正常工作。在数据源stage-a
中引用其ID时,您在aws_subnet
上使用了错误的名称。
这是更新的代码。
variable "subnet" {}
data "aws_subnet" "subnet" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:Name"
values = ["${var.subnet}"]
}
}
output "data" {
value = "${data.aws_subnet.subnet.id}"
}
由于未创建任何实际资源,因此可以自由运行terraform apply
。
$ TF_VAR_subnet="private" terraform apply
data.aws_subnet.subnet: Refreshing state...
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
data = subnet-21f5a847
唯一的问题是,如果没有匹配项,terraform将报告问题并在需要时停止应用更改。
$ TF_VAR_subnet="not_found" terraform apply
data.aws_subnet.subnet: Refreshing state...
Error: Error refreshing state: 1 error(s) occurred:
* data.aws_subnet.subnet: 1 error(s) occurred:
* data.aws_subnet.subnet: data.aws_subnet.subnet: no matching subnet found