terraform连接变量和字符串

terraform连接变量和字符串,terraform,Terraform,我需要向数据结构传递一个变量。然而,我不想用所有可能的迭代来构建数据对象。目的是查询AWS以获取资源ID。以下是示例代码: variable "subnet" {} data "aws_subnet" "subnet" { filter { name = "state" values = ["available"] } filter { name = "tag:Name" values = ["${var.subnet}"] } }

我需要向数据结构传递一个变量。然而,我不想用所有可能的迭代来构建数据对象。目的是查询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}"
}

你的密码几乎可以用了。在数据源
aws\u子网
中引用其id时,您在
stage-a
中使用了错误的名称

这是更新后的代码

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}"
}
由于没有创建真正的资源,您可以自由运行
terraformapply

$ 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

您在这里的预期输出是什么?我主要是想弄清楚是否有可能这样做。在上面的例子中,我可以使用aws_vpc,但我只想了解可能性。在上面的代码中,我想从子网名称中获取子网ID。然后需要连接什么?您希望输出是什么样子的?这确实有效,谢谢。但是,我不知道如何指定所需的子网(在本例中)。。我遗漏了什么吗?有三种方法来处理地形变量。(1) (我在上面的示例中向您展示)通过
TF\u VAR\u subnet
,(2)在设置变量时直接使用默认值,(3)使用
-VAR'foo=bar'
-VAR file=foo
使用terraform命令馈送