Можно ли подключить том AWS Multi-Attach EBS к группе автоматического масштабирования в Terraform?

Я создал том EBS, который могу присоединить к экземплярам EC2 с помощью Terraform, но не могу понять, как заставить EBS подключаться к EC2, созданному группой автомасштабирования. .

Код, который работает:

resource "aws_volume_attachment" "ebs_name" {
  device_name = "/dev/sdh"
  volume_id   = aws_ebs_volume.name.id
  instance_id = aws_instance.server.id
}

Код, который не работает:

resource "aws_volume_attachment" "ebs_name" {
  device_name = "/dev/sdh"
  volume_id   = aws_ebs_volume.name.id
  instance_id = aws_launch_template.asg-nginx.id
}

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

Изменить: я использую EBS с несколькими подключениями. Я могу вручную прикрепить его к нескольким созданным ASG экземплярам EC2, и он работает. Я просто не могу этого сделать с помощью Terraform.

Редактировать 2: я наконец остановился на записи user_data в Terraform, которая запускала сценарий bash командной строки AWS для присоединения EBS с несколькими подключениями.

Скрипт:

#!/bin/bash
[…aws keys here…]
aws ec2 attach-volume --device /dev/sdxx --instance-id `cat /var/lib/cloud/data/instance-id` --volume-id vol-01234567890abc
reboot

Terraform:

data "template_file" "shell-script" {
  template = file("path/to/script.sh")
}
data "template_cloudinit_config" "script_sh" {
  gzip = false
  base64_encode = true
  part {
    content_type = "text/x-shellscript"
    content      = data.template_file.shell-script.rendered
  }
}
resource "aws_launch_template" "template_name" {
  […]
  user_data = data.template_cloudinit_config.mount_sh.rendered
  […]
}

Риск здесь заключается в хранении ключей AWS пользователя в сценарии, но поскольку сценарий никогда не хранится на серверах, это не имеет большого значения. Любой, у кого есть доступ к user_data, уже имеет доступ к лучшим клавишам, чем тот, который вы используете здесь, ключи.


person Jared Earle    schedule 16.07.2020    source источник
comment
Это не работает. Если это сработает, что вы ожидаете, если ASG отключит экземпляр? Вы можете запускать приложения с отслеживанием состояния в ASG, но я бы не стал пытаться повторно использовать тома EBS.   -  person jordanm    schedule 16.07.2020
comment
Я использую EBS с несколькими подключениями, предназначенную для подключения к нескольким экземплярам EC2.   -  person Jared Earle    schedule 16.07.2020


Ответы (1)


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

Вместо этого вам следует подумать о добавлении ловушки жизненного цикла для ваша группа автомасштабирования.

Вы можете настроить тему на инициировать уведомление SNS, которое вызывает Lambda функция для присоединения к вашему новому экземпляру.

person Chris Williams    schedule 16.07.2020
comment
Похоже, это единственный способ, который сработает. Жалко, что нужно несколько страниц Terraform и около десятка ресурсов вместо одной строчки в ресурсе ASG, но это жизнь. Я подозреваю, что это связано с тем, что тома EBS подключаются из EBS, а не из EC2. - person Jared Earle; 17.07.2020