ALBにアタッチしたEC2インスタンスの監視&修復方法について~Auto Healing編~

雑多な備忘録です。Auto HealingやAuto Scalingのヘルスチェックについて書きました。
2022.04.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんばんは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

先日、ALBにアタッチしたEC2インスタンスの監視&修復について色々と考えることがありました。

この記事はその時の備忘録です。雑多な内容になってしまいましたがご了承ください。

そもそもEC2の監視&修復方法には

EC2インスタンスを監視&障害が発生したインスタンスを自動的に修復したいな〜と思って調べてみたところ、インスタンスの修復方法には"CloudWatchアラームを使用するパターン"と"Auto Scalingを使用するパターン"があります。

  • CloudWatchアラームを使用するパターン
    • 復旧
      • 通称"Auto Recovery"
      • AWS基盤側の障害に起因したアラーム(システムステータスのチェック)に応じてインスタンスの復旧を行う
    • 再起動
      • OSの再起動が実施される
  • Auto Scalingを使用するパターン
    • 通称"Auto Healing"
    • 厳密にはEC2インスタンス数の維持

この中でも今回はAuto Scalingを使用するパターンについて調べてみました。

Auto Scalingとは

Auto Scaling(Amazon EC2 Auto Scaling)とは、ユーザーが指定した条件と台数に基づいてインスタンス数をスケーリングする機能です。

インスタンスのサイズ(台数)は最小キャパシティと最大キャパシティの間でユーザー指定の条件をもとに調整されます。

参考:Amazon EC2 Auto Scaling とは - Amazon EC2 Auto Scaling (日本語)

Auto Healing

Auto Scalingのスケーリングを利用し、任意の数のEC2インスタンスを維持する手法をAuto Healingと呼びます。

このAuto Healingという呼称は最近のAuto Scalingの公式ドキュメントには登場しておらず、少し古いですが2017年のBlack Beltで紹介されています。(もし最近のドキュメントに登場していたらTwitter等で教えてください!)

AWS Black Belt Online Seminar 2017 Auto Scaling

最新のドキュメントでは下記がAuto Healingを指しています。

Auto Scaling group グループでの固定数のインスタンスの維持 - Amazon EC2 Auto Scaling (日本語)

上記ドキュメントにも書かれているように、固定数のインスタンスが必要な場合にはAuto Scalingグループの「最小キャパシティー」、「最大キャパシティー」、「希望するキャパシティー」に同じインスタンス数を設定します。

この設定を行うことで、指定した台数でインスタンス数が維持されます。

ちなみにこのAuto Healingは、異常が発生したインスタンスを再起動ではなく終了(削除)&新規作成されることで台数を維持します。

では、Auto Healingではどのような基準でインスタンスが正常/異常かを判別しているのでしょうか。

Auto Scalingにおけるインスタンスのヘルスチェック

Auto Healingで修復されるインスタンスはAuto Scalingでのヘルスチェックで"異常"と判断されたインスタンスです。

このAuto Scalingのヘルスチェックには3つの方式が存在します。 3つの方式を簡単にまとめました。

  • EC2ステータスチェック
    • インスタンスの状態がrunnning以外の場合、もしくはステータスimpairedの場合に異常とみなす。
    • 要するにインスタンス自体の状態確認を行う。
    • デフォルトで有効になっていて無効化出来ない。API経由でも無効化は出来ない。
  • ELBステータスチェック
    • ターゲットグループのヘルスチェックでunhealthyとなったインスタンスを異常とみなす。
    • デフォルトで無効。コンソール上からでもAPI経由でも有効化可能。
  • カスタムヘルスチェック
    • ユーザーが独自で用意したヘルスチェックシステムを使いたい場合のオプション
    • コンソール上からは設定出来ない。
    • AWS CLIやCDKなどでAPI経由で設定可能。

基本的にはEC2ステータスチェックが必ず行われ、そこにELBステータスチェックも追加することが出来ます。

ELBステータスチェックを追加した場合、EC2ステータスチェックかELBステータスチェックのどちらかが異常となった時点でAuto Scalingによってインスタンスの終了(削除)&新規作成が行われます。

参考:Auto Scaling インスタンスのヘルスチェック - Amazon EC2 Auto Scaling (日本語)

最後に

ALBを使用する場合のEC2インスタンスの監視→Auto Scaling→Auto Healing→Auto ScalingにおけるEC2インスタンスのヘルスチェック、となんだかあまりまとまりの無い記事になってしまいました。

記事としては割愛しましたが、個人的にAuto ScalingのヘルスチェックがELBヘルスチェックを追加した時に仕様通りの挙動をしてくれたのが非常に嬉しかったです。

ELBヘルスチェックでAuto Scalingが異常判定した際のコンソール画面を記念に貼っておきます。

ここまで読んでいただきありがとうございました。

以上、福岡オフィスのべこみんでした。

おすすめ参考ブログ

EC2の自動修復方法についてまとめてみた | DevelopersIO