我正在创建子网,作为一个单独的 Terraform 模板,并按如下方式导出 ID。
output "subnet-aza-dev" {
value = "${aws_subnet.subnet-aza-dev.id}"
}
output "subnet-azb-dev" {
value = "${aws_subnet.subnet-azb-dev.id}"
}
output "subnet-aza-test" {
value = "${aws_subnet.subnet-aza-test.id}"
}
output "subnet-azb-test" {
value = "${aws_subnet.subnet-azb-test.id}"
}
...
我打算在另一个模板中查找这些ID,该模板被重用以提供多个环境。下面的示例显示我的第二个模板正在调用一个模块来提供EC2实例,并通过subnet_id传递。
variable "environment" {
description = "Environment name"
default = "dev"
}
module "sql-1-ec2" {
source = "../modules/ec2winserver_sql"
...
subnet_id = "${data.terraform_remote_state.env-shared.subnet-aza-dev}"
}
我希望能够将环境变量作为查找子网ID的一部分来传递,例如:
subnet_id = "${data.terraform_remote_state.env-shared.subnet-aza-${var.environment}"
然而,我知道变量插值不受支持。我尝试在第一个terraform模板中使用映射将它们全部导出到“subnet”,然后再从第二个模板中查找。但是由于无法在映射内输出变量,因此这种方法行不通。
我之前在CloudFormation中使用过这种设计模式,但是我对terraform的了解要少得多。我是否遗漏了一些明显的东西?
${}
包裹var.environment
吗?不确定你能否实现你想要的,但是使用插值,你只需要一次 - 而且它已经在那个父级的"${}"中了。 - TJ Biddlesubnet_id = "${data.terraform_remote_state.env-shared.subnet-aza-var.environment}"
时,它并没有展开变量,而是尝试读取一个在 env-shared 资源中不存在的subnet-aza-var.environment
属性。 - PhilH