Closed5

スポットインスタンスの中断通知を受けてスクリプトを実行する(インスタンスメタデータ編)

not75743not75743

EC2インスタンスメタデータを用いて、中断通知をうけたらスクリプトを実行する
簡素なスクリプトを使用するが、これを応用することで中断通知からのバックアップなどに使用することが出来る

not75743not75743

インスタンスメタデータ

インスタンスメタデータのinstance-actionを確認する
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/spot-instance-termination-notices.html

中断通知なし

中断通知なしのため、何も表示されない

$ TOKEN=`curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/spot/instance-action
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
		 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>

中断通知あり

この場合2023年6月9日10時27分17秒にスポットインスタンスが中断される

$ TOKEN=`curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/spot/instance-action
{"action":"terminate","time":"2023-06-09T01:27:17Z"}
not75743not75743

cloudtrail

  • SendSpotInstanceInterruptions:2分前通知
  • BidEvictedEvent:スポットインスタンス終了

なので概ねあってます。4秒オーバーかな?

not75743not75743

中断通知からアクションをする

中断通知を受けたら、停止予定時間をs3に投げるシェルスクリプト
中断通知を5秒間隔で確認し、ステータスコードが404(中断通知がない)であれば続行、200であればs3にファイルコピー

#!/bin/bash

export s3bucket="testbucket-20230609"

while true; do
  TOKEN=`curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
  response=$(curl -s -w "%{http_code}" -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/spot/instance-action)

  http_code=${response:(-3)}
  
  if [ "$http_code" == "200" ]; then
    instance_action=${response:0:${#response}-3}
    echo $instance_action > /tmp/instance-action.txt
    aws s3 cp /tmp/instance-action.txt s3://${s3bucket}/
    break
  fi
  sleep 5
done

結果


簡素なものであるが、中断通知からのアクションが出来たのでOK

このスクラップは2023/06/09にクローズされました