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

автоматическое присоединение тома EBS к спотовому экземпляру

Мне нужно постоянное хранилище для спотовых окончаний.

Мой подход к решению проблемы

  1. Напишите сценарий запуска, который подключает и монтирует постоянный том

  2. Сделайте снимок этого состояния и зарегистрируйте частный AMI

  3. Запускать спотовые инстансы на основе частного AMI

поиски в этом форуме [1] предполагает, что это правильная процедура

Мой сценарий запуска:

#!/bin/sh

echo "executing startup script"

# attach the EBS volume to this machine
aws ec2 attach-volume --volume-id vol-7bef1d96  --instance-id  $(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id ) --device /dev/xvdg

sleep  10

# mount the attached EBS volume
echo "mounting the  attached volume"
sudo mount /dev/xvdg1 /home/ubuntu/persistent/

#run script
echo "starting the  dummy program in background"
python2 persistent/dummyProgram.py &

Скрипт отлично работает, если его запустить вручную. Однако, когда он выполняется cron, выполняется только оператор echo

задача crontab

@reboot /path/to/startupScript.sh

Как мне решить эту проблему?

Исправленная запись в crontab гласит:

USER=username
PATH=content of $PATH
@reboot /path/to/startupScript.sh

Наиболее вероятная причина, по которой команды не запускаются при вызове из сценария crontab, заключается в том, что они не находятся в переменной среды PATH. Записи Crontab по умолчанию запускаются с минимальным набором переменных среды.

Пока cron определенно может выполнить свою работу, канонический способ сделать это - указать user-data скрипт, который запускается при запуске спотового экземпляра. С помощью интерфейса командной строки AWS request-spot-instance это указывается в JSON с помощью --launch-specification аргумент.

http://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html

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