[アップデート] Amazon EC2のスケジュールイベントにおいてユーザー主導でreboot migrationが可能になりました
しばたです。
先日AWSから「Announcing customer-initiated reboot migrations for EC2 Scheduled Events」というタイトルのアップデートが発表されました。
更新内容自体はシンプルではあるものの初見ではわかりにくいと思うので本記事で解説していきます。
Amazon EC2のスケジュールイベント
はじめに今回のアップデートはAmazon EC2のスケジュールイベントに関連する内容となります。
EC2のスケジュールイベント(予定されたイベント)はEC2基盤側のメンテナンス等を起因にAWSからEC2インスタンスに対し所定のイベントがスケジュールされることを指します。
具体的には次のイベントがスケジュールされることがあります。
| イベントタイプ | イベントコード | イベントアクション | 
|---|---|---|
| インスタンスの停止 | instance-stop | スケジュールされた時刻になると、インスタンスは停止します。再度起動すると、新しいホストに移行されます。Amazon EBS ルートボリュームを持つインスタンスに対してのみ適用されます。 | 
| インスタンスのリタイア | instance-retirement | スケジュールされた時刻に、インスタンスは Amazon EBS ルートボリュームがある場合は停止され、インスタンスストアルートボリュームがある場合は終了されます。 | 
| インスタンスの再起動 | instance-reboot | スケジュールされた時刻になると、インスタンスは再起動されます。インスタンスはホストに留まり、再起動中にホストのメンテナンスが実行されます。これはインプレース再起動(in-place reboot)と呼ばれます。 | 
| システムの再起動 | system-reboot | スケジュールされた時刻に、インスタンスが再起動され、新しいホストに移行されます。これは再起動移行(reboot migration)と呼ばれます。 | 
| システムメンテナンス | system-maintenance | スケジュールされた時刻になると、インスタンスはネットワークメンテナンスまたは電源のメンテナンスの影響を一時的に受ける場合があります。 | 
アップデート内容
今回のアップデートはこのうち「システムの再起動 (system-reboot)」に関連します。
EC2インスタンスに対し「インスタンスの再起動 (instance-reboot)」か「システムの再起動 (system-reboot)」がスケジュールされた場合にユーザーは以下のアクションを選ぶことができます。
- スケジュールが来るのを待つ
- 予定時刻になるとAWSによりEC2インスタンスが再起動されます
 
- リスケする
- 一定の範囲内でユーザーの都合の良い時間に再起動をリスケできます
- 参考 : 再起動がともなうAmazon EC2のスケジュールイベントの開始時間を変更出来る機能がリリースされました
 
- ユーザー自身で先に再起動する (ユーザー主導の再起動)
- ユーザー自身で都合の良い時間に先に再起動して対処する
 
従来ユーザー自身で先に再起動する場合、単純な再起動ではin-place rebootとなりインスタンスが同一ホストに留まり続けるためsystem-rebootに対応することができませんでした。
(system-rebootに対応するには明示して停止と起動を行いreboot migrationを行う必要がある)
今回のアップデートはこの点が改善され、「Nitro世代のインスタンスタイプにおいてシステムの再起動 (system-reboot)がスケジュールされた際にユーザー自身で先に再起動すると自動でreboot migrationが試行される」様になりました。
アップデートはGovCloud、中国リージョンを含む全リージョンに適用済みでデフォルトで有効化されています。
従来の挙動を維持したい場合[1]はEC2インスタンスに対し明示的な無効化が必要です。
非サポートとなる環境
本アップデートは次の環境では非サポートとなります。
- 非Nitro世代のインスタンスタイプ
- ベアメタルインスタンス
- Dedicated Hosts環境
- インスタンスストアボリュームを持つインスタンス
- Elastic Fabric Adapterを使っているインスタンス
- Auto Scaling group内のインスタンス
基本的に物理的に移行不可であったり移行する意味がない環境が自ずと非サポートになる感じですが、インスタンスストアボリュームの扱いに関しては注意が必要そうです。
確認方法
残念ながら都合よくスケジュールイベントは来ないので今回は各種設定の方法だけ紹介していきます。
AWS CLIはVer.2.27.19から本アップデートに対応しています。
対応インスタンスタイプの確認
今回のアップデートに対応するインスタンスタイプはマネジメントコンソールからだとEC2のインスタンスタイプ一覧画面のフィルターで「Reboot migration support = supported」の条件をつければ確認できます。

AWS CLIではaws ec2 describe-instance-typesコマンドのフィルターにName=reboot-migration-support,Values=supportedの条件をつけてやればOKです。
# ドキュメントにある実行例を転記
aws ec2 describe-instance-types \
    --filters "Name=reboot-migration-support,Values=supported" \
    --query "InstanceTypes[*].[InstanceType]" \
    --output text | sort
reboot migration設定の確認
設定値の確認はaws ec2 describe-instancesコマンドからできるらしい...のですが、今回私が試した限りでは確認できませんでした。
EC2インスタンスのMaintenanceOptionsプロパティに新たにRebootMigrationが増え確認できるはずでした。
# aws ec2 describe-instancesコマンドの結果に新たに RebootMigration が増えるはずだった...
$ aws ec2 describe-instances --instance-ids i-0abcdef1234567890  --query "Reservations[].Instances[]"
[
    {
        "Architecture": "arm64",
#       ・・・中略・・・
        "MaintenanceOptions": {
            "AutoRecovery": "default",
#           ↓ ここに RebootMigration プロパティが増えるらしい...
            "RebootMigration": "default"
        },
#       ・・・後略・・・
    }
]
AWS CLI以外の各種SDKのドキュメントを見る限り、このプロパティに対し
This setting only applies to supported instances that have a scheduled reboot event.
の注釈があったので実際にイベントがスケジュールされたときのみ確認可能なのかもしれません。
reboot migration設定の変更
設定変更はaws ec2 modify-instance-maintenance-optionsコマンドから可能です。
新たに増えた--reboot-migrationパラメーターの値を
- default: デフォルト設定(有効)
- disabled: 明示的な無効化
のいずれかで指定してやります。
# reboot-migrationを有効にする場合
aws ec2 modify-instance-maintenance-options \
    --instance-id i-0abcdef1234567890  \
    --reboot-migration default
# reboot-migrationを無効にする場合
aws ec2 modify-instance-maintenance-options \
    --instance-id i-0abcdef1234567890  \
    --reboot-migration disabled
このコマンド自体は特にエラーなく実行できましたが、前述の通り実際に設定が反映されているかは確認できませんでした。
こちらも実際にイベントがスケジュールされたときのみ有効である可能性があるのでご注意ください。
最後に
以上となります。
限定的な条件における挙動の変化ではありますが地味に便利なアップデートだと思います。
敢えてこの設定を無効化する理由も無いですしデフォルトの挙動が変わったくらいの認識をしておけば良いでしょう。
- 正直そんな場合は無いと思いますが... ↩︎ 










