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

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

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

自動スケールインを設定する場合は、最初に終了するインスタンスを決定し、終了ポリシーを設定する必要があります。

スケールインする際に、特定のインスタンスが終了されるのを防ぐために、インスタンスの保護を使用することもできます。

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

このデフォルトの終了ポリシーは、ネットワークアーキテクチャを各アベイラビリティーゾーンに均等にまたがって設定できるように設計されています。デフォルトの終了ポリシーでは、Auto Scaling グループの動作は次のようになります。

  1. インスタンスが複数のアベイラビリティーゾーンにある場合、インスタンスが最も多く、スケールインから保護されていないインスタンスが最低 1 つあるアベイラビリティーゾーンを選択します。複数のアベイラビリティーゾーンでこのインスタンス数が同じである場合、最も古い起動設定を使用するインスタンスのあるアベイラビリティーゾーンを選択します。

  2. 選択したアベイラビリティーゾーンで、保護されていないどのインスタンスが最も古い起動設定を使用しているかを判断します。このようなインスタンスが 1 つある場合、そのインスタンスを削除します。

  3. 最も古い起動設定を使用するインスタンスが複数ある場合、次の課金時間に最も近い保護されていないインスタンスを判断します。(これは、EC2 インスタンスの使用を最大化し、Amazon EC2 の使用コストを管理するのに役立ちます。)このようなインスタンスが 1 つある場合、そのインスタンスを削除します。

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

次のフロー図は、デフォルトの終了ポリシーの処理を示しています。

 Auto Scaling グループがデフォルトの終了ポリシーを使用してインスタンスを終了する方法を示すフローチャート。

2 つのアベイラビリティーゾーンを含む Auto Scaling グループがあり、インスタンスの希望する容量が 2 つで、特定のしきい値に達した場合にインスタンスを 1 つ増減するスケーリングポリシーがあるとします。このグループの 2 つのインスタンスは、次のように分散されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

コンソールを使用して終了ポリシーをカスタマイズするには

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

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

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

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

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

  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 インスタンスを保護するには、終了保護を有効にします。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「終了保護の有効化」を参照してください。

  • インスタンスがヘルスチェックに失敗した場合のヘルスチェックの置換。

  • スポットインスタンスの中断。

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

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

コンソールを使用してインスタンスの保護を有効にする

Auto Scaling グループを作成するとき、[Configure Auto Scaling group details] ページの [Advanced Details] で、[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 Groups] を選択します。

  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 Groups] を選択します。

  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