Назад | Перейти на главную страницу

Как прикрепить, отформатировать и смонтировать том при загрузке в ecs?

Я хочу, чтобы мой постоянный том (ebs) был отделен от моей конфигурации запуска группы с автоматическим масштабированием. Чтобы он не был случайно автоматически удален терраформом или чем-то еще. Также я могу сделать что-нибудь вроде /mnt/taskname так что у меня есть свой постоянный объем для каждой задачи, которой нужны данные.

Вот как, я думаю, это сработает.

  1. установить aws-cli по какой-то причине он отсутствует (пакеты в облачной инициализации), что происходит поздно?
  2. используйте команду aws, чтобы прикрепить том
  3. отформатируйте том с помощью fs_setup в облачной инициализации
  4. смонтировать разделы с помощью монтирования в облаке init

Проблема в том, что это не сработает, потому что 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