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

最終更新日: 2018 年 6 月 13 日

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 コンソールにサインインします。ナビゲーションペインの [Auto Scaling] で、[Auto Scaling グループ] を選択してから、インスタンスグループを選択します。
  2. [インスタンス] ビューを選択し、インスタンスのヘルス状態を書き留めます。

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

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

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

停止されたプロセス

HealthCheck、ReplaceUnhealthy、または Terminate などのプロセスの停止は、異常なインスタンスを検出、置換、または終了する Amazon EC2 Auto Scaling の機能に影響します。

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling] で、[Auto Scaling グループ] を選択してから、インスタンスグループを選択します。
  2. [詳細] ビューを選択します。
  3. [編集] を選択し、HealthCheckReplaceUnhealthy、または Terminate プロセスが存在する場合は、それらを [中断されたプロセス] から削除します。
  4. [保存] を選択してプロセスを再開します。

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

Amazon EC2 Auto Scaling は、ステータスが [障害] のインスタンスをすぐに終了しません。代わりに、Amazon EC2 Auto Scaling はインスタンスが復旧するまで数分待ちます。インスタンスに障害が発生しているかどうかを確認する方法:

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

また、Amazon EC2 Auto Scaling は、ステータスチェックのデータをレポートできないインスタンスを遅延または終了しない場合があります。これは通常、Amazon CloudWatch のステータスチェックメトリクスのデータが不足している場合に発生します。これらのインスタンスを手動で終了する方法:

  1. Amazon EC2 コンソールのナビゲーションペインの [インスタンス] で、[インスタンス] を選択してから、インスタンスを選択します。
  2. [モニタリング] ビューを選択し、インスタンスのステータスを書き留めます。
  3. ステータスが [不十分なデータ] の場合は、インスタンスを再度選択し、[アクション] メニューを選択して、[インスタンス状態]、[終了] を選択します。

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

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

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling グループ] で、インスタンスグループを選択してから、[インスタンス] ビューを選択します。
  2. フィルターメニューの [ライフサイクルの状態] を選択し、次に [スタンバイ] を選択します。
  3. ヘルスチェックを再開するには、インスタンスのコンテキスト (右クリック) メニューを開き、[InService に設定] を選択します。これにより、スタンバイ状態が終了します。

Amazon EC2 Auto Scaling は、ライフサイクルフックが完了するのを待っている場合、インスタンスの終了を待ちます。ライフサイクルステータスを検索してライフサイクルフックを完了する方法:

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling] で、[Auto Scaling グループ] を選択してから、インスタンスグループを選択します。
  2. [インスタンス] ビューを選択し、インスタンスの [ライフサイクル] ステータスを書き留めます。
  3. ステータスが terminating:wait の場合、ハートビートタイムアウトを確認してから、completeing-lifecycle-action を実行してライフサイクルフックを完了することができます。

Amazon EC2 Auto Scaling は、ELB Connection Draining 期間が完了するのを待っている場合、インスタンスの終了を待ちます。

  1. Amazon EC2 コンソールのナビゲーションペインの [Auto Scaling] で、[Auto Scaling グループ] を選択してから、インスタンスグループを選択します。
  2. [インスタンス] ビューを選択し、インスタンスの [ライフサイクル] が [終了] していることを確認します。
  3. [アクティビティ履歴] ビューを選択します。
  4. [フィルター] で、[ELB Connection Draining の待機中] を選択して、グループがインスタンスの終了を待機しているかどうかを確認します。

ELB ヘルスチェック

ELB 設定は、ヘルスチェックとインスタンスの置き換えに影響する可能性があります。ELB コンソールでのインスタンスのステータスを書き留めます。

  1. Amazon EC2 コンソールのナビゲーションペインで、[Load Balancing] の [ロードバランサー] を選択し、インスタンスが登録されているロードバランサーを選択します。
  2. [インスタンス] ビューを選択し、インスタンスのステータスと説明を書き留めます。

Amazon EC2 Auto Scaling は、グループのヘルスチェック設定が EC2 に設定されている場合、ELB ヘルスチェックの結果を使用してインスタンスのヘルスステータスを判断しません。その結果、Amazon EC2 Auto Scaling は ELB ヘルスチェックに失敗したインスタンスを終了しません。インスタンスのステータスが ELB コンソールで [OutofService] であるが、Amazon EC2 Auto Scaling コンソールでインスタンスのステータスが [正常] である場合は、ヘルスチェックタイプが [ELB] に設定されていることを確認します。

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

グループのヘルスチェックタイプがすでに ELB で、ELB コンソールのインスタンスのステータスが [OutofService] である場合は、前に書き留めたステータスの説明を使用して、次の手順を決定します。

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