

# EC2 インスタンスの再調整に関する推奨事項
<a name="rebalance-recommendations"></a>

EC2 インスタンスの*再調整に関するレコメンデーション*はスポットインスタンスで中断のリスクが高まった場合に通知するためのシグナルです。シグナルは[スポットインスタンス中断 2 分前の通知](spot-instance-termination-notices.md)よりも早く到着するので、スポットインスタンスを事前に管理するタイミングを知ることができます。ワークロードを、中断のリスクが高くない新規または既存の スポットインスタンス に再調整することができます。

2 分間のスポットインスタンス中断通知の前に、Amazon EC2 が再調整に関する推奨事項シグナルを送信することは必ずしも可能ではありません。したがって、再調整に関する推奨事項シグナルは2 分間の中断通知とともに到着する可能性があります。

再調整に関する推奨事項はEventBridge イベントとして、およびスポットインスタンス上の[インスタンスメタデータ](ec2-instance-metadata.md)の項目として使用できます。イベントはベストエフォートベースで発生します。

**注記**  
再調整に関する推奨事項は2020 年 11 月 5 日 00:00 UTC 以降に起動される スポットインスタンス のみをサポートしています。

**Topics**
+ [実行できるアクションの再調整](#rebalancing-actions)
+ [再調整に関する推奨事項シグナルのモニタリング](#monitor-rebalance-recommendations)
+ [再調整に関する推奨事項シグナルを使用するサービス](#services-using-rebalance-rec-signal)

## 実行できるアクションの再調整
<a name="rebalancing-actions"></a>

以下に、実行可能な再調整アクションをいくつか挙げます。

適切なシャットダウン  
スポットインスタンスの再調整に関する推奨事項シグナルを受信すると、インスタンスのシャットダウン手順を開始できます。この際、インスタンスを停止する前に各プロセスの完了を確認する必要が生じることがあります。例えば、システムログまたはアプリケーションログを Amazon Simple Storage Service (Amazon S3) にアップロードしたり、Amazon SQS ワーカーをシャットダウンしたり、ドメインネームシステム (DNS) からの登録解除を完了したりできます。また、作業内容を外部ストレージに保存し、後で再開することもできます。

新しい作業がスケジュールされるのを防止  
スポットインスタンスの再調整に関する推奨事項シグナルを受信すると、スケジュールされた作業が完了するまでインスタンスの使用を継続しながら、新しい作業がインスタンス上でスケジュールされることを回避できます。

新しい代替インスタンスを積極的に起動  
Auto Scaling グループ、EC2 フリート、または スポットフリート を設定しておくと、再調整に関する推奨事項シグナルが送信された場合に、代替のスポットインスタンスを自動的に起動させることができます。詳細については「*Amazon EC2 Auto Scaling ユーザーガイド*」の「[キャパシティーの再調整を使用して Amazon EC2 スポットの中断に対処する](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)」およびこのユーザーガイドの「[EC2 フリートとスポットフリートでキャパシティの再調整を使用して、リスクのあるスポットインスタンスを置き換える](ec2-fleet-capacity-rebalance.md)」を参照してください。

## 再調整に関する推奨事項シグナルのモニタリング
<a name="monitor-rebalance-recommendations"></a>

再調整に関する推奨事項シグナルをモニタリングして、それが発されたときに、前のセクションで指定したアクションを実行できるようにすることができます。再調整に関する推奨事項シグナルはAmazon EventBridge (旧称 Amazon CloudWatch Events) に送信されるイベントとして、およびスポットインスタンス上のインスタンスメタデータとしての使用が可能です。

**Topics**
+ [Amazon EventBridge の使用](#cp-eventbridge)
+ [インスタンスメタデータの使用](#cp-instance-metadata)

### Amazon EventBridge の使用
<a name="cp-eventbridge"></a>

再調整に関する推奨事項シグナルがスポットインスタンスに対して発信されると、そのシグナルのイベントが Amazon EventBridge に送信されます。EventBridge がルールで定義されているパターンに一致するイベントパターンを検出すると、EventBridge はルールで指定されているターゲットを呼び出します。

次に、再調整に関する推奨事項シグナルのイベント例を示します。

```
{
    "version": "0",
    "id": "{{12345678-1234-1234-1234-123456789012}}",
    "detail-type": "EC2 Instance Rebalance Recommendation",
    "source": "aws.ec2",
    "account": "{{123456789012}}",
    "time": "{{yyyy}}-{{mm}}-{{dd}}T{{hh}}:{{mm}}:{{ss}}Z",
    "region": "{{us-east-2}}",
    "resources": ["arn:aws:ec2:{{us-east-2}}:{{123456789012}}:instance/{{i-1234567890abcdef0}}"],
    "detail": {
        "instance-id": "{{i-1234567890abcdef0}}"
    }
}
```

次のフィールドはルールで定義されているイベントパターンになります。

`"detail-type": "EC2 Instance Rebalance Recommendation"`  
イベントが再調整に関する推奨事項イベントであることを特定します

`"source": "aws.ec2"`  
イベントが Amazon EC2 からのものであることを特定します

#### EventBridge ルールを作成します
<a name="cp-eventbridge-rule"></a>

EventBridge ルールを作成し、イベントパターンがルールに一致したときに実行するアクションを自動化できます。

次の例ではAmazon EC2 が再調整に関する推奨事項シグナルを発するたびに、E メール、テキストメッセージ、またはモバイルプッシュ通知を送信する EventBridge ルールを作成します。シグナルは `EC2 Instance Rebalance Recommendation` イベントとして発され、ルールによって定義されたアクションがトリガーされます。

EventBridge ルールを作成する前に、E メール、テキストメッセージ、またはモバイルプッシュ通知用の Amazon SNS トピックを作成する必要があります。

**再調整に関する推奨事項イベントの EventBridge ルールを作成するには**

1. Amazon EventBridge コンソールの [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) を開いてください。

1. [**Create rule**] を選択してください。

1. **[Define rule detail]** (詳細の定義) で、次の操作を行います。

   1. ルールの [**Name (名前)**] を入力し、必要に応じて説明を入力してください。

      ルールには同じリージョン内および同じイベントバス上の別のルールと同じ名前を付けることはできません。

   1. **[イベントバス]** として、**[デフォルト]** を選択してください。アカウント内の AWS のサービスで生成されたイベントは常に、そのアカウントのデフォルトのイベントバスに送られます。

   1. **[ルールタイプ]** で、**[イベントパターンを持つルール]** を選択してください。

   1. [**Next**] を選択してください。

1. **[Build event pattern]** (イベントパターンの作成) で、次の操作を行います。

   1. **[Event source]** (イベントソース) で、**[AWS events or EventBridge partner events]** ( イベントまたは EventBridge パートナーイベント) を選択してください。

   1. この例では **[Event pattern]** (イベントパターン) で、`EC2 Instance Rebalance Recommendation` イベントと一致するように次のイベントパターンを指定してから、**[Save]** (保存) を選択してください。

      ```
      {
       "source": ["aws.ec2"],
       "detail-type": ["EC2 Instance Rebalance Recommendation"]
      }
      ```

      イベントパターンを追加するには以下のように **[Event pattern form]** (イベントパターンフォーム) を選択してテンプレートを使用するか、**[Custom pattern (JSON editor)]** (カスタムパターン (JSON エディター)) を選択して独自のパターンを指定します。

      1. テンプレートを使用してイベントパターンを作成するには以下の操作を行います。

         1. **[Event pattern form]** (イベントパターンフォーム) を選択してください。

         1. **[イベントソース]** で、**[AWS のサービス]** を選択してください。

         1. **[AWS Service]** ( サービス) で、**[EC2 Spot Fleet]** (EC2 スポットフリート) を選択してください。

         1. **[Event type]** (イベントタイプ) で、**[EC2 Instance Rebalance Recommendation]** (EC2 インスタンスのリバランスに関するレコメンデーション) を選択してください。

         1. テンプレートをカスタマイズするには**[Edit pattern]** (パターンを編集) を選択した上で、この例のイベントパターンに合わせた変更を行います。

      1. (代替案) 以下の操作を行って、カスタムイベントパターンを指定します。

         1. **[Custom pattern (JSON editor)]** (カスタムパターン (JSON エディター)) を選択してください。

         1. **[Event pattern]** (イベントパターン) ボックスに、この例のイベントパターンを追加します。

   1. [**Next**] を選択してください。

1. **[Select target(s)]** (ターゲットを選択) で、以下の操作を行います。

   1. **[ターゲットタイプ]** で、**[AWS のサービス]** を選択してください。

   1. イベントの発生時に E メール、テキストメッセージ、またはモバイルプッシュ通知を送信するために、**[Select a target]** (ターゲットを選択) で、**[SNS topic]** (SNS トピック) を選択してください。

   1. [**Topic (トピック)**] で、既存のトピックを選択してください。先ず、Amazon SNS コンソールを使用して Amazon SNS トピックを作成する必要があります。詳細については、[Amazon Simple Notification Service デベロッパーガイド](https://docs.aws.amazon.com//sns/latest/dg/sns-user-notifications.html) の*Amazon SNS を使用した Application-to-Person (A2P) メッセージング*を参照してください。

   1. (オプション) **[Additional settings]** (追加設定) で、その他の設定を行うこともできます。詳細については、「*Amazon EventBridge ユーザーガイド*」の「[イベントに反応する Amazon EventBridge ルールの作成](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-create-rule.html)」(ステップ 16) を参照してください。

   1. [**Next**] を選択してください。

1. (オプション) 必要な場合は、**[Tags]** (タグ) で 1 つ以上のタグを作成したルールに割り当て、**[Next]** (次へ) を選択してください。

1. **[Review and create]** (確認して作成) で、以下の操作を行いす。

   1. ルールの詳細を確認し、必要な場合は変更を行います。

   1. **ルールの作成**を選択してください。

詳細については「Amazon EventBridge ユーザーガイド**」の「[Amazon EventBridge ルール](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)」と「[Amazon EventBridge イベントパターン](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)」を参照してください。

### インスタンスメタデータの使用
<a name="cp-instance-metadata"></a>

インスタンスメタデータカテゴリ `events/recommendations/rebalance` はスポットインスタンスに対して再調整に関する推奨事項シグナルが発されたおおよその時間 (UTC) を示します。

再調整に関する推奨事項シグナルを 5 秒ごとに確認し、再調整に関する推奨事項に基づいて行動する機会を見逃さないようにすることをお勧めします。

スポットインスタンスが受信した、再調整に関する推奨事項ではそのシグナルが発行された時刻がインスタンスメタデータに含まれています。信号が発された時間は以下のように取得できます。

------
#### [ IMDSv2 ]

**Linux**  
次のコマンドを Linux インスタンスから実行します。

**IMDSv2**

```
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/events/recommendations/rebalance
```

**Windows**  
次のコマンドレットを Windows インスタンスから実行します。

```
[string]$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

------
#### [ IMDSv1 ]

**Linux**  
次のコマンドを Linux インスタンスから実行します。

```
curl http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

**Windows**  
次のコマンドレットを Windows インスタンスから実行します。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

------

次に、再調整に関する推奨事項シグナルがスポットインスタンスに対して送信された時刻を、UTC で表示する出力例を示します。

```
{"noticeTime": "2020-10-27T08:22:00Z"}
```

インスタンスに対してシグナルが送信されていない場合、`events/recommendations/rebalance` は存在せず、取得しようとすると HTTP 404 エラーが表示されます。

## 再調整に関する推奨事項シグナルを使用するサービス
<a name="services-using-rebalance-rec-signal"></a>

Amazon EC2 Auto Scaling、EC2 フリート、およびスポットフリートにおいて再調整に関する推奨事項シグナルを使用することで、ワークロードの可用性を維持しやすくなります。実行中のインスタンスがスポットインスタンス中断 2 分前の通知を受信していない段階から、事前にフリートを新しいスポットインスタンスで強化することができます。このようなサービスではスポットインスタンス の可用性に影響する変更を事前にモニタリングし、対応させることができます。詳細については次を参照してください:
+ 「*Amazon EC2 Auto Scaling ユーザーガイド*」の「[キャパシティーの再調整を使用して Amazon EC2 スポットの中断に対処する](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)」
+ このユーザーガイドの EC2 フリートとスポットフリートのトピックの [EC2 フリートとスポットフリートでキャパシティの再調整を使用して、リスクのあるスポットインスタンスを置き換える](ec2-fleet-capacity-rebalance.md)