自动将 EBS 卷附加到 Spot 实例

自动将 EBS 卷附加到 Spot 实例

我需要一些跨点终端的持久存储。

我解决问题的方法是

  1. 编写一个启动脚本来连接并挂载持久卷

  2. 对此状态进行快照并注册私有 AMI

  3. 基于私有 AMI 启动 Spot 实例

在此论坛中搜索 [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

答案1

从 crontab 脚本调用时命令无法运行的最可能原因是它们不在 PATH 环境变量中。默认情况下,crontab 条目使用一组最少的环境变量运行。

答案2

虽然cron肯定能完成工作,但规范的方法是指定user-data在启动 Spot 实例时运行的脚本。request-spot-instance使用 AWS CLI 的参数在 JSON 中指定--launch-specification

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

此部分可以是一个小的 shell 脚本,并允许您更改卷 ID是否有必要这样做,而不是将其硬编码到 AMI 中。

相关内容