Terraform - 具有相同 aws_instance 资源的多个子网
Terraform - Multiple subnets with same aws_instance resource
我正在尝试部署多个 EC2 实例,每个实例都在不同的子网中使用相同的 aws_instance
资源块。
当我将计数参数设置为多个服务器时,它会将它们全部建立在同一子网中。
有没有办法通过 Terraform 完成此操作?
下面是我的 Terraform 块:
resource "aws_instance" "ec2-instance" {
ami = "${var.ec2_ami}"
instance_type = "${var.instance_type}"
key_name = "${var.key_name}"
vpc_security_group_ids = ["${var.security_group}"]
subnet_id = "${var.subnet_id}"
count = "${var.count}"
root_block_device {
volume_size = "${var.root_volume_size}"
volume_type = "${var.root_volume_type}"
}
tags {
Name = "${var.app_name}"
}
}
你必须定义另一个 aws_instance 块来实现它。 AWS API 也不支持这个。当您使用 RunInstances API 创建 EC2 实例时,它将在同一子网中启动所有实例(作为单个请求的一部分)。
在您的 Terraform 示例中,您使用 count
创建资源的多个实例,但为每个实例指定相同的子网 (var.subnet_id
)。
您可以使用计数索引为每个实例将资源属性设置为不同的值。例如,您可以将子网列表定义为变量,然后使用 element() 根据计数索引选择一个。
variable "subnet_ids" {
default = [ "s1", "s2", "s3" ]
}
resource "aws_instance" "ec2-instance"
{
count = "${var.count}"
subnet_id = "${element(var.subnet_ids, count.index)}"
# rest of config as before...
}
I'm attempting to deploy multiple EC2 instances, each in different subnets using the same aws_instance resource block.
您可以使用以下解决方法
data aws_subnet_ids current {
vpc_id = var.vpc_id
}
resource "aws_instance" "ec2-instance" {
count = "${var.count}"
subnet_id = tolist(data.aws_subnet_ids.current.ids)[count.index % length(data.aws_subnet_ids.current.ids)]
# rest of config as before...
}
我正在尝试部署多个 EC2 实例,每个实例都在不同的子网中使用相同的 aws_instance
资源块。
当我将计数参数设置为多个服务器时,它会将它们全部建立在同一子网中。
有没有办法通过 Terraform 完成此操作?
下面是我的 Terraform 块:
resource "aws_instance" "ec2-instance" {
ami = "${var.ec2_ami}"
instance_type = "${var.instance_type}"
key_name = "${var.key_name}"
vpc_security_group_ids = ["${var.security_group}"]
subnet_id = "${var.subnet_id}"
count = "${var.count}"
root_block_device {
volume_size = "${var.root_volume_size}"
volume_type = "${var.root_volume_type}"
}
tags {
Name = "${var.app_name}"
}
}
你必须定义另一个 aws_instance 块来实现它。 AWS API 也不支持这个。当您使用 RunInstances API 创建 EC2 实例时,它将在同一子网中启动所有实例(作为单个请求的一部分)。
在您的 Terraform 示例中,您使用 count
创建资源的多个实例,但为每个实例指定相同的子网 (var.subnet_id
)。
您可以使用计数索引为每个实例将资源属性设置为不同的值。例如,您可以将子网列表定义为变量,然后使用 element() 根据计数索引选择一个。
variable "subnet_ids" {
default = [ "s1", "s2", "s3" ]
}
resource "aws_instance" "ec2-instance"
{
count = "${var.count}"
subnet_id = "${element(var.subnet_ids, count.index)}"
# rest of config as before...
}
I'm attempting to deploy multiple EC2 instances, each in different subnets using the same aws_instance resource block.
您可以使用以下解决方法
data aws_subnet_ids current {
vpc_id = var.vpc_id
}
resource "aws_instance" "ec2-instance" {
count = "${var.count}"
subnet_id = tolist(data.aws_subnet_ids.current.ids)[count.index % length(data.aws_subnet_ids.current.ids)]
# rest of config as before...
}