Amazon-Ec2

將 EBS 卷自動附加到 Spot 實例

  • August 25, 2015

我需要一些跨點終端的持久儲存。

我解決問題的方法是

  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

從 crontab 腳本呼叫命令時無法執行的最可能原因是它們不在 PATH 環境變數中。預設情況下,crontab 條目使用最少的環境變數集執行。

雖然cron肯定可以完成這項工作,但執行此操作的規範方法是指定一個user-data在啟動 Spot 實例時執行的腳本。對於 AWS CLI,request-spot-instance這是使用參數在 JSON 中指定的--launch-specification

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

此部分可以是一個小型 shell 腳本,允許您在必要時更改卷 ID,而不是將其硬編碼到 AMI 中。

引用自:https://serverfault.com/questions/716408