スポットインスタンスの中断通知 - Amazon Elastic Compute Cloud

スポットインスタンスの中断通知

スポットインスタンスの中断通知は、Amazon EC2 がスポットインスタンスを停止または終了する 2 分前に発行される警告です。中断動作として休止状態を指定した場合は、中断通知が表示されますが、休止状態プロセスはすぐに開始されるため、2 分間の警告は表示されません。

スポットインスタンスの中断を適切に処理する最善の方法は、耐障害性のあるアプリケーションを設計することです。これを実現するには、スポットインスタンスの中断通知を活用します。中断通知は 5 秒ごとに確認することをお勧めします。

この中断通知は、CloudWatch イベントとして、またスポットインスタンス上のインスタンスメタデータの項目としての使用が可能です。中断通知は、ベストエフォートベースで出力されます。

EC2 Spot Instance interruption notice

Amazon EC2 がスポットインスタンスを中断しようとすると、実際の中断が起こる 2 分前にイベントが発生します (休止の場合は、即時的にその状態に移行するため、中断通知は発行されますが 2 分前には提供されず、このイベントの対象にはなりません)。このイベントは Amazon CloudWatch Events で検出できます。CloudWatch Eventsの詳細については、「Amazon CloudWatch Events ユーザーガイド」を参照してください。イベントルールの作成および使用方法の詳細な例については、「Taking Advantage of Amazon EC2 スポットインスタンスInterruption Notices」を参照してください。

以下に、スポットインスタンスでの中断イベントの例を示します。instance-action の可能な値は hibernatestopterminate です。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Spot Instance Interruption Warning", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-2", "resources": ["arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890abcdef0"], "detail": { "instance-id": "i-1234567890abcdef0", "instance-action": "action" } }

instance-action

Amazon EC2 が、スポットインスタンスを停止または終了のためにマークした場合、インスタンスメタデータ内に instance-action 項目が含まれるようになります。そうでない場合、これは存在しません。instance-action は以下のように取得できます。

IMDSv2
[ec2-user ~]$ TOKEN=`curl -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" -v http://169.254.169.254/latest/meta-data/spot/instance-action
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/spot/instance-action

instance-action 項目は、アクションおよびアクションのおよその発生時刻 (UTC) を指定します。

次の出力例では、このインスタンスの停止時刻を示します。

{"action": "stop", "time": "2017-09-18T08:22:00Z"}

次の出力例では、このインスタンスの終了時刻を示します。

{"action": "terminate", "time": "2017-09-18T08:22:00Z"}

Amazon EC2 がインスタンスを停止または終了する準備をしていない場合や、お客様が自分でインスタンスを終了した場合、instance-action はインスタンスメタデータ内に存在せず、取得しようとした場合、HTTP 404 エラーが出力されます。

termination-time

この項目は下位互換性のために維持されています。代わりに instance-action を使用してください。

Amazon EC2 がスポットインスタンスを終了のためにマークした場合は、termination-time 項目がインスタンスメタデータ内に含まれるようになります。そうでない場合、これは存在しません。termination-time は以下のように取得できます。

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` [ec2-user ~]$ if curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo terminated; fi
IMDSv1
[ec2-user ~]$ if curl -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo terminated; fi

termination-time 項目は、インスタンスがシャットダウン信号を受信するおよその時刻 (UTC) を指定します。以下は出力例です。

2015-01-05T18:02:00Z

Amazon EC2 がインスタンスを終了する準備をしていない場合や、ユーザーがスポットインスタンスを終了した場合には、termination-time 項目はインスタンスメタデータ内に存在しない (この場合、HTTP 404 エラーが出力されます) か、時刻値以外の値が含まれます。

Amazon EC2 がインスタンスの終了に失敗した場合は、リクエストステータスが fulfilled に設定されます。termination-time 値は、元のおよその時刻のまま (過去の時刻になっていますが)、インスタンスのメタデータに残ります。