我需要将变量传递给数据结构。但是我不想用所有可能的迭代来构建数据对象。目的是查询 AWS 以获取资源 ID。这是一个示例代码:
variable "subnet" {}
data "aws_subnet" "subnet" {
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:Name"
values = ["${var.subnet}"]
}
}
output "data" {
value = "${data.aws_subnet.'stage-a'.id}"
}
Run Code Online (Sandbox Code Playgroud)
你的代码几乎可以工作了。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}"
}
Run Code Online (Sandbox Code Playgroud)
由于没有创建真正的资源,所以可以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
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,如果没有匹配,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5599 次 |
| 最近记录: |