Я хочу, чтобы мой постоянный том (ebs) был отделен от моей конфигурации запуска группы с автоматическим масштабированием. Чтобы он не был случайно автоматически удален терраформом или чем-то еще. Также я могу сделать что-нибудь вроде /mnt/taskname
так что у меня есть свой постоянный объем для каждой задачи, которой нужны данные.
Вот как, я думаю, это сработает.
Проблема в том, что это не сработает, потому что 1 не произойдет до тех пор, пока не появится 3 и 4 (я думаю), и я не совсем уверен, что 2 - правильный способ присоединить том.
Может, мне не стоит использовать изображение, оптимизированное для ecs? похоже, что это решит мою проблему, но тогда мне нужно было бы выяснить, что изменить изображение амазонки (базовое?), чтобы оно было настроено иначе, как изображение ecs? возможно есть другой способ прикрепить том, кроме aws
команда? может быть, какая-то другая магия, кроме той, которую я полностью рассматриваю?
Это частичный ответ, так как я все еще работаю над этим, во-первых, я использую простой AMI Amazon Linux, а не оптимизированный для ECS (который устарел ...)
data "template_file" "AttachVolume" {
template = "${file("cloudinit/attach_volume.sh")}"
vars {
volume = "${aws_ebs_volume.Nexus.id}"
}
}
data "template_cloudinit_config" "CloudInit" {
part {
filename = "fs.cfg"
content_type = "text/cloud-config"
content = "${file("cloudinit/fs.yml")}"
}
part {
filename = "attach_volume.sh"
content_type = "text/cloud-boothook"
content = "${data.template_file.AttachVolume.rendered}"
}
}
вот самая важная часть, attach_volume.sh
, который присоединит том, затем разделит его и при необходимости отформатирует.
#!/bin/sh
set -x
EC2_VOLUME_ID="${volume}"
EC2_INSTANCE_ID="`curl --silent http://169.254.169.254/latest/meta-data/instance-id`"
aws ec2 attach-volume --volume-id $EC2_VOLUME_ID --instance-id $EC2_INSTANCE_ID --device /dev/xvdh --region us-east-1
while [ ! -d /sys/block/xvdh ]; do sleep 1; done
if [ ! -d /sys/block/xvdh/xvdh1 ]; then
echo -e "g\nn\np\n1\n\n\nw" | fdisk /dev/xvdh
mkfs.ext4 /dev/xvdh1
fi
тогда мы можем использовать стандартную облачную конфигурацию для его монтирования
#cloud-config
---
mounts:
- [ xvdh, '/srv/nexus', 'auto', 'defaults,noexec', '0', '0' ]
runcmd:
- [ cloud-init-per, instance, chmod, chmod, 1777, /srv/nexus ] # make like temp, then docker can write whatever user directories in their
- [ cloud-init-per, instance, docker, service, docker, start ] # start docker
- [ cloud-init-per, instance, ecs, start, ecs ] # start ecs