Amazon-Ec2
將 EBS 卷自動附加到 Spot 實例
我需要一些跨點終端的持久儲存。
我解決問題的方法是
- 編寫附加和掛載持久卷的啟動腳本
- 快照此狀態並註冊私有 AMI
- 基於私有 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 中。