При попытке условно создать ресурс вы можете использовать троичную для вычисления параметра count
.
Несколько замечаний:
- При использовании
count
,Ресурсы aws_instance.example
, aws_ebs_volume.ebs-volume-1
и aws_ebs_volume.ebs-volume-2
будут массивами. - При подключении томов EBS к экземплярам, поскольку ресурсы
aws_volume_attachment
имеют count
, их можно рассматривать какитерация массивов для присоединения тома к экземплярам EC2. - Вы можете использовать
count.index
, чтобы извлечь правильный элемент из массива экземпляров EC2 и двух ресурсов тома EBS.Для каждого значения счетчика блок выполняется один раз.
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