Amazon EC2 Auto Scaling (日本語)
ユーザーガイド

スケールイン時にどの Auto Scaling インスタンスを削除するかを制御する

各 Auto Scaling グループでは、ネットワークアーキテクチャに対してインスタンスを追加 (スケールアウト) したり、インスタンスを削除 (スケールイン) したりするタイミングをコントロールできます。インスタンスのアタッチやデタッチを行うことで、グループのサイズを手動でスケーリングすることができます。また、スケーリングポリシーを使用することで、このプロセスを自動化することもできます。

スケールイン中に最初に終了するインスタンスを指定するには、Auto Scaling グループの終了ポリシーを設定します。

オプションで、自動スケールイン時に特定のインスタンスが終了されるのを防ぐために、インスタンスの保護を使用できます。Auto Scaling グループのインスタンスの場合、スケールインイベントが発生したときにインスタンスを保護するには、Amazon EC2 Auto Scaling の機能を使用します。インスタンスが誤って終了されないように保護する場合は、Amazon EC2 終了保護を使用します。

注記

複数のインスタンスタイプと購入オプションを使用する Auto Scaling グループ の場合、スケールインアクションでは、オンデマンドベース数と、オンデマンドインスタンスとスポットインスタンスの設定された割合が考慮されます。グループがスケールインされると、まず、Auto Scaling グループはこれら 2 つのタイプのインスタンスのどちらを終了するかを識別します。次に、そのタイプのインスタンスが最も多いアベイラビリティーゾーンを選択し、デフォルトまたはカスタマイズされた終了ポリシーを適用します。

デフォルトの終了ポリシー

このセクションでは、スケールインイベントが発生したときに Auto Scaling グループによって使用されるデフォルトの終了ポリシーについて説明します。このデフォルトの終了ポリシーは、高可用性を得るためにインスタンスがアベイラビリティーゾーンに均等に配分されるように設計されています。デフォルトのポリシーは汎用性と柔軟性があり、さまざまなシナリオに対応できます。

デフォルトの終了ポリシーでは、Auto Scaling グループの動作は以下のようになります。

  1. インスタンスが最も多く、スケールインから保護されていないインスタンスが最低 1 つあるアベイラビリティーゾーンを決定します。

    インスタンスが最も多いアベイラビリティーゾーンから選択する保護されていないインスタンスが複数ある場合は、以下の条件に基づいて (示されている順に適用)、終了するインスタンスが選択されます。

  2. [複数のインスタンスタイプと購入オプションを使用する Auto Scaling グループ のみの場合]

    残りのインスタンスが、終了するオンデマンドインスタンスまたはスポットインスタンスの配分戦略、現在選択されているインスタンスタイプ、N 個の最低価格のスポットプールへの分散に合うように、終了するインスタンスを決定します。このようなインスタンスが 1 つある場合、そのインスタンスを終了します。それ以外の場合は、次の条件を適用します。

  3. [起動テンプレートを使用する Auto Scaling グループの場合]

    いずれかのインスタンスが最も古い起動テンプレートを使用しているかどうかを判断します。このようなインスタンスが 1 つある場合、そのインスタンスを終了します (例外が 1 つあります。グループがもともと起動設定を使用していた場合です。Amazon EC2 Auto Scaling は、その起動設定を使用するインスタンスを終了してから、最も古い起動テンプレートを使用するインスタンスを終了します)。

  4. [起動設定を使用する Auto Scaling グループの場合]

    いずれかのインスタンスが最も古い起動設定を使用しているかどうかを判断します。このようなインスタンスが 1 つある場合、そのインスタンスを終了します。

  5. 2 から 4 のすべての基準を適用した後で、終了する保護されていないインスタンスが複数ある場合は、どのインスタンスが次の課金時間に最も近いかを判別します。このようなインスタンスが 1 つある場合、そのインスタンスを終了します (次の課金時間に最も近いインスタンスを終了すると、時間単価のインスタンスを最大限に活用できます)。

    注記

    オンデマンドインスタンスでは、実行するインスタンスに応じて、コンピューティング性能に対して 1 時間あたりまたは 1 秒あたりの料金が発生します。Auto Scaling グループが Amazon Linux または Ubuntu を使用している場合は、EC2 の使用に対して 1 秒あたりの料金が発生します。詳細については、「Amazon EC2 料金表」を参照してください。

  6. 次の課金時間に最も近い保護されていないインスタンスが複数ある場合、これらのインスタンスのいずれかをランダムに選択します。

起動設定を使用する Auto Scaling グループを検討します。そのグループには、1 つのインスタンスタイプ、2 つのアベイラビリティーゾーン、希望する容量の 2 つのインスタンスが含まれます。また、特定のしきい値に達した場合にインスタンスを 1 つ増減するスケーリングポリシーも含まれます。このグループの 2 つのインスタンスは、以下のように分散されます。


                    基礎となる Auto Scaling グループ。

スケールアウトポリシーのしきい値が満たされた場合、ポリシーは有効になり、Auto Scaling グループは新しいインスタンスを起動します。その結果、Auto Scaling グループには 3 つのインスタンスが含まれ、次のように分散されます。


                    スケーリングアクションが発生した後の Auto Scaling グループ。

スケールインポリシーのしきい値が満たされた場合、ポリシーは有効になり、Auto Scaling グループはインスタンスの 1 つを終了します。グループに特定の終了ポリシーが割り当てられていない場合、デフォルトの終了ポリシーを使用します。2 つのインスタンスを含むアベイラビリティーゾーンを選択し、最も古い起動設定から起動されたインスタンスを終了します。インスタンスが同じ起動設定から起動されている場合、Auto Scaling グループは次の課金時間に最も近いインスタンスを選択して終了します。

Amazon EC2 Auto Scaling を使用した高可用性の詳細については、「複数のアベイラビリティーゾーンへのインスタンスの分散」を参照してください。

終了ポリシーのカスタマイズ

通常、Auto Scaling グループに割り当てられるデフォルトの終了ポリシーはほとんどの状況に対応しています。ただし、デフォルトのポリシーをカスタマイズされたポリシーに置き換えることもできます。

終了ポリシーをカスタマイズするとき、グループに使用されている他のアベイラビリティーゾーンより多くのインスタンスが含まれるアベイラビリティーゾーンがある場合、終了ポリシーはそのバランスのとれていないアベイラビリティーゾーンのインスタンスに適用されます。グループで使用されているアベイラビリティーゾーン間でバランスがとれている場合、終了ポリシーはグループのすべてのアベイラビリティーゾーンに適用されます。

Amazon EC2 Auto Scaling は以下のカスタム終了ポリシーをサポートしています。

  • OldestInstance。グループ内の最も古いインスタンスを削除します。このオプションは、Auto Scaling グループ内のインスタンスを新しい EC2 インスタンスタイプにアップグレードする場合に役立ちます。より古いタイプのインスタンスをより新しいタイプのインスタンスに徐々に置き換えることができます。

  • NewestInstance。グループ内の最も新しいインスタンスを削除します。このポリシーは、新しい起動設定をテストするが、新しい設定は本稼働環境には保持しない場合に便利です。

  • OldestLaunchConfiguration.最も古い起動設定のインスタンスを削除します。このポリシーは、グループを更新し、以前の設定を使用しているインスタンスを廃止する場合に便利です。

  • ClosestToNextInstanceHour.次の課金時間に最も近いインスタンスを削除します。このポリシーは、インスタンスの使用を最大化し、Amazon EC2 の使用コストを管理するのに役立ちます。

  • Default.デフォルトの終了のポリシーに従って、インスタンスを終了します。このポリシーは、グループに複数のスケーリングポリシーがある場合に便利です。

  • OldestLaunchTemplate。最も古い起動テンプレートを使用するインスタンスを終了します。このポリシーでは、現在の起動テンプレートを使用していないインスタンスが最初に終了され、その後、現在の起動テンプレートのうち最も古いバージョンを使用するインスタンスが終了されます。このポリシーは、グループを更新し、以前の設定を使用しているインスタンスを廃止する場合に便利です。

  • AllocationStrategy。Auto Scaling グループのインスタンスを終了して、残りのインスタンスを、終了するインスタンスのタイプ (スポットインスタンスまたはオンデマンドインスタンス) の配分戦略に合わせます。このポリシーは、優先するインスタンスタイプが変更されたときに便利です。N 個の最低価格のスポットプール間でのスポットインスタンスの分散を徐々に再調整できます。優先度の低いタイプのオンデマンドインスタンスを優先度の高いタイプのオンデマンドインスタンスに徐々に置き換えることもできます。

終了ポリシーをカスタマイズするには (コンソール)

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Auto Scaling グループ] を選択します。

  3. Auto Scaling グループを選択します。

  4. [Actions] で、[Edit] を選択します。

  5. [Details] タブで、[Termination Policies] を見つけます。1 つ以上の終了ポリシーを選択します。複数のポリシーを選択する場合は、適用する順にリストします。[デフォルト] ポリシーを使用する場合は、リストの最後のポリシーとします。

  6. [Save (保存)] を選択します。

終了ポリシーをカスタマイズするには (AWS CLI)

以下のいずれかのコマンドを使用します。

これらのポリシーを個別に使用することも、ポリシーのリストに組み合わせることもできます。たとえば、次のコマンドを使用して、最初に OldestLaunchConfiguration ポリシーを使用し、その後で ClosestToNextInstanceHour ポリシーを使用するように Auto Scaling グループを更新します。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration" "ClosestToNextInstanceHour"

Default の終了ポリシーを使用する場合、終了ポリシーのリストでは最後のポリシーになるように指定します。たとえば、--termination-policies "OldestLaunchConfiguration" "Default" と指定します。

インスタンスの保護

スケールイン時に Auto Scaling グループが特定のインスタンスを終了できるかどうかをコントロールするには、インスタンスの保護を使用します。インスタンスの保護の設定は、Auto Scaling グループまたは個別の Auto Scaling インスタンスで有効にできます。Auto Scaling グループがインスタンスを起動すると、インスタンスは Auto Scaling グループのインスタンスの保護の設定を継承します。Auto Scaling グループまたは Auto Scaling インスタンスにおけるインスタンスの保護の設定はいつでも変更できます。

インスタンスの保護は、インスタンスの状態が InService の場合に開始されます。終了から保護されているインスタンスをデタッチすると、インスタンスの保護の設定は失われます。インスタンスをグループに再度アタッチすると、グループの現在のインスタンスの保護を継承します。

Auto Scaling グループのすべてのインスタンスがスケールイン時の終了から保護されていて、スケールインイベントが発生した場合、希望する容量が減らされます。ただし、Auto Scaling グループはインスタンスの保護の設定が無効になるまで、必要な数のインスタンスを削除することはできません。

インスタンスの保護は、次の状況から Auto Scaling インスタンスを保護することはできません。

  • Amazon EC2 コンソール、terminate-instances コマンド、TerminateInstances アクションのいずれかを使用して、手動で終了します。手動の終了より Auto Scaling インスタンスを保護するには、Amazon EC2 終了保護を有効にします。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「終了保護の有効化」を参照してください。

  • インスタンスがヘルスチェックに失敗した場合のヘルスチェックの置換。詳細については、「Auto Scaling インスタンスのヘルスチェック」を参照してください。Amazon EC2 Auto Scaling による異常なインスタンスの終了を防止するには、ReplaceUnhealthy プロセスを停止します。詳細については、「スケーリングプロセスの中断と再開」を参照してください。

  • スポットインスタンスの中断。容量が使用できなくなった場合、またはスポット価格が上限価格を超えた場合、スポットインスタンスは終了されます。

グループのインスタンスの保護を有効にする

Auto Scaling グループを作成する際にインスタンスの保護を有効にすることができます。デフォルトで、インスタンスの保護は無効です。

インスタンスの保護を有効にするには (コンソール)

Auto Scaling グループを作成するとき、[Configure Auto Scaling group details (Auto Scaling グループ詳細の設定)] ページの [高度な詳細] で、[Instance Protection (インスタンスの保護)] から [Protect From Scale In] オプションを選択します。


                        ウィザードを使用してインスタンスの保護を有効にします。

インスタンスの保護を有効にするには (AWS CLI)

以下の create-auto-scaling-group コマンドを使用して、インスタンスの保護を有効にします。

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in ...

グループのインスタンスの保護の設定を変更する

Auto Scaling グループのインスタンスの保護の設定は、有効または無効にすることができます。

グループのインスタンスの保護の設定を変更するには (コンソール)

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Auto Scaling グループ] を選択します。

  3. Auto Scaling グループを選択します。

  4. [Details] タブで、[Edit] を選択します。

  5. [Instance Protection (インスタンスの保護)] で、[Protect From Scale In (スケールインから保護)] を選択します。

    
                                [Details] タブの [Instance Protection] フィールドを表示します。
  6. [Save (保存)] を選択します。

グループのインスタンスの保護設定を変更するには (AWS CLI)

以下の update-auto-scaling-group コマンドを使用して、指定した Auto Scaling グループのインスタンスの保護を有効にします。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in

次のコマンドを使用して、指定したグループのインスタンスの保護を無効にします。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --no-new-instances-protected-from-scale-in

インスタンスにおけるインスタンスの保護の設定を変更する

デフォルトで、インスタンスは所属する Auto Scaling グループからインスタンスの保護の設定を取得します。ただし、インスタンスにおけるインスタンスの保護はいつでも有効または無効にできます。

インスタンスに対するインスタンスの保護設定を変更するには (コンソール)

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Auto Scaling グループ] を選択します。

  3. Auto Scaling グループを選択します。

  4. [Instances] タブで、インスタンスを選択します。

  5. インスタンスの保護を有効にするには、[Actions]、[Instance Protection]、[Set Scale In Protection] の順に選択します。プロンプトが表示されると、[Set Scale In Protection] を選択します。

  6. インスタンスの保護を無効にするには、[Actions]、[Instance Protection]、[Remove Scale In Protection] の順に選択します。プロンプトが表示されたら、[Remove Scale In Protection (スケールイン保護の削除)] を選択します。

インスタンスに対するインスタンスの保護設定を変更するには (AWS CLI)

以下の set-instance-protection コマンドを使用して、指定したインスタンスに対するインスタンスの保護を有効にします。

aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --protected-from-scale-in

次のコマンドを使用して、指定したインスタンスにおけるインスタンスの保護を無効にします。

aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --no-protected-from-scale-in