我们需要创建一个 ec2 模块并使用它来创建一个 ec2 实例(1 个或更多)+ ebs 设备/ebs 卷,并使用相同的 ec2 模块创建没有任何 ebs 卷的 ec2(1 个或更多)。
我通过条件(计数)尝试了它,但遇到了各种错误。帮助!
我们需要创建一个 ec2 模块并使用它来创建一个 ec2 实例(1 个或更多)+ ebs 设备/ebs 卷,并使用相同的 ec2 模块创建没有任何 ebs 卷的 ec2(1 个或更多)。
我通过条件(计数)尝试了它,但遇到了各种错误。帮助!
当尝试有条件地创建资源时,可以使用三元来计算count
参数。
几点注意事项:
count
时aws_instance.example
,aws_ebs_volume.ebs-volume-1
、 和aws_ebs_volume.ebs-volume-2
资源 将是数组。aws_volume_attachment
资源具有count
,您可以将它们视为迭代阵列以将卷附加到 EC2 实例。count.index
从 EC2 实例阵列和两个 EBS 卷资源中提取正确的项目。对于 count 的每个值,该块执行一次。variable "create_ebs" {
default = false
}
variable "instance_count" {
default = "1"
}
resource "aws_instance" "example" {
count = "${var.instance_count}"
ami = "ami-1"
instance_type = "t2.micro"
subnet_id = "subnet-1" #need to have more than one subnet
}
resource "aws_ebs_volume" "ebs-volume-1" {
count = "${var.create_ebs ? var.instance_count : 0}"
availability_zone = "us-east-1a" #use az based on the subnet
size = 10
type = "standard"
}
resource "aws_ebs_volume" "ebs-volume-2" {
count = "${var.create_ebs ? var.instance_count : 0}"
availability_zone = "us-east-1a"
size = 10
type = "gp2"
}
resource "aws_volume_attachment" "ebs-volume-1-attachment" {
count = "${var.create_ebs ? var.instance_count : 0}"
device_name = "/dev/sdf${count.index}"
volume_id = "${element(aws_ebs_volume.ebs-volume-1.*.id, count.index)}"
instance_id = "${element(aws_instance.example.*.id, count.index)}"
}
resource "aws_volume_attachment" "ebs-volume-2-attachment" {
count = "${var.create_ebs ? var.instance_count : 0}"
device_name = "/dev/sdg${count.index}"
volume_id = "${element(aws_ebs_volume.ebs-volume-2.*.id, count.index)}"
instance_id = "${element(aws_instance.example.*.id, count.index)}"
}
有关更多信息,count.index
您可以在Terraform 插值页面上搜索