我正在创建子网作为单独的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}"
}
我想要做的是传递环境变量作为subnet_id查找的一部分,例如
subnet_id = "${data.terraform_remote_state.env-shared.subnet-aza-${var.environment}"
但是我知道不支持变量插值 . 我已经尝试使用第一个terraform模板中的 Map 将它们全部导出到“子网”,然后我可以使用它从第二个模板中查找 . 这不起作用,因为我无法在 Map 内输出变量 .
这种设计模式是我以前在CloudFormation中使用的,但是我对terraform更新 . 我错过了一些明显的东西吗?
1 回答
使用数据源设计了一种方法
虽然这可以满足我的原始需求,但我想通过将
data
块移动到模块内来改进这一点,这样就可以减少重复次数 . 尽管如此......