正如評論提到你不能像Terraform那樣內插變量或者像默認變量那樣使用另一個變量,你可以使用數據源實現你陳述的目標ES。
在這個例子情況下,你可以這樣做以下:
variable "env" {
default = "production"
}
variable "vpc_name" {
default = "cloudy"
}
data "aws_vpc" "selected" {
tags {
Name = "${var.vpc_name}"
}
}
resource "aws_subnet" "pub1" {
vpc_id = "${data.aws_vpc.selected.id}"
cidr_block = "10.0.1.0/24"
availability_zone = "us-east-1a"
}
這會自動創建在「陰天」 VPC子網。
這也使得不僅僅是VPC ID拉動更多的信息反饋,所以你可以做這樣的事情,而不是:
variable "env" {
default = "production"
}
variable "vpc_name" {
default = "cloudy"
}
data "aws_vpc" "selected" {
tags {
Name = "${var.vpc_name}"
}
}
resource "aws_subnet" "public" {
vpc_id = "${data.aws_vpc.selected.id}"
cidr_block = "${cidrsubnet(data.aws_vpc.selected.cidr_block, 8, 1)}"
availability_zone = "us-east-1a"
}
的cidrsubnet
function計算從一個給定的範圍CIDR子網。在這種情況下,如果您的VPC是10.0.0.0/16
,則返回10.0.1.0/24
。
上面的例子解決了你的主要問題,但它不允許動態命名的Terraform資源。在你的小例子似乎沒有成爲一個需要它,但如果你想要的東西,然後,動態,你也可以用一些結合這就像一個計數的資源:
variable "env" {
default = "production"
}
variable "vpc_name" {
default = "cloudy"
}
data "aws_vpc" "selected" {
tags {
Name = "${var.vpc_name}"
}
}
data "aws_availability_zones" "all" {}
resource "aws_subnet" "public" {
count = "${length(data.aws_availability_zones.all.names)}"
vpc_id = "${data.aws_vpc.selected.id}"
cidr_block = "${cidrsubnet(data.aws_vpc.selected.cidr_block, 8, count.index)}"
availability_zone = "${data.aws_availability_zones.all.names[count.index]}"
}
這現在動態地創建子網VPC的區域中的每個可用區域。顯然你可以把這個很好,我建議你閱讀data sources以及所有的AWS specific數據源。
我不認爲Terraform支持這種動態插值,因爲它需要知道如何處理所有依賴項之前的完整圖。你可能會詳細說明你想要做什麼,因爲可能有更好的方法來處理它? – Fermin
TF不支持像Fermin這樣的資源名稱中的替換 –
這可能就是爲什麼我找不出一種方法來實現它。 –