2015年1月9日金曜日

EC2スポットインスタンスのターミネート通知機能が利用できるようになったので、ちょっと試してみた。

AWS EC2 にはスポットインスタンスというちょっと変わった利用方法があります。
インスタンス起動時に価格を指定して起動することができます。通常オンデマンドより大幅に安い値段でインスタンスを起動できますが、スポット価格が指定した価格を上回った場合、突然インスタンスが停止してしまいます。

安く使えるのでいいのですが、突然止まってしまってあ゛っ!!!てなることがあります。そういう声も多いのか、インスタンスの停止を予告する機能が追加されました。

【AWS発表】EC2スポットインスタンスのターミネート通知機能

多分以下のような使い方をするのではないでしょうか?以下の例では、通知を受けたら自身のスナップショットを作成しています。他の使い方もあるかもしれません。

#!/bin/bash

#You Need Set Proper IAM Role
#GET REGION
REGION=`curl -s -f  http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//g'`

#Instance ID
InstanceID=`curl -s -f  http://169.254.169.254/latest/meta-data/instance-id`

#wait until the "temination-time" available
until curl -s -f  http://169.254.169.254/latest/meta-data/spot/termination-time
do
  sleep 5
done

#Warning all
wall "!!!!!!!!!!spot instance termination begin!!!!!!!!!"

#Wait a while for saving data etc.
sleep 30

#GET EBS
EBS=`aws ec2 describe-instances --region=${REGION} --output text --instance ${InstanceID} | awk '/^EBS/{print $5}'`

#GET snapshots
for II in $EBS ; do
  #the voodoo magic
  sync; sync; sync;
  aws ec2 create-snapshot --volume-id $II --region $REGION
done