EC2 で StatusCheckFailed_System が発生した時に OS レベルの再起動では解決できない理由
結論
OS レベルの再起動では問題のある物理ホストが使用され続けるためです。
StatusCheckFailed_System とは
Amazon EC2 インスタンスのステータスチェック - Amazon Elastic Compute Cloud
EC2 インスタンスには 2 つのステータスチェック項目があります。
- StatusCheckFailed_System
- AWS 基盤 (ホスト) 側の問題
- StatusCheckFailed_Instance
- EC2 内部の問題
上記のうち、StatusCheckFailed_System が発生した場合の対応は以下の 2 つです。
- AWS が問題を解決するのを待つ
- EC2 インスタンスの停止/開始
ここでの注意点として、EC2 における「停止/開始」と「再起動」はイコールではない点です。
各操作については以下の API が該当します。
- 停止/開始
- 再起動
上記 API 名の通り、停止/開始は EC2 インスタンス自体をいったん停止 (stopped) してから開始する操作であるため、「Reboot」の再起動とは挙動が異なります。
EC2 における「停止/開始」と「再起動」の違いについては以下のドキュメントにまとまっており、StatusCheckFailed_System に関わる部分として「ホストコンピュータ」に関する挙動の違いがあります。
Amazon EC2 インスタンスの状態変更 - Amazon Elastic Compute Cloud
- 再起動
- インスタンスは同じホストコンピュータで保持される
- 停止/開始
- インスタンスは新しいホストコンピュータに移動される
- 場合によってはインスタンスが現在のホストに残ることもある
StatusCheckFailed_System が発生する原因は EC2 の物理ホストが原因である点は上述の通りです。
OS レベルの再起動では物理ホストが同じままであるため、StatusCheckFailed_System を自力で解消することはできません。
一方、「停止/開始」であればインスタンス開始時に基本的には物理ホストが移行されるため、StatusCheckFailed_System を自力で解消することができます。
以上より、EC2 で StatusCheckFailed_System が発生した時に OS レベルの再起動ではユーザー側で解決できないため、ユーザー側で可能なアクションとしては EC2 の「停止/開始」となります。
おまけ
ステータスチェックの確認方法については以下のブログをご参照ください。
EC2 インスタンスのステータスチェックが失敗する場合の原因と確認方法 | DevelopersIO
また、StatusCheckFailed_Instance についてはテストすることもできるため、テスト方法については以下のブログをご参照ください。
[小ネタ]StatusCheckFailedのテスト方法(Windows、Linux) | DevelopersIO
前提としてテストできるのは、インスタンスステータスのチェックのみです。システムステータスのチェックはAWSシステム側のステータスなので私たちでどうやってもステータスをいじることができません。
参考資料
- Amazon EC2 インスタンスのステータスチェック - Amazon Elastic Compute Cloud
- StopInstances - Amazon Elastic Compute Cloud
- StartInstances - Amazon Elastic Compute Cloud
- RebootInstances - Amazon Elastic Compute Cloud
- EC2 インスタンスのステータスチェックが失敗する場合の原因と確認方法 | DevelopersIO
- [小ネタ]StatusCheckFailedのテスト方法(Windows、Linux) | DevelopersIO
Discussion