スケールイン時にどの Auto Scaling インスタンスを終了するかを制御する - Amazon EC2 Auto Scaling (日本語)

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

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

各 Auto Scaling グループでは、ネットワークアーキテクチャに対してインスタンスを追加 (スケールアウト) したり、インスタンスを削除 (スケールイン) したりするタイミングを制御できます。希望する容量を調整してグループのサイズを手動でスケーリングするか、スケジュールに基づくスケーリングまたはスケーリングポリシーを使用してこのプロセスを自動化できます。

このトピックでは、デフォルトの終了ポリシーおよび独自のカスタマイズされた終了ポリシーの設定に使用できるオプションについて説明します。終了ポリシーを使用すると、スケールインイベントが発生したときにどのインスタンスを最初に終了するかを制御できます。

また、インスタンスのスケールイン保護を有効にして、自動スケールイン中に特定のインスタンスが終了しないようにする方法についても説明します。Auto Scaling グループのインスタンスの場合、スケールインイベントが発生したときにインスタンスを保護するには、Amazon EC2 Auto Scaling の機能を使用します。インスタンスが誤って終了されないように保護する場合は、Amazon EC2 終了保護を使用します。

混合インスタンスポリシーAuto Scalingを持つ グループについては、以下の点に注意してください。

  • Amazon EC2 Auto Scaling はまず、終了する 2 つのタイプ (スポットまたはオンデマンド) を識別します。次に、終了ポリシーを各アベイラビリティーゾーンに個別に適用し、終了するアベイラビリティーゾーンで(特定された購入オプション内で)どのインスタンスがアベイラビリティーゾーンでバランスを取るかを識別します。インスタンスタイプに重みが定義されている混合インスタンス設定を使用する Auto Scaling グループにも同じ原則が適用されます。

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

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

では、終了するインスタンスを選択する前に、インスタンスが最も多く存在するアベイラビリティーゾーンと、スケールインから保護されていないインスタンスが 1 つ以上あることを最初に確認します。Amazon EC2 Auto Scaling

選択されたアベイラビリティーゾーン内では、デフォルトの終了ポリシーの動作は次のとおりです。

  1. 終了するオンデマンドまたはスポットインスタンスの配分戦略に残りのインスタンスが合うように、終了するインスタンスを決定します。これは、Auto Scaling配分戦略を使用する混合インスタンスポリシーを指定する グループにのみ適用されます。

    たとえば、インスタンスの起動後、インスタンスタイプの優先順を変更します。スケールインイベントが発生すると、Amazon EC2 Auto Scaling は、優先度の低いインスタンスタイプからオンデマンドインスタンスを段階的に減らそうとします。

  2. どのインスタンスが最も古い起動テンプレートまたは起動設定を使用しているかを判断します。

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

      最も古い起動テンプレートを使用している (ただし起動設定を使用していない) インスタンスを判断します。Amazon EC2 Auto Scaling は、起動テンプレートを使用しているインスタンスを終了する前に、起動設定を使用しているインスタンスを終了します。

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

      どのインスタンスが最も古い起動設定を使用しているかを判断します。

  3. 上記のすべての基準を適用した後で、終了する保護されていないインスタンスが複数ある場合は、どのインスタンスが次の課金時間に最も近いかを判断します。次の課金時間に最も近い保護されていないインスタンスが複数ある場合、これらのインスタンスのいずれかをランダムに終了します。

    次の課金時間に最も近いインスタンスを終了すると、時間単価のインスタンスを最大限に活用できます。または、Auto Scaling グループが Amazon Linux または Ubuntu を使用している場合は、EC2 の使用に対して 1 秒あたりの料金が発生します。詳細については、「Amazon EC2 の料金」を参照してください。

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

アプリケーションに必要なバージョンを持つインスタンスを保持するなどの一般的なユースケースをサポートするために、デフォルトのポリシーをカスタマイズされたポリシーに置き換えることもできます。

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

Amazon EC2 Auto Scaling では、以下の終了ポリシーがサポートされています。

  • Default 。 デフォルトの終了ポリシーに従って、インスタンスを終了します。このポリシーは、他のポリシーより前にスポット配分戦略を評価して、スポットインスタンスが終了または置き換えられるたびに、最適なプール内のスポットインスタンスを引き続き使用する場合に役立ちます。また、たとえば、起動設定をオフにして起動テンプレートの使用を開始する場合にも役立ちます。

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

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

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

  • ClosestToNextInstanceHour 。 次の課金時間に最も近いインスタンスを削除します。これにより、時間単価のインスタンスを最大限に活用できます。

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

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

    注記

    Amazon EC2 Auto Scaling では、使用される終了ポリシーに関係なく、常に最初にアベイラビリティーゾーン間でインスタンスの負荷を分散します。その結果、より最近追加されたアベイラビリティーゾーンがある場合や、グループに使用されている他のアベイラビリティーゾーンよりも多くのインスタンスが 1 つのアベイラビリティーゾーンにある場合に、古いインスタンスより前に一部の新しいインスタンスが終了される場合があります。

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

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

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

  3. グループ [Auto Scaling] の横にあるチェックボックスをオンにします。

    [Auto Scaling グループ] ページの下部に分割ペインが開き、選択したグループに関する情報が表示されます。

  4. [詳細] タブで、[高度な設定]、[編集] の順に選択します。

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

  6. [Update (更新)] を選択します。

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

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

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

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 終了保護を有効にします。詳細については、https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#Using_ChangingDisableAPITermination の「終了保護の有効化Linux インスタンス用 Amazon EC2 ユーザーガイド」を参照してください。

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

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

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

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

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

Auto Scaling グループを作成するときに、[Configure group size and scaling policies (グループサイズとスケーリングポリシーの設定)] ページの [Instance scale-in protection (インスタンスのスケールイン保護)] で、[Enable instance scale-in protection (インスタンスのスケールイン保護を有効にする)] オプションを選択します。

インスタンスのスケールイン保護を有効にする (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] で、[Auto Scaling グループ] を選択します。

  3. Auto Scaling グループの横にあるチェックボックスをオンにします。

    [Auto Scaling グループ] ページの下部に分割ペインが開き、選択したグループに関する情報が表示されます。

  4. [詳細] タブで、[高度な設定]、[編集] の順に選択します。

  5. [インスタンスのスケールイン保護] で、[インスタンスのスケールイン保護を有効にする] を選択します。

  6. [Update (更新)] を選択します。

グループのインスタンスのスケールイン保護設定を変更する (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] で、[Auto Scaling グループ] を選択します。

  3. Auto Scaling グループの横にあるチェックボックスをオンにします。

    [Auto Scaling グループ] ページの下部に分割ペインが開き、選択したグループに関する情報が表示されます。

  4. [Instance management (インスタンス管理)] タブの [Instances (インスタンス)] で、インスタンスを選択します。

  5. インスタンスのスケールイン保護を有効にするには、[Actions (アクション)]、[Set scale-in protection (スケールイン保護を設定)] の順に選択します。プロンプトが表示されると、[Set scale-in protection (スケールイン保護を設定)] を選択します。

  6. インスタンスのスケールイン保護を無効にするには、[Actions (アクション)]、[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