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