Amazon EC2 Auto Scaling が正常でないインスタンスを終了させなかったのはなぜですか。

最終更新日: 2022 年 7 月 20 日

Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling グループを設定しましたが、異常な Amazon EC2 インスタンスが終了されません。どうすれば解決できますか。

簡単な説明

Amazon EC2 Auto Scaling は、Amazon EC2 ステータスチェックおよび Elastic Load Balancing (ELB) ヘルスチェックを使用して、インスタンスの健康状態を自動的に判断することができます。Amazon EC2 Auto Scaling グループのすべてのスケーリングのアクションは、Amazon EC2 コンソールのアクティビティー履歴に記録されます。時には、アクティビティー履歴だけでは、Amazon EC2 Auto Scaling が正常でないインスタンスを停止しなかった理由を判断できないことがあります。

Amazon EC2 コンソールで、正常でないインスタンスの状態の詳細について調べ、インスタンスを停止する方法を見つけます。以下の設定を確認します。

  • ヘルスチェックの猶予期間
  • 中断したプロセス
  • EC2 コンソールでのインスタンスの状態
  • Auto Scaling グループでのインスタンスの状態
  • ELB ヘルスチェック

解決方法

まず、Amazon EC2 Auto Scaling でのインスタンスの状態を確認します。

  1. [Amazon EC2 console] にサインインします。ナビゲーションペインの [Auto Scaling] の下で、[Auto Scaling グループ] を選択してから、インスタンスのグループを選択します。
  2. [Instances] ビューを選択して、インスタンスのヘルス状態を確認します。

ヘルスチェックの猶予期間

Amazon EC2 Auto Scaling は、ヘルスチェックの猶予期間が終了するまで、EC2 ステータスチェックおよび ELB ヘルスチェックに基づいてサービスを開始したインスタンスを停止しません。猶予期間の長さを調べる方法

  1. Amazon EC2 コンソールのナビゲーションペインで、[Auto Scaling] の [Auto Scaling グループ] を選択してから、インスタンスのグループを選択します。
  2. [Details] ビューを選択して、ヘルスチェックの猶予期間の長さを確認します。

停止したプロセス

プロセスが「HealthCheck」、「ReplaceUnhealthy」、「Terminate」などの中断状態にあると、Amazon EC2 Auto Scaling が正常でないインスタンスを検出、置換、停止できる能力に影響します。

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling]の下で、[Auto Scaling Groups] (Auto Scaling グループ) を選択してから、インスタンスのグループを選択します。
  2. [Details] (詳細) ビューを選択します。
  3. [Edit] (編集) を選択して、[Suspended Processes] (停止したプロセス) から、状態が [HealthCheck] (ヘルスチェック)、[ReplaceUnhealthy] (不健康なものを入れ替える)、[Terminate] (終了) のいずれかであるプロセスを削除します (存在する場合)。
  4. [Save] (保存) を選択して、プロセスを再開します。

Amazon EC2 コンソールでのインスタンスの状態

Amazon EC2 Auto Scaling は、状態が「Impaired」であるインスタンスはすぐには停止しません。その代わりに、Amazon EC2 Auto Scaling は数分の間、インスタンスが回復するのを待ちます。インスタンスに障害があるか確認する方法

  1. Amazon EC2 コンソールのナビゲーションペインの [Instances] (インスタンス) の下で、[Instances] (インスタンス) を選択してから、インスタンスを選択します。
  2. [Status Checks] (ステータスチェック) ビューを選択し、インスタンスの状態が [Impaired] (障害) であるか確認します。

Amazon EC2 Auto Scaling は、ステータスチェックのためのデータ報告に失敗したインスタンスの終了を遅らせたり、終了させないこともあります。これは、通常、Amazon CloudWatch のステータスチェックのメトリクスのデータが不十分である場合に発生します。これらのインスタンスを手動で終了する方法

  1. Amazon EC2 コンソールのナビゲーションペインの [Instances] の下で、[Instances] を選択してから、インスタンスを選択します。
  2. [Monitoring] ビューを選択して、インスタンスの状態を確認します。
  3. 状態が [Insufficient Data] であるなら、再度インスタンスを選択し、[Actions] メニューを選択して、[Instance State] を選択してから [Terminate] を選択します。

Auto Scaling グループでのインスタンスの状態

Amazon EC2 Auto Scaling は、「Standby」状態のインスタンスに対してはヘルスチェックを実行しません。「Standby」状態のインスタンスを「InService」状態に戻す方法

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling グループ] の下で、インスタンスグループを選択してから、[Instances] ビューを選択します。
  2. フィルタメニュー [Any Lifecycle State] を選択してから、[Standby] を選択します。
  3. ヘルスチェックを再開するには、インスタンスのコンテキストメニューを開いて (右クリックで)、[Set to InService] (InService に設定) を選択することで、Standby 状態を終了させます。

Amazon EC2 Auto Scaling は、インスタンスがライフサイクルフックが完了するのを待っている間は、インスタンスを停止させるのを待ちます。ライフサイクルの状態を調べて、ライフサイクルフックを完了させるには :

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling] の下で、[Auto Scaling Groups] (Auto Scaling グループ) を選択してから、インスタンスのグループを選択します。
  2. [Instances] (インスタンス) ビューを選択して、インスタンスのライフサイクル状態を確認します。
  3. 状態が terminating:wait であるなら、ハートビートのタイムアウトをチェックしてから、completing-lifecycle-action を実行してライフサイクルフックを完了させることができます。

Amazon EC2 Auto Scaling が、ELB 接続のドレイン期間が完了するのを待っている場合は、インスタンスを停止させるのを待ちます。

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling] の下で [Auto Scaling Groups] (Auto Scaling グループ) を選択してから、インスタンスのグループを選択します。
  2. [Instances] (インスタンス) ビューを選択し、インスタンスのライフサイクル停止中であることを確認します。
  3. [Activity History] ビューを選択します。
  4. フィルタについては、[Waiting for ELB connection draining] を選択して、グループがインスタンスの停止を待っているか確認します。

ELB ヘルスチェック

ELB の設定は、ヘルスチェックとインスタンスの置換に影響する可能性があります。ELB コンソールでインスタンスの状態を確認します。

  1. Amazon EC2 コンソールのナビゲーションペインの [Load Balancing] (ロードバランシング) で、[Load Balancers] (ロードバランサー) を選択してから、インスタンスを登録するロードバランサーを選択します。
  2. [Instances] (インスタンス) ビューを選択し、インスタンスの状態と説明を確認します。

グループのヘルスチェック設定が EC2 に設定されている場合、Amazon EC2 Auto Scaling はインスタンスのヘルス状態を決定するのに ELB ヘルスチェックの結果を使用しません。その結果、Amazon EC2 Auto Scaling は、ELB ヘルスチェックに失敗したインスタンスを停止させません。インスタンスのステータスが ELB コンソールでは「OutofService」であるが、Amazon EC2 Auto Scaling コンソールでは「Healthy」である場合、ヘルスチェックのタイプが「ELB」に設定されているか確認します。

  1. Amazon EC2 コンソールのナビゲーションペインで、[Auto Scaling] の [Auto Scaling グループ] を選択してから、インスタンスのグループを選択します。
  2. [Details] (詳細) ビューを選択して、ヘルスチェックのタイプを確認します。
  3. [Edit] (編集) を選択し、ヘルスチェックのタイプに対して [ELB] を選択してから、[Save] (保存) を選択します。

グループのヘルスチェックのタイプが、すでに ELB であるのに、ELB コンソールでインスタンスの状態が OutofService であるなら、前に確認した状態の説明を使って、以後のステップを決定します。

  • インスタンスの登録が進行中である場合: ロードバランサーがインスタンスの登録を完了し、インスタンスが InService 状態になるのを待ちます。
  • インスタンスが存在している Amazon EC2 アベイラビリティーゾーンで、ロードバランサーによるトラフィックのルーティングが設定されていない場合: Auto Scaling グループまたはロードバランサーのサブネットを編集して、インスタンスのサブネットと同じにします。
  • インスタンスが、設定された HealthyThreshold の回数のヘルスチェックに連続して合格していない場合: ELB がヘルスチェックを完了し、インスタンスが InService 状態になるのを待ちます。