terraform 连接变量和字符串

Jac*_*rry 5 terraform

我需要将变量传递给数据结构。但是我不想用所有可能的迭代来构建数据对象。目的是查询 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)

BMW*_*BMW 1

你的代码几乎可以工作了。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)