Условные выражения с Terraform, развертывающим ресурсы AWS

avatar
Dave Michaels
1 июля 2021 в 20:17
125
1
1

Моя текущая установка Terraform состоит из 3 файлов шаблонов. Каждый файл шаблона связан с ресурсом конфигурации запуска, который затем используется для запуска экземпляров посредством событий автоматического масштабирования. В каждом файле шаблона есть команда командной строки AWS, используемая для присоединения существующего тома EBS к новому экземпляру, запускаемому с помощью автомасштабирования. У меня возникли проблемы с написанием условного выражения для передачи переменной в эту команду AWS CLI, используемую для подключения определенного диска. Поскольку у меня есть 3 файла шаблона и 3 тома EBS, которые я хочу прикрепить к каждому экземпляру в своей собственной группе автомасштабирования, я не верю, что в моем условном выражении может быть более 2 выражений. Любые советы о том, как я могу добиться этого, будут полезны.

Файл_шаблона

data "template_file" "ML_10_user_data" {
count    = "${(var.enable ? 1 : 0) * var.number_of_zones}" // 3 templates
template = "${file("userdata.sh")}

  vars {
    ebs_volume = "${count.index == 0 ? vol-xxxxxxxxxxxxxxxxx : vol-xxxxxxxxxxxxxxxxx}" // how to include 3rd EBS volume?
  }
}

Userdata.sh

#!/bin/bash
aws ec2 attach-volume --volume-id ${EBS_VOLUME} --instance_id `curl http://169.254.169.254/latest/meta-data/instance-id` --device /dev/sdf

EBS_VOLUME=${ebs_volume}

Буду признателен за любые советы о том, как мне выполнить то, что я пытаюсь сделать.

Источник
ydaetskcoR
2 июля 2021 в 00:20
0

У вас есть 3 отдельных ASG и 3 отдельных шаблона запуска? Есть ли причина, по которой они являются ASG, а не обычными экземплярами, если вы просто выполняете ASG с одним экземпляром?

Dave Michaels
2 июля 2021 в 16:46
0

Приложение, которое мы размещаем в этой среде, рекомендует группы автоматического масштабирования.

ydaetskcoR
4 июля 2021 в 12:56
0

Есть ли какая-то причина для этого, если фактического автомасштабирования не происходит?

Ответы (1)

avatar
Marcin
2 июля 2021 в 00:18
1

Лучшим способом было бы поместить его в список:

variable "volumes" {
  default = ["vol-1111","vol-2222","vol-333"]
}

data "template_file" "user_data" {
  count    = "${(var.enable ? 1 : 0) * var.number_of_zones}"
  template = "${file("userdata.sh")}"

  vars {
    ebs_volume = "${var.volumes[count.index]}"
  }
}

Однако, если эти экземпляры должны находиться в ASG, это не очень хорошая схема. Экземпляры в ASG должны быть идентичными, взаимозаменяемыми и одноразовыми. Они могут быть остановлены в любое время AWS или действиями по масштабированию, и вы должны рассматривать эти экземпляры как группу, а не как отдельные объекты.