AutorecoveryによるEC2の自動復旧

AWS

AWS上のEC2インスタンスに障害が発生した場合に自動的に復旧してくれる仕組みとして
「Autorecovery」というのものがあります。Cloudwatchのアラーム機能を使って実装できますが、
今回はその機能について紹介と設定していきます。

Auto Recoveryとは

基盤ハードウェアの障害、または修復に AWS の関与を必要とする問題が原因で、インスタンスが正常に機能しなくなった場合、インスタンスが自動的に復元されます。
また、基盤ハードウェアの障害は下記障害が該当します。

  • ネットワーク接続の喪失
  • システム電源の喪失
  • 物理ホストのソフトウェアの問題
  • ネットワーク到達可能性に影響する、物理ホスト上のハードウェアの問題

つまり、AWSの利用者側でどうすることもできない問題(AWS側の責任範囲での問題)が発生した場合の復旧方法として本機能があります。

仕組みとしてはCloudwatchのアラーム機能によりEC2インスタンスのステータスを監視し、上記障害が発生した場合に異常と検知することにより復旧してくれます。

Auto Recoveryの設定

対象のEC2インスタンスを選択し、[アクション] ⇒ [モニタリングとトラブルシューティング] ⇒ [CloudWatchアラームの管理]を選択。

アラームを新規作成します。
また、アラーム検知した場合に指定したメールに通知するために、SNSトピックも
作成します。(名前はAutorecover-testとします。)
アラームアクションは「復旧」とします。

Type of data to sampleには「ステータスチェックの失敗:システム」を選択。
※ちなみに「ステータスチェックの失敗:インスタンス」の場合はインスタンス内部(OS内部)での障害が発生した場合に動作します。
今回はインスタンス外部(AWS側のハードウェア)の障害に対応するため「ステータスチェックの失敗:システム」とします。

参考:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html

これでアラームの作成が完了です。
次は先ほど「アラーム通知」で指定した、Autorecover-testというトピックが作成されているかあAmazon SNSで確認します。

サブスクリプションを作成します。

プロトコルを「Eメール」にしてエンドポイントを「通知先のメールアドレス」を設定します。

通知先のメールアドレスにAWSからメールが届くので「Confirm subscription」を選択します。

正常にサブスクライブできるとSNSトピックのステータスが「保留中の確認」から「確認済み」に変わります。

以上で設定自体は完了です。

Auto Recoveryの動作確認

AutoRecoveryの動作確認をするためにはEC2のステータスチェックを失敗させる必要があります。
ただし、失敗させるためにはAWS側のハードウェアに障害発生させる必要があり敷居が高いです。
なので直接アラームの状態を”アラーム”状態に変更し、検知させてみます。

対象EC2またはCloudshellから下記コマンドを実行します。

aws cloudwatch set-alarm-state –alarm-name [アラーム名] –state-value ALARM –state-reason [適当な理由]

# aws cloudwatch set-alarm-state --alarm-name awsec2-i-0200317dd37e2f869-GreaterThanOrEqualToThreshold-StatusCheckFailed_System --state-value ALARM --state-reason Autorecovery-test

コマンド実行後、アラームの状態が下記の様になります。

アラームが検知したことをメールで受信できました。

ただし、本当にAWS側の障害が発生し、ステータスチェックが失敗しないと実際に復旧までしませんでした。
個人で確認できるのはここまでという感じです。

コメント

タイトルとURLをコピーしました