Terraform ec2 модуль с условным устройством ebs - PullRequest
0 голосов
/ 08 февраля 2019

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

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

1 Ответ

0 голосов
/ 11 февраля 2019

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

...