Установите network_interface для aws_instance, если count.index = 0, используя terraform

Я создаю 2 экземпляра ec2 с terraform, и я хочу дать вторичный IP-адрес первому экземпляру, который создает terraform.

Я использую ниже блок кода

resource "aws_network_interface" "floating_private" {
  subnet_id       = "${var.subnet_cluster_one}"
  private_ips_count = 2
}

resource "aws_instance" "instance_attrix_cluster_one" {
    count = 2
    instance_type = "${var.aws_instance_type}"
    ami = "${var.attrix_ami}"
    subnet_id = "${var.subnet_cluster_one}"
    security_groups = "${var.aws_security_groups}"
    key_name = "${var.ssh_key}"
    tags = "${merge(var.default_tags, map("Name", "${format("attrix%02d", 
count.index + 1)}-${var.env_name}"))}"
}

Я попытался добавить код ниже в блок "aws_instance"

network_interface = "${floating_private.id ? count.index == 0 : count.index >= 0}"

Однако я вижу ошибку ниже -

 Error reading config for aws_instance[instance_attrix_cluster_one]: floating_private.id: resource variables must be three parts: TYPE.NAME.ATTR in:

 ${floating_private.id ? count.index == 0 : count.index >= 0}

Как я могу установить атрибут network_interface, если count == 0?


person Aarat Nathwani    schedule 30.03.2018    source источник


Ответы (1)


Вместо того, чтобы создавать два настраиваемых ENI и присоединять их к первому экземпляру, я немного изменил подход, так что ENI по умолчанию создается с экземпляром, и мы присоединяем дополнительный ENI к созданию первого экземпляра после создания экземпляра.

Разрешите Terraform создать ENI по умолчанию для экземпляра, а затем создайте вложение для первого экземпляра. См. ниже.

resource "aws_network_interface" "floating_private" {
  subnet_id = "${data.aws_subnet.example.id}"
}

resource "aws_instance" "instance_attrix_cluster_one" {
  count         = 2
  instance_type = "t2.micro"
  subnet_id     = "${data.aws_subnet.example.id}"
  ami           = "${data.aws_ami.ubuntu.id}"

  tags {
      Name = "test-${count.index}"
  }
}

resource "aws_network_interface_attachment" "test" {
  instance_id          = "${element(aws_instance.instance_attrix_cluster_one.*.id, count.index)}"
  network_interface_id = "${element(aws_network_interface.floating_private.*.id, count.index)}"
  device_index         = "${count.index + 1}"
}

Немного изменен, чтобы провести небольшое тестирование на моей машине, но, надеюсь, вы уловили идею и сможете применить ее к своему решению.

person Nathan Smith    schedule 31.03.2018