

# スポットインスタンスの中断通知
<a name="spot-instance-termination-notices"></a>

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

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

この中断通知は、EventBridge イベントとして、およびスポットインスタンス上の[インスタンスメタデータ](ec2-instance-metadata.md)の項目として提供されます。中断通知はベストエフォートベースで出力されます。

## EC2 Spot Instance Interruption Warning イベント
<a name="ec2-spot-instance-interruption-warning-event"></a>

Amazon EC2 がスポットインスタンスを中断しようとすると、実際の中断が起こる 2 分前にイベントが発生します (休止の場合は即時的にその状態に移行するため、中断通知は発行されますが 2 分前には提供されず、このイベントの対象にはなりません)。このイベントは Amazon EventBridge で検出できます。EventBridge イベントの詳細については「[Amazon EventBridge ユーザーガイド](https://docs.aws.amazon.com/eventbridge/latest/userguide/)」を参照してください。イベントルールの作成および使用方法の詳細な例については[Taking Advantage of Amazon EC2 スポットインスタンスInterruption Notices](https://aws.amazon.com/blogs/compute/taking-advantage-of-amazon-ec2-spot-instance-interruption-notices/)を参照してください。

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

```
{
    "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 形式](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-resources-for-iam-policies)とは異なります。

## instance-action
<a name="instance-action-metadata"></a>

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

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

------
#### [ Linux ]

```
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
```

------
#### [ Windows ]

```
[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
```

------

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

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

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

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

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

## termination-time
<a name="termination-time-metadata"></a>

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

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

スポットインスタンスに、Amazon EC2 によって (中断動作が `terminate` に設定されているスポットインスタンスの中断により、または永続的なスポットインスタンスリクエストのキャンセルにより) 終了のマークが付けられた場合、`termination-time` の項目は[インスタンスのメタデータ](ec2-instance-metadata.md)に含まれています。そうでない場合、これは存在しません。次のように、IMDSv2 を使用して `termination-time` を取得できます。

------
#### [ Linux ]

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
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
```

------
#### [ Windows ]

```
[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
```

------

以下は出力の例です。

```
2015-01-05T18:02:00Z
```

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

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