Terraform ec2 модуль с условным устройством ebs

У нас есть требование создать модуль ec2 и использовать его для создания экземпляров ec2 (1 или более) + том устройства /ebs, а также использовать тот же модуль ec2 для создания ec2 (1 или более) без любых томов ebs.

Я пробовал это с помощью условного (кол-во), но ударяя всевозможные ошибки. Помогите!

1 ответ

При попытке условно создать ресурс, вы можете использовать троичный для вычисления 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.

Другие вопросы по тегам