遍历 terraform 中的变量
loop over the variable in terraform
我是 terraform 的新手,想完成这项工作。我能够创建 vpc,public 子网并获取它们的 ID,现在我想在每个子网中创建一个 ec2 实例,当我尝试 运行 ec2 模块时,它只会创建第一个子网内的实例并忽略其他子网。这是我的代码片段。
输出子网 ID:
output "public_subnets_id" {
value = "${join(",", aws_subnet.public.*.id)}"
}
这里是示例输出:
public_subnets_id = subnet-84aae6f4,subnet-a12124e8
这是我的代码,我在其中尝试拆分它并在每个子网内创建实例,但只能创建到第一个子网。
subnet_id = "${element(split(",", var.subnet_id), count.index)}"
似乎问题出在 resource "aws_instance"
定义,
count ="${length(split(",", var.subnet_id))}"
如果直接设置count为2,会得到2个instance吗?
我的理解是,ec2资源的计数应该设置为默认,比如2,或者直接定义ec2_num
到variable.tf中的一个数字,然后通过[=13=调用它] 在资源 ec2
我将 EC2 实例分布在不同的可用性区域,如下所示:
variable "zones" {
default = {
zone0 = "us-east-1a"
zone1 = "us-east-1b"
zone2 = "us-east-1c"
}
}
variable "cidr_blocks" {
default = {
zone0 = "172.32.0.0/20"
zone1 = "172.32.16.0/20"
zone2 = "172.32.32.0/20"
}
}
variable "dockerhost_instances" {
default = "5"
}
resource "aws_subnet" "public-subnet" {
...
cidr_block = "${lookup(var.cidr_blocks, format("zone%d", count.index))}"
availability_zone = "${lookup(var.zones, format("zone%d", count.index))}"
count = 3
}
resource "aws_instance" "host" {
...
subnet_id = "${element(aws_subnet.public-subnet.*.id,count.index)}"
count = "${var.dockerhost_instances}"
}
因为 ${element(...)}
函数环绕,结果是三个子网和五个主机分布在子网上:
us-east-1a : host.0 host.3
us-east-1b : host.1 host.4
us-east-1c : host.2
我是 terraform 的新手,想完成这项工作。我能够创建 vpc,public 子网并获取它们的 ID,现在我想在每个子网中创建一个 ec2 实例,当我尝试 运行 ec2 模块时,它只会创建第一个子网内的实例并忽略其他子网。这是我的代码片段。
输出子网 ID:
output "public_subnets_id" {
value = "${join(",", aws_subnet.public.*.id)}"
}
这里是示例输出:
public_subnets_id = subnet-84aae6f4,subnet-a12124e8
这是我的代码,我在其中尝试拆分它并在每个子网内创建实例,但只能创建到第一个子网。
subnet_id = "${element(split(",", var.subnet_id), count.index)}"
似乎问题出在 resource "aws_instance"
定义,
count ="${length(split(",", var.subnet_id))}"
如果直接设置count为2,会得到2个instance吗?
我的理解是,ec2资源的计数应该设置为默认,比如2,或者直接定义ec2_num
到variable.tf中的一个数字,然后通过[=13=调用它] 在资源 ec2
我将 EC2 实例分布在不同的可用性区域,如下所示:
variable "zones" {
default = {
zone0 = "us-east-1a"
zone1 = "us-east-1b"
zone2 = "us-east-1c"
}
}
variable "cidr_blocks" {
default = {
zone0 = "172.32.0.0/20"
zone1 = "172.32.16.0/20"
zone2 = "172.32.32.0/20"
}
}
variable "dockerhost_instances" {
default = "5"
}
resource "aws_subnet" "public-subnet" {
...
cidr_block = "${lookup(var.cidr_blocks, format("zone%d", count.index))}"
availability_zone = "${lookup(var.zones, format("zone%d", count.index))}"
count = 3
}
resource "aws_instance" "host" {
...
subnet_id = "${element(aws_subnet.public-subnet.*.id,count.index)}"
count = "${var.dockerhost_instances}"
}
因为 ${element(...)}
函数环绕,结果是三个子网和五个主机分布在子网上:
us-east-1a : host.0 host.3
us-east-1b : host.1 host.4
us-east-1c : host.2