

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Auto Scaling グループでのインスタンスのヘルスチェック
<a name="ec2-auto-scaling-health-checks"></a>

Amazon EC2 Auto Scaling は、Auto Scaling グループ内のインスタンスのヘルスステータスを継続的にモニタリングして、希望するキャパシティを維持します。

Auto Scaling グループ内のすべてのインスタンスは `Healthy` ステータスで開始します。インスタンスに異常があるという通知を Amazon EC2 Auto Scaling が受け取らない限り、インスタンスは正常であると見なされます。インスタンスが異常になり、置き換える必要がある場合、さまざまなソースから通知を受け取る可能性があります。こうしたソースには、以下が含まれます。
+ Amazon EC2
+ Elastic Load Balancing
+ VPC Lattice
+ Amazon EBS
+ 定義したカスタムヘルスチェック

Amazon EC2 Auto Scaling が `InService` インスタンスに異常があると判断した場合、そのインスタンスを新しいインスタンスに置き換えて、グループの希望するキャパシティを維持します。新しいインスタンスは、Auto Scaling グループの現在の設定、およびそれに関連する起動テンプレートまたは起動設定を使用して起動します。

次のフロー図は、Auto Scaling グループで新しいインスタンスを起動するプロセスを示しています。インスタンスを起動することから始まります。起動が成功すると、インスタンスが Auto Scaling グループに追加されます。次に、Amazon EC2 Auto Scaling は、組み込みの Amazon EC2 ステータスチェックを使用してインスタンスのヘルスチェックを実行し、猶予期間後にグループに対して有効にしたオプションのヘルスチェックを実行します。これらのヘルスチェックは継続して定期的に実行されます。ヘルスチェックのいずれかが不合格になると、インスタンスは置き換えられます。

![\[ヘルスチェックの開始時期を示す概要図。\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/images/how-health-checks-work.png)


異常なインスタンスは、スポットインスタンスの中断やユーザーによる手動終了など、インスタンスが予期せず終了した場合にも発生することもあります。この場合も、Amazon EC2 Auto Scaling は希望するキャパシティを維持するために、代替インスタンスを自動的に起動します。

**Topics**
+ [Auto Scaling グループのヘルスチェックについて](health-checks-overview.md)
+ [Auto Scaling グループにヘルスチェックの猶予期間を設定する](health-check-grace-period.md)
+ [ヘルスチェックを使用して、Amazon EBS ボリュームに障害がある Auto Scaling インスタンスをモニタリングする](monitor-and-replace-instances-with-impaired-ebs-volumes.md)
+ [Auto Scaling グループに対してカスタムヘルスチェックを設定する](set-up-a-custom-health-check.md)
+ [ヘルスチェック不合格の理由を表示する](replace-unhealthy-instance.md)
+ [Amazon EC2 Auto Scaling の異常なインスタンスをトラブルシューティングする](ts-as-healthchecks.md)

# Auto Scaling グループのヘルスチェックについて
<a name="health-checks-overview"></a>

このトピックでは、使用可能なヘルスチェックタイプの概要と、Amazon EC2 Auto Scaling ヘルスチェックをアプリケーションと統合する際の主な考慮事項について説明します。

**Topics**
+ [ヘルスチェックタイプ](#available-health-checks)
+ [Amazon EC2 ヘルスチェック](#instance-health-detection)
+ [Elastic Load Balancing ヘルスチェック](#elastic-load-balancing-health-checks)
+ [VPC Lattice ヘルスチェック](#vpc-lattice-health-checks)
+ [Amazon EC2 Auto Scaling によってダウンタイムが最小限に抑えられる仕組み](#minimize-downtime)
+ [ウォームプール内のインスタンスのヘルスチェック](#health-checks-for-instance-in-a-warm-pool)
+ [ヘルスチェックの考慮事項](#health-check-considerations)

## ヘルスチェックタイプ
<a name="available-health-checks"></a>

Amazon EC2 Auto Scaling は、以下のヘルスチェックの 1 つ、または複数を使用することで、`InService` インスタンスのヘルスステータスを判断できます。


****  

| ヘルスチェックタイプ | チェックする事柄 | 
| --- | --- | 
|  Amazon EC2 ステータスチェックと予定されているイベント  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/health-checks-overview.html) これは、Auto Scaling グループに対するデフォルトのヘルスチェックタイプです。  | 
|  Elastic Load Balancing ヘルスチェック  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/health-checks-overview.html) このヘルスチェックタイプを実行するには、Auto Scaling グループに対してこのタイプを有効にする必要があります。  | 
|  VPC Lattice ヘルスチェック  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/health-checks-overview.html) このヘルスチェックタイプを実行するには、Auto Scaling グループに対してこのタイプを有効にする必要があります。  | 
|  Amazon EBS ヘルスチェック  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/health-checks-overview.html) このヘルスチェックタイプを実行するには、Auto Scaling グループに対してこのタイプを有効にする必要があります。  | 
|  カスタムヘルスチェック  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/health-checks-overview.html)  | 

## Amazon EC2 ヘルスチェック
<a name="instance-health-detection"></a>

インスタンスが起動されると、インスタンスは Auto Scaling グループにアタッチされ、`InService` 状態になります。Auto Scaling グループ内のインスタンスの異なるライフサイクル状態に関する詳細については、「[Amazon EC2 Auto Scaling インスタンスのライフサイクル](ec2-auto-scaling-lifecycle.md)」を参照してください。

Amazon EC2 Auto Scaling は、Auto Scaling グループ内のすべてのインスタンスのヘルスステータスを定期的にチェックすることで、それらが実行中で良好な状態であることを確認します。

**ステータスチェック**  
Amazon EC2 Auto Scaling は、Amazon EC2 インスタンスのステータスチェックとシステムステータスチェックの結果を使用して、インスタンスのヘルスステータスを判断します。インスタンスが `running` 以外の Amazon EC2 状態である場合、またはステータスチェックのステータスが `impaired` になった場合、Amazon EC2 Auto Scaling はインスタンスを異常であると見なし、そのインスタンスを置き換えます。これには、インスタンスが以下のいずれかの状態にある場合が含まれます。
+  `stopping` 
+  `stopped` 
+  `shutting-down` 
+  `terminated` 

Amazon EC2 ステータスチェックに特別な設定は必要なく、常に有効になっています。詳細については、「*Amazon EC2 ユーザーガイド*」の「[ステータスチェックのタイプ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html#types-of-instance-status-checks)」を参照してください。

**重要**  
Amazon EC2 Auto Scaling は、何のアクションも実行せずにステータスチェックを不合格にすることがあります。ステータスチェックが失敗すると、Amazon EC2 Auto Scaling は が問題を解決 AWS するまで数分待ちます。ステータスチェックのステータスが `impaired` になっても、インスタンスは直ちに `Unhealthy` としてマークされません。さらに、EC2 Auto Scaling は、ステータスチェックが `insufficient-data` を返す場合、インスタンスを `Unhealthy` としてマークしません。  
ただし、インスタンスが `running` 状態ではなくなったことを Amazon EC2 Auto Scaling が検出すると、この状況は即時不合格として扱われます。この場合、インスタンスは直ちに `Unhealthy` としてマークされ、置き換えられます。

**予定されているイベント**  
Amazon EC2 は、インスタンスのイベントを、特定のタイムスタンプ後に実行されるようにスケジュールすることがあります。詳細については、「*Amazon EC2 ユーザーガイド*」の「[インスタンスの予定されているイベント](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)」を参照してください。

インスタンスのいずれかが予定されているイベントの影響を受ける場合、Amazon EC2 Auto Scaling は、そのインスタンスを異常と見なして置き換えます。インスタンスのシャットダウンは、タイムスタンプで指定された日付と時刻に到達するまで開始されません。

## Elastic Load Balancing ヘルスチェック
<a name="elastic-load-balancing-health-checks"></a>

Auto Scaling グループに対して Elastic Load Balancing ヘルスチェックを有効にすると、Amazon EC2 Auto Scaling はこれらのヘルスチェックの結果を使用して、インスタンスのヘルスステータスを判断できます。

Auto Scaling グループに対して Elastic Load Balancing ヘルスチェックを有効にする前に、Elastic Load Balancing ロードバランサーを設定し、インスタンスが正常かどうかを判断するためのヘルスチェックを設定する必要があります。詳細については、「[Elastic Load Balancing ロードバランサーをアタッチする準備をする](getting-started-elastic-load-balancing.md)」を参照してください。

ロードバランサーを Auto Scaling グループにアタッチすると、次のようになります。
+ Amazon EC2 Auto Scaling が、Auto Scaling グループ内のインスタンスをロードバランサーに登録します。
+ インスタンスの登録が終了すると、インスタンスは `InService` 状態になり、ロードバランサーで使用できるようになります。

デフォルトで、Amazon EC2 Auto Scaling は Elastic Load Balancing ヘルスチェックの結果を無視しますが、Auto Scaling グループに対してこれらのヘルスチェックを有効にした後、登録されたインスタンスを Elastic Load Balancing が `Unhealthy` と報告すると、Amazon EC2 Auto Scaling は、次回の定期ヘルスチェックでそのインスタンスを `Unhealthy` とマークし、置き換えます。

ロードバランサーに対して Connection Draining が有効になっている場合、Amazon EC2 Auto Scaling は、処理中のリクエストが完了するまで、または最大タイムアウト時間が終了するまで待機してから、異常なインスタンスを終了します。

**注記**  
ロードバランサーをアタッチして Auto Scaling グループについての Elastic Load Balancing ヘルスチェックを有効にする方法については、「[Auto Scaling グループに Elastic Load Balancing ロードバランサーをアタッチする](attach-load-balancer-asg.md)」を参照してください。  
グループに対して Elastic Load Balancing ヘルスチェックを有効にすると、Amazon EC2 Auto Scaling は、Elastic Load Balancing から異常として報告されたインスタンスを置き換えることができます。ただし、置き換えは、ロードバランサーが `InService` 状態になってから行われます。詳細については、「[ロードバランサーのアタッチメントステータスを確認する](load-balancer-status.md)」を参照してください。

## VPC Lattice ヘルスチェック
<a name="vpc-lattice-health-checks"></a>

デフォルトでは、Amazon EC2 Auto Scaling は、VPC Lattice ヘルスチェックの結果を無視します。オプションで、Auto Scaling グループに対してこれらのヘルスチェックを有効にできます。これらのヘルスチェックを有効化した後、VPC Lattice が登録されたインスタンスを `Unhealthy` として報告すると、Amazon EC2 Auto Scaling は、次回の定期ヘルスチェックでそのインスタンスを `Unhealthy` としてマークし、置き換えます。インスタンスを登録してからその状態をチェックする処理は、Elastic Load Balancing ヘルスチェックの仕組みと同じです。

**注記**  
VPC Lattice ターゲットグループをアタッチし、Auto Scaling グループに対して VPC Lattice ヘルスチェックを有効にする方法については、「[VPC Lattice ターゲットグループを Auto Scaling グループにアタッチする](attach-vpc-lattice-target-group-asg.md)」を参照してください。  
グループに対して VPC Lattice ヘルスチェックを有効にすると、Amazon EC2 Auto Scaling は、VPC Lattice から異常として報告されたインスタンスを置き換えることができます。ただし、置き換えは、ターゲットグループが `InService` 状態になってから行われます。詳細については、「[VPC Lattice ターゲットグループのアタッチメントステータスを確認する](verify-target-group-attachment-status.md)」を参照してください。

## Amazon EC2 Auto Scaling によってダウンタイムが最小限に抑えられる仕組み
<a name="minimize-downtime"></a>

デフォルトでは、新しいインスタンスは既存のインスタンスが終了すると同時にプロビジョニングされるため、新しいインスタンスが完全に動作するまで、新しいリクエストが受け入れられなくなる可能性があります。

Amazon EC2 Auto Scaling は、実行されていない (つまり [set-instance-health](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-health.html) コマンドで `Unhealthy` とマークされた) インスタンスがあることを認識すると、それらを直ちに置き換えます。ただし、他のインスタンスが異常である場合、Amazon EC2 Auto Scaling は不合格状態からの回復に以下のアプローチを使用します。このアプローチは、一時的な問題、または誤設定されたヘルスチェックが原因で発生する可能性があるダウンタイムを最小限に抑えます。
+ スケーリングアクティビティが進行中で、Auto Scaling グループのキャパシティが希望するキャパシティより 10% 以上少ない場合、Amazon EC2 Auto Scaling は、進行中のスケーリングアクティビティの終了を待ってから、異常なインスタンスを置き換えます。
+ スケールアウト時、Amazon EC2 Auto Scaling はインスタンスが最初のヘルスチェックに合格するのを待ちます。また、デフォルトのインスタンスウォームアップが完了するのを待って、新しいインスタンスの準備が整っていることも確実にします。
+ インスタンスがウォームアップを完了し、グループのキャパシティが希望するキャパシティの 90% を超えると、Amazon EC2 Auto Scaling は以下のように異常なインスタンスを置き換えます。
  + Amazon EC2 Auto Scaling が一度に置き換えるインスタンスはグループの希望容量の最大 10% のみで、異常なインスタンスのすべてが置き換えられるまで続行されます。
  + インスタンスを置き換えるときは、新しいインスタンスが最初のヘルスチェックに合格するのを待ちます。また、デフォルトのインスタンスウォームアップが完了するのも待ち、完了後に続行します。

**注記**  
10% の値が結果として 1 未満になるほど Auto Scaling グループのサイズが小さい場合、通常と異なり、Amazon EC2 Auto Scaling は異常なインスタンスを一度に 1 つずつ置き換えます。これは、グループのダウンタイムの原因になる可能性があります。
[インスタンスのメンテナンスポリシーを設定](https://docs.aws.amazon.com//autoscaling/ec2/userguide/set-instance-maintenance-policy-on-group.html)して、Auto Scaling が異常なインスタンスを置き換えるレートを変更することで、デフォルトの 10% の値を変更できます。ただし、Auto Scaling はインスタンスを異常としてマークするレートをスロットリングできます。  
例えば、Auto Scaling グループ内のすべてのインスタンスが異常であると Elastic Load Balancing ヘルスチェックが報告し、ロードバランサーが `InService` 状態である場合、Amazon EC2 Auto Scaling は一度に異常としてマークするインスタンス数を減らすことがあります。そうすることで、他のシナリオに適用される 10% よりも、一度に置き換えられるインスタンスの数を大幅に削減することができます。これにより、問題を修正する時間が確保され、Amazon EC2 Auto Scaling がグループ全体を自動的に終了することはありません。

## ウォームプール内のインスタンスのヘルスチェック
<a name="health-checks-for-instance-in-a-warm-pool"></a>

Amazon EC2 Auto Scaling はウォームプール内のインスタンスのヘルスチェックも行います。詳細については、「[ヘルスチェックのステータスとヘルスチェックの失敗理由を表示する](warm-pools-health-checks-monitor-view-status.md)」を参照してください。

## ヘルスチェックの考慮事項
<a name="health-check-considerations"></a>

Amazon EC2 Auto Scaling ヘルスチェックを使用する際の考慮事項を次に示します。
+ 終了処理中のインスタンス、または起動中のインスタンスで何かを実行する必要がある場合は、ライフサイクルフックを使用することができます。これらのフックを使用すると、Amazon EC2 Auto Scaling がインスタンスを起動または終了する時点で、カスタムアクションを実行できます。詳細については、「[Amazon EC2 Auto Scaling のライフサイクルフック](lifecycle-hooks.md)」を参照してください。
+ Amazon EC2 Auto Scaling は、そのヘルスチェックから Amazon EC2 ステータスチェックと予定されているイベントを削除する方法を提供しません。インスタンスが置き換えられないようにしたい場合は、個々の Auto Scaling グループについて `ReplaceUnhealthy` プロセスと `HealthCheck` プロセスを停止することをお勧めします。詳細については、「[Amazon EC2 Auto Scaling プロセスの中断と再開](as-suspend-resume-processes.md)」を参照してください。
+ 異常なインスタンスのヘルスステータスを手動で `Healthy` に戻す場合は、[set-instance-health](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-health.html) コマンドの使用を試みることができます。エラーが発生する場合、その原因はインスタンスが既に終了中であるためだと考えられます。通常、[set-instance-health](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-health.html) コマンドを使用してインスタンスのヘルスステータスを `Healthy` に戻すことは、`ReplaceUnhealthy` プロセスまたは `Terminate` プロセスが停止している場合にのみ有効です。
+ ヘルスチェックの影響を受けずにインスタンスのトラブルシューティングが必要な場合は、インスタンスを `Standby` 状態にすることができます。Amazon EC2 Auto Scaling は、`Standby` 状態のインスタンスに対して、そのインスタンスを稼働状態に戻すまではヘルスチェックを実行しません。詳細については、「[Auto Scaling グループからインスタンスを一時的に削除する](as-enter-exit-standby.md)」を参照してください。
+ インスタンスを削除すると、関連付けられたすべての Elastic IP アドレスは関連付けを解除され、新しいインスタンスと自動的に関連付けられることはありません。これらの Elastic IP アドレスと新しいインスタンスは、手動で関連付けるか、ライフサイクルフックベースのソリューションを使用して自動的に関連付ける必要があります。詳細については、「*Amazon EC2 ユーザーガイド*」の「[Elastic IP アドレス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)」を参照してください。
+ 同様に、インスタンスが終了されると、それにアタッチされている EBS ボリュームがデタッチ (または、ボリュームの `DeleteOnTermination` 属性に応じて削除) されます。これらの EBS ボリュームは、新しいインスタンスに手動でアタッチするか、ライフサイクルフックベースのソリューションを使用して自動的にアタッチする必要があります。詳細については、「*Amazon EBS ユーザーガイド*」の「[インスタンスへの Amazon EBS ボリュームのアタッチ](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html)」を参照してください。

# Auto Scaling グループにヘルスチェックの猶予期間を設定する
<a name="health-check-grace-period"></a>

Amazon EC2 Auto Scaling ヘルスチェックは、ある `InService` インスタンスが異常であると判断すると、新しいインスタンスに置き換えます。ヘルスチェックの猶予期間は、新しいインスタンスに異常がある場合、そのインスタンスを終了するまでに稼働する最小時間 (秒単位) を指定します。

ユースケース例としては、Elastic Load Balancing のヘルスチェックが失敗し、インスタンスがまだ初期化していることが原因である場合、Amazon EC2 Auto Scaling が実行を回避する要件があります。Elastic Load Balancing のヘルスチェックは、インスタンスがロードバランサーに登録されたときに開始して並行で実行されます。猶予期間によって、新しく起動されたインスタンスが `InService` 状態になった後、これらのヘルスチェックにすぐに合格しなかった場合に、Amazon EC2 Auto Scaling がそれらのインスタンスを `Unhealthy` とマークして不必要に終了しないようになります。

コンソールでは、Auto Scaling グループを作成するときのヘルスチェックの猶予期間がデフォルトで 300 秒になっています。 AWS CLI または SDK を使用して Auto Scaling グループを作成する場合、デフォルト値は 0 秒です。値が 0 の場合、ヘルスチェックの猶予期間は無効になります。

この値を高く設定しすぎると、Amazon EC2 Auto Scaling ヘルスチェックの効果が低減します。インスタンスの起動にライフサイクルフックを使用する場合は、ヘルスチェックの猶予期間の値を 0 に設定できます。ライフサイクルフックを使用すると、Amazon EC2 Auto Scaling は、インスタンスが常に初期化されてから `InService` 状態になることを確実にするための手段を提供します。詳細については、「[Amazon EC2 Auto Scaling のライフサイクルフック](lifecycle-hooks.md)」を参照してください。

猶予期間は以下のインスタンスに適用されます。
+ 新しく起動されたインスタンス
+ スタンバイ状態になった後で実行状態に戻されるインスタンス
+ グループに手動でアタッチされるインスタンス

**重要**  
ヘルスチェックの猶予期間中に Amazon EC2 Auto Scaling が Amazon EC2 `running` 状態ではなくなったインスタンスを検出した場合は、直ちにそのインスタンスを `Unhealthy` としてマークし、置き換えます。例えば、Auto Scaling グループ内のインスタンスを停止すると、そのインスタンスは `Unhealthy` とマークされ、置き換えられます。

## グループにヘルスチェックの猶予期間を設定する
<a name="set-health-check-grace-period"></a>

ヘルスチェックの猶予期間は、新規または既存の Auto Scaling グループに設定できます。

------
#### [ Console ]

**新しいグループのヘルスチェックの猶予期間を変更するには**  
Auto Scaling グループを作成するときは、**[詳細オプションを設定]** ページにある **[ヘルスチェック]** の **[ヘルスチェックの猶予期間]** に、時間を秒単位で入力します。これは、インスタンスが `InService` 状態になってからインスタンスのヘルスステータスを確認するまでに Amazon EC2 Auto Scaling が待機する必要がある時間です。

------
#### [ AWS CLI ]

**新しいグループのヘルスチェックの猶予期間を変更するには**  
[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) コマンドに `--health-check-grace-period` オプションを追加します。以下の例は、`my-asg` という名前の新しい Auto Scaling グループに対するヘルスチェック猶予期間を `60` 秒の値で設定します。

```
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \
  --health-check-grace-period 60 ...
```

------

------
#### [ Console ]

**既存グループのヘルスチェックの猶予期間を変更するには**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) でAmazon EC2 コンソールを開き、ナビゲーションペインで **[Auto Scaling グループ]** を選択します。

1. 画面の上部のナビゲーションバーで、Auto Scaling グループを作した AWS リージョン を選択します。

1. Auto Scaling グループの横にあるチェックボックスを選択します。

   ページの下部にスプリットペインが開きます。

1. **[詳細]** タブで、**[ヘルスチェック]**、**[編集]** の順に選択します。

1. **[Health check grace period]** (ヘルスチェックの猶予期間) に、秒単位で時間を入力します。これは、インスタンスが `InService` 状態になってからインスタンスのヘルスステータスを確認するまでに Amazon EC2 Auto Scaling が待機する必要がある時間です。

1. **[更新]** を選択します。

------
#### [ AWS CLI ]

**既存グループのヘルスチェックの猶予期間を変更するには**  
[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html) コマンドに `--health-check-grace-period` オプションを追加します。以下の例は、`my-asg` という名前の既存の Auto Scaling グループに対するヘルスチェック猶予期間を `120` 秒の値で設定します。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \
  --health-check-grace-period 120
```

------

**注記**  
Auto Scaling グループに対してデフォルトのインスタンスウォームアップ時間を設定することも強く推奨されます。詳細については、「[Auto Scaling グループに対するインスタンスのデフォルトウォームアップを設定する](ec2-auto-scaling-default-instance-warmup.md)」を参照してください。

# ヘルスチェックを使用して、Amazon EBS ボリュームに障害がある Auto Scaling インスタンスをモニタリングする
<a name="monitor-and-replace-instances-with-impaired-ebs-volumes"></a>

Auto Scaling グループの Amazon EBS ヘルスチェックを有効にして、アプリケーションが実行されているシステム全体を Amazon EC2 Auto Scaling がモニタリングするようにできます。

これらのヘルスチェックを有効にすると、Amazon EC2 Auto Scaling は、インスタンスにアタッチされた EBS ボリュームで実行された Amazon EC2 ステータスチェックの結果を受け取ります。ボリュームにアクセスできない、またはボリュームが I/O ステータスチェックに合格しない場合、ヘルスチェックは不合格になり、対応するインスタンスは異常と見なされます。Amazon EC2 Auto Scaling は、異常なインスタンスを検出すると、それを置き換えます。

このトピックでは、アタッチされた EBS ステータスチェックに読者が精通していることを前提としています。そうでない場合は、「*Amazon EC2 ユーザーガイド*」の「[アタッチ済みの EBS ステータスチェック](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html#attached-ebs-status-checks)」セクションを参照してください。次のトピックでは、アタッチされた EBS ステータスチェックに依存する Amazon EC2 Auto Scaling ヘルスチェックを有効にする方法について説明します。

**注記**  
すべての Auto Scaling グループの Amazon EBS ヘルスチェックを有効にできます。ただし、これらのヘルスチェックは [AWS Nitro System 上に構築されたインスタンス](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html)に対してのみ使用できます。

## グループに対して Amazon EBS ヘルスチェックを有効にする
<a name="turn-on-ebs-health-checks"></a>

新規および既存の Auto Scaling グループに対して Amazon EBS ヘルスチェックを有効にできます。

------
#### [ Console ]

**新しいグループに対する Amazon EBS ヘルスチェックの有効化**  
Auto Scaling グループを作成するときに、**[詳細オプションを設定]** ページにある **[ヘルスチェック]** の **[追加のヘルスチェックタイプ]** で、**[Amazon EBS ヘルスチェックを有効にする]** を選択します。そして、**[ヘルスチェックの猶予期間]** に、秒単位で時間を入力します。これは、インスタンスが `InService` 状態になってからインスタンスのヘルスステータスを確認するまでに、Amazon EC2 Auto Scaling が待機する必要がある時間です。詳細については、「[Auto Scaling グループにヘルスチェックの猶予期間を設定する](health-check-grace-period.md)」を参照してください。

------
#### [ AWS CLI ]

**新しいグループに対する Amazon EBS ヘルスチェックの有効化**  
[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) コマンドに `--health-check-type` オプションを追加します。次の例では、`my-asg` という名前の新しい Auto Scaling グループの `--health-check-type` オプションに **`EBS`** を指定します。

```
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \
  --health-check-type "EBS" --health-check-grace-period 60 ...
```

`--health-check-type` オプションには複数の値を指定できます。例えば、Amazon EBS と Elastic Load Balancing の両方のヘルスチェックタイプを追加するには、次のコマンドを使用します。

```
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \
  --health-check-type "EBS,ELB" --health-check-grace-period 60 ...
```

値名では大文字と小文字が区別されます。

------

------
#### [ Console ]

**既存のグループに対する Amazon EBS ヘルスチェックの有効化**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) でAmazon EC2 コンソールを開き、ナビゲーションペインで **[Auto Scaling グループ]** を選択します。

1. 画面の上部のナビゲーションバーで、Auto Scaling グループを作した AWS リージョン を選択します。

1. 既存のグループの横にあるチェックボックスをオンにします。

   **[Auto Scaling グループ]** ページの下部にスプリットペインが開きます。

1. **[詳細]** タブで、**[ヘルスチェック]**、**[編集]** の順に選択します。

1. **[ヘルスチェック]** の **[追加のヘルスチェックタイプ]** で、**[Amazon EBS ヘルスチェックを有効にする]** を選択します。

1. **[ヘルスチェックの猶予期間]** に、秒単位で時間を入力します。これは、インスタンスが `InService` 状態になってからインスタンスのヘルスステータスを確認するまでに、Amazon EC2 Auto Scaling が待機する必要がある時間です。詳細については、「[Auto Scaling グループにヘルスチェックの猶予期間を設定する](health-check-grace-period.md)」を参照してください。

1. **[更新]** を選択します。

------
#### [ AWS CLI ]

**既存のグループに対する Amazon EBS ヘルスチェックの有効化**  
[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html) コマンドに `--health-check-type` オプションを追加します。次の例では、`my-asg` という名前の既存の Auto Scaling グループの `--health-check-type` オプションに `EBS` を指定しています。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \
  --health-check-type "EBS" --health-check-grace-period 60
```

複数のヘルスチェックタイプを使用するには、`--health-check-type` オプションに複数の値 (`EBS,ELB` など) を指定できます。

値名では大文字と小文字が区別されます。

------

# Auto Scaling グループに対して Amazon EBS ヘルスチェックを無効にする
<a name="turn-off-ebs-health-checks"></a>

次のトピックでは、Auto Scaling グループに対して Amazon EBS ヘルスチェックを無効にする方法について説明します。Amazon EBS ヘルスチェックが不要になった場合は、次の手順を使用して無効にします。

------
#### [ Console ]

**グループに対する Amazon EBS ヘルスチェックの無効化**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) でAmazon EC2 コンソールを開き、ナビゲーションペインで **[Auto Scaling グループ]** を選択します。

1. 既存のグループの横にあるチェックボックスをオンにします。

   **[Auto Scaling グループ]** ページの下部にスプリットペインが開きます。

1. **[詳細]** タブで、**[ヘルスチェック]**、**[編集]** の順に選択します。

1. **[ヘルスチェック]** の **[追加のヘルスチェックタイプ]** で、**[Amazon EBS ヘルスチェックを有効にする]** の選択を解除します。

1. **[更新]** を選択します。

------
#### [ AWS CLI ]

**グループに対する Amazon EBS ヘルスチェックの無効化**  
Auto Scaling グループのヘルスチェックを更新して Amazon EBS ヘルスチェックを使用しないようにするには、[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html) コマンドを使用します。`--health-check-type` オプションと `EC2` の値を含めます。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \
  --health-check-type "EC2"
```

他のヘルスチェックタイプ (Elastic Load Balancing など) を無効にせずに Amazon EBS ヘルスチェックを無効にするには、`EC2` の代わりにそれらを指定する必要があります。例えば、Elastic Load Balancing ヘルスチェックの場合は、`--health-check-type` オプションに `ELB` を指定します。

値名では大文字と小文字が区別されます。

------

# Auto Scaling グループに対してカスタムヘルスチェックを設定する
<a name="set-up-a-custom-health-check"></a>

カスタムヘルスチェックを使用して、Amazon EC2 Auto Scaling が提供する既存のヘルスチェックオプションを補完できます。カスタムヘルスチェックを他のヘルスチェックタイプと組み合わせることで、アプリケーションのニーズに合わせた包括的なヘルスモニタリングシステムを作成できます。

開始するには、カスタムテストを作成して、Auto Scaling グループのインスタンスが正しく動作し、受信トラフィックを処理できることを確認します。設定したヘルスチェックでインスタンスが応答していないことが検出された場合は、その特定のインスタンスを `Unhealthy` としてマークします。これにより、Amazon EC2 Auto Scaling はそのインスタンスをすぐに置き換えます。

インスタンスのヘルスステータスは、 AWS CLI または SDK を使用して Amazon EC2 Auto Scaling に直接送信できます。次の例は、 を使用してインスタンスのヘルスステータス AWS CLI を設定し、インスタンスのヘルスステータスを確認する方法を示しています。

次の [set-instance-health](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-health.html) コマンドを使用して、指定したインスタンスのヘルスステータスを `Unhealthy` に設定します。

```
aws autoscaling set-instance-health --instance-id i-1234567890abcdef0 --health-status Unhealthy
```

デフォルトで、このコマンドはヘルスチェックの猶予期間を守りますが、`--no-should-respect-grace-period` オプションを含めることでこの動作を上書きし、猶予期間を守らないようにすることも可能です。

次の [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) コマンドを使用して、インスタンスのヘルスステータスが `Unhealthy` であることを確認します。

```
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
```

次に示すのは、インスタンスのヘルスステータスが `Unhealthy` であり、インスタンスが終了中であることを示す応答の例です。

```
{
    "AutoScalingGroups": [
        {
            ....
            "Instances": [
                {
                    "ProtectedFromScaleIn": false,
                    "AvailabilityZone": "us-west-2a",
                    "LaunchTemplate": {
                        "LaunchTemplateName": "my-launch-template",
                        "Version": "1",
                        "LaunchTemplateId": "lt-1234567890abcdef0"
                    },
                    "InstanceId": "i-1234567890abcdef0",
                    "InstanceType": "t2.micro",
                    "HealthStatus": "Unhealthy",
                    "LifecycleState": "Terminating"
                },
                ...
            ]
        }
    ]
}
```

# ヘルスチェック不合格の理由を表示する
<a name="replace-unhealthy-instance"></a>

次の手順を使用して、ヘルスチェックによって置き換えられたインスタンスに関する情報を表示できます。

デフォルトでは、Amazon EC2 Auto Scaling は、異常があるインスタンスを終了するための新しいスケーリングアクティビティを作成してから、異常があるインスタンスを終了します。インスタンスの終了中、別のスケーリングアクティビティが新しいインスタンスを起動します。この動作を変更して、インスタンスメンテナンスポリシーを使用して、できるだけ早く新しいインスタンスの起動を開始できます。詳細については、「[インスタンスメンテナンスポリシー](ec2-auto-scaling-instance-maintenance-policy.md)」を参照してください。

------
#### [ Console ]

**ヘルスチェック不合格の理由の表示**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) でAmazon EC2 コンソールを開き、ナビゲーションペインで [**Auto Scaling グループ**] を選択します。

1. Auto Scaling グループの横にあるチェックボックスを選択します。

   **[Auto Scaling groups]** (Auto Scaling グループ) ページの下部にスプリットペインが開きます。

1. **[Activity (アクティビティ)]** タブの [**Activity history (アクティビティ履歴)**] の下の [**Status (ステータス)**] 列に、Auto Scaling グループがインスタンスを正常に起動したか、終了したかが表示されます。

   正常でないインスタンスを終了した場合、**原因**列には、終了の日時、およびヘルスチェックが失敗した理由が表示されます。例えば、`At 2022-05-14T20:11:53Z an instance was taken out of service in response to a user health-check`。このメッセージは、カスタムヘルスチェックによってインスタンスが異常とマークされたことを示します。

   ヘルスチェック不合格に関するヘルプについては、「[Amazon EC2 Auto Scaling の異常なインスタンスをトラブルシューティングする](ts-as-healthchecks.md)」を参照してください。

------
#### [ AWS CLI ]

**ヘルスチェック不合格の理由の表示**  
以下の [describe-scaling-activities](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-scaling-activities.html) コマンドを実行します。

```
aws autoscaling describe-scaling-activities --auto-scaling-group-name my-asg
```

以下に示すのは応答の例です。`Cause` にはヘルスチェック不合格の理由が記載されています。

```
{
  "Activities": [
    {
      "ActivityId": "4c65e23d-a35a-4e7d-b6e4-2eaa8753dc12",
      "AutoScalingGroupName": "my-asg",
      "Description": "Terminating EC2 instance: i-04925c838b6438f14",
      "Cause": "At 2021-04-01T21:48:35Z an instance was taken out of service in response to a user health-check.",
      "StartTime": "2021-04-01T21:48:35.859Z",
      "EndTime": "2021-04-01T21:49:18Z",
      "StatusCode": "Successful",
      "Progress": 100,
      "Details": "{\"Subnet ID\":\"subnet-5ea0c127\",\"Availability Zone\":\"us-west-2a\"...}",
      "AutoScalingGroupARN": "arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:283179a2-f3ce-423d-93f6-66bb518232f7:autoScalingGroupName/my-asg"
    },
...
  ]
}
```

出力の各フィールドについては、「*Amazon EC2 Auto Scaling API Reference*」(Amazon EC2 Auto Scaling API リファレンス) の「[Activity](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_Activity.html)」(アクティビティ) を参照してください。

Auto Scaling グループが削除された後にスケーリングアクティビティの説明を表示するには、[describe-scaling-activities](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-scaling-activities.html) コマンドに `--include-deleted-groups` オプションを追加します。

------

# Amazon EC2 Auto Scaling の異常なインスタンスをトラブルシューティングする
<a name="ts-as-healthchecks"></a>

以下に示すのは、Amazon EC2 Auto Scaling から返されるエラーメッセージ、考えられる原因、問題の解決のための手順です。

エラーメッセージを取得するには、「[ヘルスチェック不合格の理由を表示する](replace-unhealthy-instance.md)」を参照してください。

**Topics**
+ [EC2 インスタンスのステータスチェックが失敗したことにより、インスタンスのサービスは停止されました。](#ts-failed-status-checks)
+ [EC2 ヘルスチェックでインスタンスが終了または停止済みであることが検出され、インスタンスのサービスが停止されてしまう](#ts-terminated-or-stopped)
+ [ELB システムのヘルスチェックが障害を検出してインスタンスのサービスが停止される](#ts-failed-elb-health-checks)
+ [その他のリソース](#troubleshoot-health-checks-additional-resources)

## EC2 インスタンスのステータスチェックが失敗したことにより、インスタンスのサービスは停止されました。
<a name="ts-failed-status-checks"></a>

**問題**: Auto Scaling インスタンスで Amazon EC2 のステータスチェックが失敗します。

**原因 1**: 何らかの問題により、Auto Scaling グループ内のインスタンスに障害があると Amazon EC2 が認識した場合、Amazon EC2 Auto Scaling はヘルスチェックの一環として、インスタンスを自動的に置き換えます。

**解決策 1**: インスタンスのステータスチェックが不合格になった場合、通常は、アプリケーションで問題が発生しなくなるまでインスタンス設定を変更することで、問題に自力で対処する必要があります。この問題を解決するには、以下の手順を実行します。

1. Auto Scaling グループには含まれない Amazon EC2 インスタンスを手動で作成して、問題を調査します。障害のあるインスタンスの調査に関する一般的なヘルプについては、「*Amazon EC2 ユーザーガイド*」の「[ステータスチェックに失敗した Amazon EC2 Linux インスタンスをトラブルシューティングする](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)」を参照してください。

1. インスタンスが起動に成功し、正常に機能していることを確認したら、エラーのない新しいインスタンス設定を Auto Scaling グループにデプロイします。

1.  AWS アカウントへの課金が継続されないよう、作成したインスタンスを削除します。

## EC2 ヘルスチェックでインスタンスが終了または停止済みであることが検出され、インスタンスのサービスが停止されてしまう
<a name="ts-terminated-or-stopped"></a>

**問題**: 停止、再起動、または終了した Auto Scaling インスタンスは置き換えられます。

**原因 1**: ユーザーが手動で、インスタンスを停止、再起動、または終了しています。

**解決策 1**: Auto Scaling グループ内のインスタンスを停止または再起動する必要がある場合は、まずインスタンスをスタンバイ状態にすることをお勧めします。詳細については、「[Auto Scaling グループからインスタンスを一時的に削除する](as-enter-exit-standby.md)」を参照してください。

**原因 2**: Amazon EC2 Auto Scaling は、Amazon EC2 スポットサービスがインスタンスを中断した後、スポットインスタンスの置き換えを試みます。これは、スポット料金がお客様の上限価格を超えるか、またはキャパシティーが使用できなくなるためです。

**解決策 2**: 特定の時点で要求を満たせるだけのスポットインスタンスが存在するという保証はありません。ただし、以下を試すことができます。
+ より高いスポット上限価格を設定します (オンデマンド料金が利用できます)。上限価格を高く設定することで、要求されたキャパシティーを Amazon EC2 スポットサービスが確保し、それを維持できる可能性を高められます。
+ 複数のアベイラビリティーゾーンで複数のインスタンスタイプを実行することで、より多くの異なるキャパシティプールからインスタンスを起動できるようにします。詳細については、「[複数のインスタンスタイプと購入オプションを使用する Auto Scaling グループ](ec2-auto-scaling-mixed-instances-groups.md)」を参照してください。
+ 複数のインスタンスタイプを使用する場合は、キャパシティーの再調整機能を有効にすることも考慮してください。この機能は、実行中のインスタンスが終了する前に Amazon EC2 スポットサービスで、新しいスポットインスタンスを起動させたい場合に便利です。詳細については、「[リスクがあるスポットインスタンスを置き換えるための Auto Scaling でのキャパシティの再調整](ec2-auto-scaling-capacity-rebalancing.md)」を参照してください。

**原因 3**: キャパシティブロックでは、Amazon EC2 は、キャパシティブロックの終了時刻の 30 分前に、実行中のインスタンスを終了します。この突然の終了により、Auto Scaling グループは、キャパシティブロックが終了中であるにもかかわらず、新しいインスタンスを起動して希望するキャパシティを維持しようとします。

**解決策 3**: この問題を解決するには、以下の手順をお試しください。
+ Auto Scaling グループの希望するキャパシティを減らして、新しいインスタンスを起動しようとしないようにします。詳細については、「[Amazon EC2 Auto Scaling の手動スケーリング](ec2-auto-scaling-scaling-manually.md)」を参照してください。
+ このエラーが頻繁に発生しないように、キャパシティブロックの終了時刻の 30 分前に Auto Scaling グループをスケールインしてください。キャパシティブロックの終了時刻の 30 分前にライフサイクルフックが完了していることを確認します。詳細については、「[機械学習ワークロードにCapacity Blocksを使用する](launch-template-capacity-blocks.md)」を参照してください。

## ELB システムのヘルスチェックが障害を検出してインスタンスのサービスが停止される
<a name="ts-failed-elb-health-checks"></a>

**問題**: Auto Scaling インスタンスが EC2 ステータスチェックに合格する場合があります。ただし、Auto Scaling グループが登録されている、ターゲットグループや Classic Load Balancer に対するElastic Load Balancing のヘルスチェックで失敗する可能性があります。

**原因 1**: Auto Scaling グループが Elastic Load Balancing によって提供されるヘルスチェックに依存している場合、Amazon EC2 Auto Scaling は、EC2 のステータスチェックと Elastic Load Balancing のヘルスチェック両方の結果を確認することで、インスタンスのヘルスステータスを判断します。ロードバランサーは、各インスタンスにリクエストを送信して正しい応答を待つか、インスタンスとの接続の確立を試みることで、ヘルスチェックを実行します。インスタンスで実行するアプリケーションに問題があり、ロードバランサーがそのインスタンスを停止中と判断する場合、そのインスタンスは Elastic Load Balancing のヘルスチェックに失敗する場合があります。

**解決策 1**Elastic Load Balancing のヘルスチェックに合格するには: 
+ ターゲットグループのヘルスチェックにおいて、適切な設定が行われていることを確認します。ロードバランサーのヘルスチェック設定は、ターゲットグループごとに定義します。詳細については、「[ターゲットのヘルスチェックを設定する](getting-started-elastic-load-balancing.md#elb-health-checks-for-targets)」を参照してください。
+ ロードバランサーで予期される成功コードを記録し、成功時にアプリケーションがそれらのコードを返すかを見て、適切な設定が行われていることを確認します。
+ ロードバランサーと Auto Scaling グループのセキュリティグループでの設定が適切であることを確認します。
+ ロードバランサーが Auto Scaling グループと同じアベイラビリティーゾーンに構成されていることを確認します。

**解決策 2**: Auto Scaling グループを更新して、Elastic Load Balancing のヘルスチェックをオフにします。これらのヘルスチェックをオフにする方法については、「[Detach a target group or Classic Load Balancer](https://docs.aws.amazon.com//autoscaling/ec2/userguide/attach-load-balancer-asg.html#as-remove-load-balancer)」を参照してください。

**原因 2**: ヘルスチェックの猶予期間とインスタンスのスタートアップ時間の間に不一致があります。

**解決策 3**: Auto Scaling グループのヘルスチェック猶予期間を編集します。猶予期間は、新たに起動したインスタンスが正常であると Elastic Load Balancing が認識するために必要な、連続した正常なヘルスチェックの回数をサポートするのに十分な時間に設定します。詳細については、「[Auto Scaling グループにヘルスチェックの猶予期間を設定する](health-check-grace-period.md)」を参照してください。

## その他のリソース
<a name="troubleshoot-health-checks-additional-resources"></a>

別の問題が発生した場合は、次の AWS re:Post 記事でトラブルシューティングに関するその他のヘルプを参照してください。
+  [インスタンスが Amazon EC2 Auto Scaling により終了された理由は何ですか?](https://repost.aws/knowledge-center/auto-scaling-instance-how-terminated)
+  [異常なインスタンスが Amazon EC2 Auto Scaling により終了されない理由は何ですか?](https://repost.aws/knowledge-center/auto-scaling-terminate-instance)