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

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

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

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

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

EC2 Spot Instance interruption notice

Amazon EC2 がスポットインスタンスを中断しようとすると、実際の中断が起こる 2 分前にイベントが発生します (休止の場合は、即時的にその状態に移行するため、中断通知は発行されますが 2 分前には提供されず、このイベントの対象にはなりません)。このイベントは Amazon EventBridge で検出できます。EventBridge イベントの詳細については、「Amazon EventBridge ユーザーガイド」を参照してください。イベントルールの作成および使用方法の詳細な例については、「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-2a:instance/i-1234567890abcdef0"], "detail": { "instance-id": "i-1234567890abcdef0", "instance-action": "action" } }
注記

スポットインスタンスでの中断イベントの ARN 形式は arn:aws:ec2:availability-zone:instance/instance-id です。この形式は、EC2 リソース ARN 形式とは異なります。

instance-action

Amazon EC2 が、スポットインスタンスを停止または終了のためにマークした場合、インスタンスメタデータ内に instance-action 項目が含まれるようになります。そうでない場合、これは存在しません。次のように、インスタンスメタデータサービスバージョン 2 (IMDSv2) を使用して、instance-action を取得できます。

オペレーティングシステムのコマンドを使用します。

[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" http://169.254.169.254/latest/meta-data/spot/instance-action
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri 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 によって (中断動作が terminate に設定されているスポットインスタンスの中断により、または永続的なスポットインスタンスリクエストのキャンセルにより) 終了のマークが付けられた場合、termination-time の項目は、インスタンスのメタデータに含まれています。そうでない場合、これは存在しません。次のように、IMDSv2 を使用して termination-time を取得できます。

オペレーティングシステムのコマンドを使用します。

[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 termination_scheduled; fi
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/termination-time

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

2015-01-05T18:02:00Z

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

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