

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

# ウォームプールを使用してブート時間が長いアプリケーションのレイテンシーを低減する
<a name="ec2-auto-scaling-warm-pools"></a>

ウォームプールを使用すると、インスタンスが大量のデータをディスクに書き込む必要があるなど、起動時間が非常に長いアプリケーションのレイテンシーを低減できます。ウォームプールの使用によって、アプリケーションのパフォーマンスを向上させるために、レイテンシーを管理するために Auto Scaling グループを過剰にプロビジョニングする必要がなくなりました。詳細については、ブログ記事 [Scaling your applications faster with EC2 Auto Scaling Warm Pools](https://aws.amazon.com/blogs/compute/scaling-your-applications-faster-with-ec2-auto-scaling-warm-pools/) (EC2 Auto Scaling ウォームプールを使用してアプリケーションをより高速にスケーリングする) をご覧ください。

**重要**  
必要のないときにウォームプールを作成すると、不要なコストが発生する可能性があります。最初の起動時にアプリケーションに顕著なレイテンシーの問題が発生しない場合は、おそらくウォームプールを使用する必要はありません。

**Topics**
+ [主要概念](#warm-pool-core-concepts)
+ [前提条件](#warm-pool-prerequisites)
+ [ウォームプール内のインスタンスを更新する](#update-warm-pool)
+ [関連リソース](#warm-pools-related-resources)
+ [制限事項](#warm-pools-limitations)
+ [ライフサイクルフックを使用する](warm-pool-instance-lifecycle.md)
+ [Auto Scaling グループのためにウォームプールを作成する](create-warm-pool.md)
+ [ヘルスチェックステータスを表示する](warm-pools-health-checks-monitor-view-status.md)
+ [AWS CLI ウォームプールの使用例](examples-warm-pools-aws-cli.md)

## 主要概念
<a name="warm-pool-core-concepts"></a>

開始する前に、以下の主要概念を理解してください。

**ウォームプール**  
ウォームプールは、Auto Scaling グループに接続された初期化済みの EC2 インスタンスのプールです。アプリケーションがスケールアウトする必要があるときはいつでも、Auto Scaling グループはウォームプールに描画して、新しい希望する容量を満たすことができます。これにより、インスタンスがアプリケーショントラフィックを迅速化し、スケールアウトイベントへの応答を高速化できるようになります。インスタンスは、ウォームプールから離れたときに、グループの希望する容量にカウントされます。これは、*ウォームスタート*として知られています。  
インスタンスがウォームプールにある間、スケーリングポリシーは、`InService` 状態のインスタンスのメトリクス値がスケーリングポリシーのアラーム上限しきい値 (ターゲット追跡スケーリングポリシーのターゲット使用率と同じ値) を超える場合のみスケールアウトします。

**ウォームプールのサイズ**  
デフォルトでは、ウォームプールのサイズは、Auto Scaling グループの最大容量と希望する容量の数値の差として計算されます。例えば、Auto Scaling グループの希望する容量が 6 で、最大容量が 10 の場合、ウォームプールを最初にセットアップし、プールが初期化されるときに、ウォームプールのサイズは 4 になります。  
ウォームプールの最大容量を個別に指定するには、カスタム仕様 (`MaxGroupPreparedCapacity`) オプションを使用して、グループの現在の容量を超えるカスタム値を設定します。カスタム値を指定すると、ウォームプールのサイズは、グループのカスタム値と現在希望する容量の数値の差として計算されます。たとえば、Auto Scaling グループの希望容量が 6、最大容量が 20、カスタム値が 8 である場合、初めてウォームプールをセットアップしてプールが初期化されると、ウォームプールのサイズは 2 になります。  
ウォームプールを使用するコストメリットを管理するために、大きな Auto Scaling グループで作業するときは、カスタム仕様 (`MaxGroupPreparedCapacity`) オプションのみを使用する場合があります。例えば、インスタンス 1,000 個、最大容量 1,500 個 (トラフィックの急増時に追加の容量を提供するため)、およびインスタンス 100 個のウォームプールがある Auto Scaling グループは、ウォームプール内に将来使用するインスタンスを 500 個予約しておくよりも、目標の達成に役立つ場合があります。

**ウォームプールサイズの最小サイズ**  
最小サイズ設定を使用して、ウォームプール内で維持するインスタンスの最小数 (`MinSize`) を静的に設定することを検討してください。デフォルトでは最小サイズは設定されていません。`MinSize` の設定は、Auto Scaling グループの希望する容量が `MaxGroupPreparedCapacity` よりも高い場合でも、ウォームプールに最小数のインスタンスが維持されるように `MaxGroupPreparedCapacity` を指定する場合に便利です。

**ウォームプールインスタンスの状態**  
ウォームプール内のインスタンスは、次の 3 つの状態のいずれかで保持できます: `Stopped`、`Running`、`Hibernated`。インスタンスを`Stopped`状態で保持することは、コストを最小限に抑えるための効果的な方法です。停止したインスタンスでは、使用したボリュームとインスタンスにアタッチされた Elastic IP アドレスの分だけ料金が発生します。  
または、インスタンスを `Hibernated` 状態に保持して、メモリコンテンツ (RAM) を削除せずにインスタンスを停止することができます。インスタンスが休止状態になると、RAM コンテンツを Amazon EBS ルートボリュームに保存するようオペレーティングシステムに通知されます。インスタンスを再起動すると、ルートボリュームは以前の状態に復元され、RAM コンテンツがリロードされます。インスタンスが休止状態になっている間は、RAM コンテンツのストレージ、インスタンスにアタッチされた Elastic IP アドレスなどの EBS ボリュームに対してのみ料金が発生します。  
ウォームプール内のインスタンスを `Running` 状態にしておくことも可能ですが、不必要な料金の発生避けるためにも、そうしておかないことを強くお勧めします。インスタンスを停止または休止状態にしておくと、インスタンス自体のコストが削減されます。インスタンスの料金は、インスタンスが実行されている場合にのみ発生します。

**ライフサイクルフック**  
[ライフサイクルフック](warm-pool-instance-lifecycle.md)を使用して、インスタンスに対してカスタムアクションを実行できるように、インスタンスを待機状態にします。カスタムアクションは、インスタンスの起動時または終了前に実行されます。  
ウォームプール設定では、ライフサイクルフックは、初期化が完了するまで、スケールアウトイベント中にインスタンスが停止または休止されたり、稼働したりするのを遅延させます。ライフサイクルフックなしで Auto Scaling グループにウォームプールを追加すると、初期化の完了までに長い時間がかかるインスタンスは停止または休止状態になり、準備が整う前にスケールアウトイベントが開始する可能性があります。

**インスタンスの再利用ポリシー**  
デフォルトでは、Amazon EC2 Auto Scaling は、Auto Scaling グループがスケールインするとインスタンスを終了します。次に、新しいインスタンスをウォームプールで起動し、終了したインスタンスを置換します。  
置換する代わりに、インスタンスをウォームプールに戻す場合は、インスタンスの再利用ポリシーを指定します。これにより、アプリケーショントラフィックを処理するように設定されたインスタンスを再利用できます。ウォームプールが過剰プロビジョニングされないように、Amazon EC2 Auto Scaling はウォームプール内のインスタンスを終了し、その設定に基づいて、必要以上に大きくなったときにそのサイズを減らすことができます。ウォームプール内のインスタンスを終了する際に、Amazon EC2 Auto Scaling は[デフォルトの終了ポリシー](ec2-auto-scaling-termination-policies.md#default-termination-policy)を使用して、最初に終了するインスタンスを選択します。  
スケールイン時にインスタンスを休止し、Auto Scaling グループに既存のインスタンスがある場合は、インスタンスの休止要件を満たしている必要があります。要件を満たしていない場合、インスタンスがウォームプールに戻ると、休止状態ではなく停止状態にフォールバックします。
現在、インスタンスの再利用ポリシーを指定できるのは、 AWS CLI または SDK のみです。この機能はコンソールからは利用できません。

## 前提条件
<a name="warm-pool-prerequisites"></a>

Auto Scaling グループのためにウォームプールを作成する前に、ライフサイクルフックを使用して新しいインスタンスを適切な初期状態で初期化する方法を決定します。

インスタンスがライフサイクルフックを理由として待機状態にあるときに、インスタンスに対してカスタムアクションを実行するには、次の 2 つのオプションがあります。
+ 起動時にインスタンスでコマンドを実行する単純なシナリオでは、Auto Scaling グループの起動テンプレートまたは起動設定の作成時にユーザーデータスクリプトを含めることができます。ユーザーデータスクリプトは、インスタンスの起動時に cloud-init により実行される通常のシェルスクリプトまたは cloud-init ディレクティブです。このスクリプトは、実行されるインスタンスの ID を使用して、インスタンスが次の状態に移行するタイミングを制御することもできます。まだそうしていない場合は、インスタンスメタデータからインスタンスのインスタンス ID を取得するためのスクリプトを更新します。詳細については、「*Amazon EC2 ユーザーガイド*」の「[インスタンスメタデータにアクセスする](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)」を参照してください。
**ヒント**  
インスタンスの再起動時にユーザーデータスクリプトを実行するには、ユーザーデータを MIME マルチパート形式で指定し、ユーザーデータの `#cloud-config` セクションで以下を指定します。  

  ```
  #cloud-config
  cloud_final_modules:
   - [scripts-user, always]
  ```
+ インスタンスがウォームプールに出入りするときに AWS Lambda 何かを行うなどの高度なシナリオでは、Auto Scaling グループのライフサイクルフックを作成し、ライフサイクル通知に基づいてカスタムアクションを実行するようにターゲットサービスを設定できます。詳細については、「[サポートされている通知ターゲット](warm-pool-instance-lifecycle.md#warm-pools-supported-notification-targets)」を参照してください。

**インスタンス休止のための準備**  
`Hibernated` のプール状態を使用して Auto Scaling インスタンスを準備するには、「*Amazon EC2 ユーザーガイド*」の「[休止の前提条件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)」トピックの説明に従って、インスタンスの休止状態をサポートするように正しくセットアップされた新しい起動テンプレートまたは起動設定を作成します。次に、新しい起動テンプレートまたは起動設定を Auto Scaling グループに関連付けてインスタンスの更新を開始し、以前の起動テンプレートまたは起動設定に関連付けられているインスタンスを置換します。詳細については、「[インスタンスの更新を使用して Auto Scaling グループのインスタンスを更新する](asg-instance-refresh.md)」を参照してください。

## ウォームプール内のインスタンスを更新する
<a name="update-warm-pool"></a>

ウォームプール内のインスタンスを更新するには、新しい起動テンプレートまたは起動設定を作成し、それを Auto Scaling グループに関連付けます。新しいインスタンスは、起動テンプレートまたは起動設定で指定された新しい AMI およびその他の更新を使用して起動されますが、既存のインスタンスは影響を受けません。

新しい起動テンプレートまたは起動設定を使用する代替ウォームプールインスタンスを強制的に起動するには、インスタンスの更新を開始してグループのローリング更新を行うことができます。インスタンスの更新は、最初に`InService`インスタンスを置き換えます。その後、ウォームプール内のインスタンスが置き換えられます。詳細については、「[インスタンスの更新を使用して Auto Scaling グループのインスタンスを更新する](asg-instance-refresh.md)」を参照してください。

## 関連リソース
<a name="warm-pools-related-resources"></a>

ウォームプールのライフサイクルフックの例については、[GitHub リポジトリ](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples)にアクセスしてください。

## 制限事項
<a name="warm-pools-limitations"></a>
+ 混合インスタンスタイプの Auto Scaling グループにおけるウォームプールの制限:
  + ウォームプールは、重み付きの混合インスタンスグループがサポートされていません。Auto Scaling グループがインスタンスの重み付けを使用している場合、ウォームプールを追加できません。
  + ウォームプールは、混合インスタンスグループ内のスポットインスタンスをサポートしていません。混合インスタンスポリシーは、ウォームプールを使用する場合にオンデマンドインスタンスのみで設定する必要があります。
  + 休止状態の混合インスタンスグループでウォームプールを使用する場合は、起動テンプレートで `HibernationOptions` を設定する必要があります。
+ Amazon EC2 Auto Scaling は、ルートデバイスとして Amazon EBS ボリュームを持つ場合にのみ、インスタンスを `Stopped` または `Hibernated` 状態にすることができます。ルートデバイスにインスタンスストアを使用するインスタンスは停止または休止できません。
+ Amazon EC2 Auto Scaling は、「*Amazon EC2 ユーザーガイド*」の「[休止の前提条件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)」トピックに一覧表示されているすべての要件を満たしている場合にのみ、インスタンスを `Hibernated` 状態にすることができます。
+ スケールアウトイベントがあるときにウォームプールが枯渇した場合、インスタンスは Auto Scaling グループ内に直接起動されます (*コールドスタート*)。また、アベイラビリティーゾーンが容量不足の場合にコールドスタートが発生する可能性があります。
+ ウォームプール内のインスタンスが起動プロセス中に問題に遭遇し、`InService` 状態に到達できない場合、インスタンスは起動に失敗したと見なされ、終了します。これは、容量不足エラーやその他の要因など、根本的な原因に関係なく適用されます。
+ Amazon Elastic Kubernetes Service (Amazon EKS) マネージドノードグループでウォームプールを使用しようとすると、まだ初期化中のインスタンスが Amazon EKS クラスターに登録される可能性があります。その結果、このクラスターは、インスタンスが停止または休止の準備を行っているときにインスタンスでジョブをスケジュールする場合があります。
+ 同様に、Amazon ECS クラスターでウォームプールを使用しようとすると、初期化が完了する前にインスタンスがクラスターに登録される可能性があります。この問題を解決するには、ユーザーデータに特別なエージェント設定変数が含まれる起動テンプレートまたは起動設定を設定する必要があります。詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[EC2 起動タイプ用の Amazon ECS キャパシティープロバイダー](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/asg-capacity-providers.html#using-warm-pool)」を参照してください。

# Auto Scaling グループのウォームプールでライフサイクルフックを使用する
<a name="warm-pool-instance-lifecycle"></a>

ウォームプールのインスタンスは、移行ごとに適切なカスタムアクションを作成できるように、独自の独立したライフサイクルを維持します。このライフサイクルは、インスタンスがまだ初期化中、およびサービスを開始する前に、ターゲットサービス (Lambda 関数など) でアクションを呼び出すように設計されています。

**注記**  
ライフサイクルフックと完全なライフサイクルアクションの追加と管理に使用する API オペレーションは変更されません。インスタンスのライフサイクルのみが変更されます。

ライフサイクルフック追加の詳細については、[Auto Scaling グループにライフサイクル フックを追加する](adding-lifecycle-hooks.md) を参照してください。ライフサイクルアクション完了の詳細については、[Auto Scaling グループでライフサイクルアクションを完了する](completing-lifecycle-hooks.md) を参照してください。

ウォームプールに入るインスタンスは、次のいずれかの理由でライフサイクルフックが必要になる場合があります。
+ 初期化の完了に時間がかかる AMI から EC2 インスタンスを起動する。
+ ユーザーデータスクリプトを実行して EC2 インスタンスをブートストラップする。

ウォームプールを離れるインスタンスは、次のいずれかの理由でライフサイクルフックが必要になる場合があります。
+ EC2 インスタンスの使用準備に、時間を追加することができます。例えば、インスタンスの再起動時に、アプリケーションが正常に動作する前に、開始する必要があるサービスがあるとします。
+ キャッシュデータを事前入力して、新しいサーバーが空のキャッシュで起動しないようにすることができます。
+ 新しいインスタンスをマネージドインスタンスとして設定管理サービスに登録する場合。

## ウォームプール内のインスタンスのライフサイクル状態の移行
<a name="lifecycle-state-transitions"></a>

オートスケーリングインスタンスは、ライフサイクルの一環として多くの状態に移行します。

次の図表は、ウォームプール使用時のオートスケーリング状態間の移行を示しています。

![\[ウォームプール内のインスタンスのライフサイクル状態の移行。\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/images/warm-pools-lifecycle-diagram.png)


¹ この状態は、ウォームプールのプール状態設定によって異なります。プール状態が `Running` に設定されている場合、この状態は代わりに `Warmed:Running` になります。プール状態が `Hibernated` に設定されている場合、この状態は代わりに `Warmed:Hibernated` になります。

ライフサイクルフックを追加するときは、次の点を考慮してください。
+ ライフサイクルフックが `autoscaling:EC2_INSTANCE_LAUNCHING` ライフサイクルアクションに対して設定されている場合、新しく起動したインスタンスは、`Warmed:Pending:Wait` 状態に達したときに一時停止してカスタムアクションを実行します。その後、インスタンスが再開して `Pending:Wait` 状態になったときに再度一時停止してカスタムアクションを実行します。
+ ライフサイクルフックが `EC2_INSTANCE_TERMINATING` ライフサイクルアクションに対して設定されている場合、終了するインスタンスは、`Terminating:Wait` 状態に達したときに一時停止してカスタムアクションを実行します。ただし、スケールインでインスタンスをウォームプールに戻すインスタンスの再使用ポリシーを指定した場合、ウォームプールに戻るインスタンスは `Warmed:Pending:Wait` 状態で一時停止して `EC2_INSTANCE_TERMINATING` ライフサイクルアクションにカスタムアクションを実行します。
+ アプリケーションの要求によってウォームプールが枯渇した場合、Amazon EC2 Auto Scaling はグループが最大容量に到達していない限り、 Auto Scaling グループでインスタンスを直接起動できます。インスタンスがグループ内で直接起動する場合、インスタンスは `Pending:Wait` 状態でのみ一時停止してカスタムアクションを実行します。
+ 次の状態に遷移するまでにインスタンスが待機状態を維持する時間を制御するには、**complete-lifecycle-action** コマンドを使用するようカスタムアクションを設定します。ライフサイクルフックを使用すると、インスタンスは、指定されたライフサイクルアクションが完了したことをユーザーが Amazon EC2 Auto Scaling に通知するか、タイムアウト期間が終了するまで (デフォルトでは 1 時間) 待機状態のままになります。

スケールアウトイベントのフローの概要を次に示します。

![\[スケールアウトイベントのフロー図。\]](http://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/images/warm-pools-scale-out-event-diagram.png)


インスタンスが待機状態になると、Amazon EC2 Auto Scaling は通知を送信します。これらの通知の例については、このガイドの EventBridge セクションを参照してください。詳しくは、「[ウォームプールのイベントとパターンの例](warm-pools-eventbridge-events.md)」を参照してください。

## サポートされている通知ターゲット
<a name="warm-pools-supported-notification-targets"></a>

Amazon EC2 Auto Scaling は、ライフサイクル通知の通知ターゲットとして、次のいずれかを定義するためのサポートを提供します。
+ EventBridge ルール
+ Amazon SNS トピック 
+ Amazon SQS キュー
+ AWS Lambda 関数

**重要**  
起動時にインスタンスを設定するユーザーデータ (cloud-init) スクリプトが起動テンプレートまたは起動設定にある場合、起動または再起動されるインスタンスでカスタムアクションを実行するための通知を受け取る必要はありません。

次のセクションでは、通知ターゲットの設定方法について説明しているドキュメントへのリンクを示します。

**EventBridge ルール**: Amazon EC2 Auto Scaling がインスタンスを待機状態にする際にコードを実行するには、EventBridge ルールを作成し、ターゲットとして Lambda 関数を指定します。異なるライフサイクル通知に基づいて異なる Lambda 関数を呼び出すには、複数のルールを作成し、各ルールを特定のイベントパターンおよび Lambda 関数に関連付けます。詳細については、「[ウォームプールイベント向けの EventBridge ルールを作成する](warm-pool-events-eventbridge-rules.md)」を参照してください。

**Amazon SNS トピック**: インスタンスが待機状態になったときに通知を受け取るには、Amazon SNS トピックを作成し、メッセージ属性に基づいてライフサイクル通知を異なる方法で配信するように、Amazon SNS メッセージフィルタリングを設定します。詳細については、「[Amazon SNS を使用した通知の受信](prepare-for-lifecycle-notifications.md#sns-notifications)」を参照してください。

**Amazon SQS キュー**: 関連するコンシューマーがライフサイクル通知を受け取って処理できる配信ポイントを設定するには、Amazon SQS キュー、および SQS キューからのメッセージを処理するキューコンシューマーを作成します。キューコンシューマーに、メッセージ属性に基づいてライフサイクル通知を別々に処理させる場合は、特定の属性が目的の値と一致する際にメッセージを解析、処理するようにキューコンシューマーを設定する必要があります。詳細については、「[Amazon SQS を使用した通知の受信](prepare-for-lifecycle-notifications.md#sqs-notifications)」を参照してください。

**AWS Lambda 関数** — Amazon EC2 Auto Scaling がインスタンスを待機状態にしたときにカスタムコードを実行するには、通知ターゲットとして Lambda 関数を指定できます。Lambda 関数はライフサイクル通知データで呼び出されるため、インスタンス設定、アプリケーションセットアップ、他の AWS サービスとの統合などのカスタムアクションを実行できます。Auto Scaling のサービスにリンクされたロールが関数を呼び出せるように、Lambda 関数のリソースベースのポリシーを設定する必要があります。詳細については、「[通知を AWS Lambda に直接ルーティングする](prepare-for-lifecycle-notifications.md#lambda-notification)」を参照してください。

# Auto Scaling グループのためにウォームプールを作成する
<a name="create-warm-pool"></a>

このトピックでは、Auto Scaling グループのウォームプールを作成する方法について説明します。

**重要**  
続行する前に、ウォームプールを作成するための[前提条件](ec2-auto-scaling-warm-pools.md#warm-pool-prerequisites)を満たし、Auto Scaling グループのためにライフサイクルフックが作成されていることを確認します。

## ウォームプールを作成する
<a name="create-a-warm-pool"></a>

Auto Scaling グループのためにウォームプールを作成するには、次の手順を実行します。

**ウォームプールを作成するには (コンソール)**

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

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

   ページの下部に分割されたペインが開きます。

1. [**インスタンス管理**] タブを選択します。

1. [**ウォームプール**] で、**ウォームプールの作成**を選択します。

1. ウォームプールを設定するには、次の手順を実行します。

   1. **ウォームプールインスタンスの状態**で、インスタンスがウォームプールに入ったときに、どの状態に移行するかを選択します。デフォルト値は `Stopped` です。

   1. **最小ウォームプールサイズ**に、ウォームプールに維持するインスタンスの最小数を入力します。

   1. **インスタンスの再利用** の場合、**[スケールインで再利用]** チェックボックスをオンにすると、スケールインで Auto Scaling グループのインスタンスをウォームプールに戻すことができます。

   1. **[ウォームプールサイズ]** で、使用可能なオプションを 1 つ選択します。
      + **デフォルトの仕様**: ウォームプールのサイズは、Auto Scaling グループの最大容量と希望する容量の数値の差によって決まります。このオプションは、ウォームプール管理を合理化します。ウォームプールを作成すると、グループの最大容量を調整するだけで、ウォームプールのサイズを簡単に更新できます。
      + **カスタム仕様**: ウォームプールのサイズはAuto Scaling グループのカスタム値と希望する容量の数値の差によって決まります。このオプションを使用すると、グループの最大容量とは別に、ウォームプールのサイズを柔軟に管理できます。

1. **[現在の設定に基づく推定ウォームプールサイズ]** セクションを表示して、デフォルトまたはカスタム仕様がウォームプールのサイズにどのように適用されるかを確認します。ウォームプールのサイズは、Auto Scaling グループの希望する容量によって異なります。この容量は、グループがスケールすると変化します。

1. **[作成]** を選択します。

## 混合インスタンスグループでのインスタンスタイプの選択
<a name="warm-pool-mixed-instance-types"></a>

Auto Scaling は、グループに混合インスタンスポリシーが設定されている場合、スケーリングイベント中にウォームプールに既に存在するインスタンスタイプを優先します。起動動作:

1. Auto Scaling は、ウォームプールで使用可能なインスタンスタイプを使用してインスタンスを起動しようとします。

1. ウォーム起動が失敗した場合、Auto Scaling は混合インスタンスポリシーの残りのインスタンスタイプをすべて使用してコールド起動を試みます。

**Example**  
**例**  
Auto Scaling グループに 10 個のインスタンスタイプを設定し、ウォームプールにそれらのインスタンスタイプが 6 個含まれているとします。スケールアウト中、Auto Scaling はまずウォームプールから 6 個のインスタンスタイプを試行します。失敗した場合、Auto Scaling はコールド起動を通じて、設定されたすべてのインスタンスタイプを試行します。

これにより、完全な混合インスタンス設定の柔軟性を維持しながら、可能な限りウォームプールのパフォーマンス上の利点を得ることができます。

## ウォームプールを削除する
<a name="delete-warm-pool"></a>

ウォームプールが不要になった場合は、次の手順にしたがって削除します。

**ウォームプールを削除するには (コンソール)**

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

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

   ページの下部に分割されたペインが開きます。

1. [**インスタンス管理**] タブを選択します。

1. **[Warm pool]** (ウォームプール) で、**[Actions]** (アクション)、**[Delete]** (削除) の順に選択します。

1. 確認を求めるメッセージが表示されたら、[削除] を選択してください。****

# ヘルスチェックのステータスとヘルスチェックの失敗理由を表示する
<a name="warm-pools-health-checks-monitor-view-status"></a>

ヘルスチェックにより、Amazon EC2 Auto Scaling は、インスタンスが異常であり、終了する必要があるタイミングを判断できます。ウォームプールインスタンスが`Stopped`状態の場合、Amazon EBS が`Stopped`インスタンスの可用性を確認して、異常なインスタンスを特定します。これは、`DescribeVolumeStatus`API を使用して、インスタンスにアタッチされている EBS ボリュームのステータスを判別できます。ウォームプールインスタンスの`Running`状態では、EC2 ステータスチェックに依存して、インスタンスの健全性を判断します。ウォームプールインスタンスのヘルスチェック猶予期間はありませんが、Amazon EC2 Auto Scaling はライフサイクルフックが終了するまで、インスタンスのヘルスチェックを開始しません。

インスタンスが異常であることが判明した場合、Amazon EC2 Auto Scaling は自動的に異常インスタンスを削除し、新しいインスタンスを作成して置き換えます。インスタンスは、通常、ヘルスチェックに失敗してから数分以内に終了します。詳細については、「[ヘルスチェック不合格の理由を表示する](replace-unhealthy-instance.md)」を参照してください。

カスタムヘルスチェックもサポートされています。これは、インスタンスの状態を検出し、この情報を Amazon EC2 Auto Scaling に送信できる独自のヘルスチェックシステムがある場合に役立ちます。詳細については、「[Auto Scaling グループに対してカスタムヘルスチェックを設定する](set-up-a-custom-health-check.md)」を参照してください。

Amazon EC2 Auto Scaling コンソールで、ウォームプールインスタンスのステータス（正常または異常）を、ウォームプールインスタンスのステータスを表示できます。 AWS CLI または SDKs のいずれかを使用して、ヘルスステータスを表示することもできます。

**ウォームプールインスタンスのステータスを表示するには (コンソール)**

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. [**Instance management (インスタンス管理)**] タブにある、[**Warm pool instances (ウォームプールインスタンス)**] の [**Lifecycle (ライフサイクル)**] 列にインスタンスの状態が表示されます。

   -**ヘルスステータス**列には、Amazon EC2 Auto Scaling がインスタンスの健全性に対して行った評価が表示されます。
**注記**  
新しいインスタンスは正常に起動します。ライフサイクルフックが終了するまで、インスタンスの健全性はチェックされません。

**ヘルスチェックの失敗の理由を表示するには (コンソール)**

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 グループがインスタンスを正常に起動したか、終了したかが表示されます。

   正常でないインスタンスを終了した場合、**原因**列には、終了の日時、およびヘルスチェックが失敗した理由が表示されます。例えば、「2021-04-01T 21:48:35 Z で、EBS ボリュームのヘルスチェックの失敗に応じて、インスタンスがサービス停止されました」と表示されます。

**ウォームプールインスタンスのステータスを表示するには (AWS CLI)**  
Auto Scaling グループのウォームプールを表示するには、以下を使用します。[describe-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-warm-pool.html)コマンドを実行します。

```
aws autoscaling describe-warm-pool --auto-scaling-group-name my-asg
```

出力例。

```
{
    "WarmPoolConfiguration": {
        "MinSize": 0,
        "PoolState": "Stopped"
    },
    "Instances": [
        {
            "InstanceId": "i-0b5e5e7521cfaa46c",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        },
        {
            "InstanceId": "i-0e21af9dcfb7aa6bf",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        }
    ]
}
```

**ヘルスチェックの失敗理由を表示するには (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
```

以下に、応答の例を示します。`Description`は、Auto Scaling グループがインスタンスを終了したことを示し、`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 EBS volume health check failure.",
      "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"
    },
...
  ]
}
```

# を使用したウォームプールの作成と管理の例 AWS CLI
<a name="examples-warm-pools-aws-cli"></a>

ウォームプールは、、 AWS Command Line Interface (AWS CLI) AWS マネジメントコンソール、または SDKs を使用して作成および管理できます。

次の例では、 AWS CLIを使用してウォームプールを作成、管理する方法を示します。

**Topics**
+ [例 1: インスタンスを `Stopped` 状態に保つ](#warm-pool-configuration-ex1)
+ [例 2: インスタンスを `Running` 状態に保つ](#warm-pool-configuration-ex2)
+ [例 3: インスタンスを `Hibernated` 状態に保つ](#warm-pool-configuration-ex3)
+ [例 4: スケールイン時にインスタンスをウォームプールに戻す](#warm-pool-configuration-ex4)
+ [例 5: ウォームプール内のインスタンスの最小数を指定する](#warm-pool-configuration-ex5)
+ [例 6: カスタム仕様を使用してウォームプールのサイズを定義する](#warm-pool-configuration-ex6)
+ [例 7: 絶対的なウォームプールサイズを定義する](#warm-pool-configuration-ex7)
+ [例 8: ウォームプールを削除する](#delete-warm-pool-cli)

## 例 1: インスタンスを `Stopped` 状態に保つ
<a name="warm-pool-configuration-ex1"></a>

以下の [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) の例では、インスタンスを `Stopped` 状態に保持するウォームプールを作成します。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped
```

## 例 2: インスタンスを `Running` 状態に保つ
<a name="warm-pool-configuration-ex2"></a>

以下の [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) の例では、インスタンスを `Stopped` 状態の代わりに `Running` 状態に保持するウォームプールを作成します。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Running
```

## 例 3: インスタンスを `Hibernated` 状態に保つ
<a name="warm-pool-configuration-ex3"></a>

以下の [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) の例では、インスタンスを `Stopped` 状態の代わりに `Hibernated` 状態に保持するウォームプールを作成します。これにより、メモリコンテンツ (RAM) を削除せずにインスタンスを停止できます。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Hibernated
```

## 例 4: スケールイン時にインスタンスをウォームプールに戻す
<a name="warm-pool-configuration-ex4"></a>

以下の [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) の例では、インスタンスを `Stopped` 状態に保持し、`--instance-reuse-policy` オプションを含むウォームプールを作成します。インスタンスの再利用ポリシー値 `'{"ReuseOnScaleIn": true}'` は Amazon EC2 Auto Scaling に対し、Auto Scaling グループがスケールインしたときにインスタンスをウォームプールに戻すよう指示します。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --instance-reuse-policy '{"ReuseOnScaleIn": true}'
```

## 例 5: ウォームプール内のインスタンスの最小数を指定する
<a name="warm-pool-configuration-ex5"></a>

以下の [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) の例では、4 つ以上のインスタンスを保持できるウォームプールを作成し、トラフィックスパイクの処理に使用可能なインスタンスを 4 つ以上保持します。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 4
```

## 例 6: カスタム仕様を使用してウォームプールのサイズを定義する
<a name="warm-pool-configuration-ex6"></a>

Amazon EC2 Auto Scaling は、デフォルトでウォームプールのサイズを Auto Scaling グループの最大容量と希望する容量の数値の差として管理します。ただし、`--max-group-prepared-capacity` オプションを使用して、グループの最大容量とは別に、ウォームプールのサイズを管理できます。

次の [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) の例では、ウォームプールを作成し、ウォームプールと Auto Scaling グループの両方に同時に存在できるインスタンスの最大数を設定します。グループの希望容量が 800 の場合、このコマンドの実行後にウォームプールが初期化されると、最初のサイズは 100 になります。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900
```

ウォームプール内のインスタンスの最小数を維持するには、次のように、コマンドを使用して`--min-size`オプションを、含めます。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900 --min-size 25
```

## 例 7: 絶対的なウォームプールサイズを定義する
<a name="warm-pool-configuration-ex7"></a>

`--max-group-prepared-capacity` および `--min-size` オプションを同じ値に設定すると、ウォームプールは絶対サイズになります。以下の [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) の例では、10 個のインスタンスのウォームプールサイズを一定に維持するウォームプールを作成します。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 10 --max-group-prepared-capacity 10
```

## 例 8: ウォームプールを削除する
<a name="delete-warm-pool-cli"></a>

以下の [delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html) コマンドを使用して、ウォームプールを削除します。

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg
```

ウォームプールにインスタンスがある場合、またはスケーリングアクティビティが進行中の場合は、[delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html)コマンドを`--force-delete`オプションで使用します。このオプションにより、Amazon EC2 インスタンスおよび未処理のライフサイクルアクションも終了します。

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg --force-delete
```