インスタンスの更新に基づいて Auto Scaling インスタンスを置き換える - Amazon EC2 Auto Scaling

インスタンスの更新に基づいて Auto Scaling インスタンスを置き換える

インスタンス更新を使用して、Auto Scaling グループ内のインスタンスを更新できます。インスタンスを手動でいくつか置き換える必要はありません。これは、設定の変更でインスタンスの置き換えが必要であり、Auto Scaling グループにラージ ナンバーのインスタンスがある場合に便利です。

インスタンスの更新は、新しい Amazon マシンイメージ (AMI) または新しいユーザー データスクリプトがある場合に便利です。インスタンスの更新を使用するには、まず、新しい AMI またはユーザー データスクリプトを指定する新しい起動テンプレートを作成します。次に、インスタンスの更新をスタートして、グループ内のインスタンスの更新をすぐに開始します。

使用方法

以下のステップ例では、インスタンスの更新がどのように機能するかを示しています。

  • 起動テンプレートまたは希望する更新により新しい起動テンプレートバージョンを作成します。詳細については、「Auto Scaling グループの起動テンプレートを作成する」を参照してください。

  • 最小正常率、インスタンスのウォームアップ、チェックポイントを設定し、起動テンプレートを含む希望する設定を指定して、インスタンスの更新を開始します。希望の設定は、オプションで混合インスタンス・ポリシーが適用される。

  • Amazon EC2 Auto Scaling は、インスタンスのローリング置換の実行を開始します。一連のインスタンスをサービスから外し、それらを終了してから、新しい希望の設定で一連のインスタンスを起動します。次に、インスタンスがヘルスチェックに合格し、ウォームアップが完了するまで待機してから、他のインスタンスの置き換えに移行します。

  • グループの一定割合が置換されると、チェックポイントに到達します。チェックポイントがあると、Amazon EC2 Auto Scaling はインスタンスの置き換えを一時的に停止し、通知を送信し、指定した時間だけ待機してから続行します。通知を受け取ったら、新しいインスタンスが期待どおりに動作していることを確認できます。

  • インスタンスの更新が成功すると、Auto Scaling グループの設定は、オペレーションのスタート時に指定した設定で自動的に更新されます。

主要概念と用語

開始する前に、以下の インスタンスの更新の主要概念と用語を理解してください。

最小正常率

インスタンスの更新の開始のパートとして、常に維持する最小正常率を指定します。これは、インスタンス更新中にヘルスチェックに合格しなければならない、Auto Scaling グループのキャパシティーで、オペレーションを続行できるようにします。この値は、Auto Scaling グループの望ましいキャパシティーに対するパーセント値(最も近い整数値に切り上げ)で表されます。最小正常率を 100% に設定すると、置き換え率が一度に 1 つのインスタンスに制限されます。対照的に、0% に設定すると、すべてのインスタンスが同時に置き換えられます。

インスタンスのウォームアップ

インスタンスのウォームアップとは、新しいインスタンスの状態が InService に変更されてから、トラフィックを受信できるようになるまでの期間です。インスタンスの更新中、新しく起動されたインスタンスが正常であると判断した後、 Amazon EC2 Auto Scaling はすぐに次の置き換えに進みません。指定したウォームアップ期間を待ってから、他のインスタンスの置き換えに移ります。これは、アプリケーションがトラフィックの処理を開始する前のアプリケーション自体の初期化に時間がかかるという場合に役立ちます。

必要な設定

必要な設定は、Amazon EC2 Auto Scaling が Auto Scaling グループ全体にデプロイする新しい設定です。例えば、インスタンスの起動テンプレートとバージョンを指定できます。インスタンスの更新中に、Amazon EC2 Auto Scaling は Auto Scaling グループを希望の設定に更新します。インスタンスの更新中にスケールアウト イベントが発生した場合、Amazon EC2 Auto Scaling は、グループの現在の設定ではなく、希望の設定で新しいインスタンスを起動します。インスタンスの更新が成功すると、Amazon EC2 Auto Scaling は Auto Scaling グループの設定を更新して、インスタンスの更新のパートとして指定した新しい希望の設定を反映します。

スキップマッチング

スキップマッチングとは、Amazon EC2 Auto Scaling が希望の設定に一致するインスタンスの置き換えをスキップすることを意味します。必要な設定が指定されていない場合、既にグループに設定されている同じ設定を持つインスタンスの置き換えはスキップされます。スキップマッチングが有効になっていない場合、更新が必要かどうかに関係なく、Auto Scaling グループ内のすべてのインスタンスを新しいインスタンスに置き換えることができます。

チェックポイント

チェックポイントとは、インスタンスの更新が指定した時間だけ一時停止する時点のことです。インスタンスの更新には、複数のチェックポイントを含めることができます。Amazon EC2 Auto Scaling は各チェックポイントに対してイベントを発行するため、EventBridge ルールを追加して、チェックポイントに到達したときに通知を受けるイベントを Amazon SNS などのターゲットに送信できます。チェックポイントに到達した後で、デプロイを検証する機会があります。問題が特定された場合は、インスタンスの更新をキャンセルしてから、別のインスタンスの更新を開始してロールバックできます。更新プログラムを段階的にデプロイできることは、チェックポイントのキーの利点です。チェックポイントを使用しない場合、ローリング置換は継続的に実行されます。

考慮事項

以下に、グループが期待どおりに動作し続けるようにするために、インスタンスの更新を開始するときに考慮すべき事項を示します。

  • ウォームアップ設定をグループレベルで統一するために、インスタンスのデフォルトウォームアップ機能の有効化を検討することが推奨されます。詳細については、「Auto Scaling グループに対するインスタンスのデフォルトウォームアップを設定する」を参照してください。

  • ウォームアップ中、新しく起動されたインスタンスは Auto Scaling グループの集計インスタンスメトリクス (CPUUtilization、NetworkIn、NetworkOut など) に計上されません。

  • Auto Scaling グループにスケーリング ポリシーを追加した場合、スケーリングアクティビティは並行して実行されます。インスタンスの更新ウォームアップ期間に長い間隔を設定すると、新しく起動されたインスタンスがメトリクスに反映されるまでに時間がかかります。このため、適切なウォームアップ期間によって、Amazon EC2 Auto Scaling が古いメトリクスデータに基づいてスケーリングしないようにすることができます。

  • ライフサイクルフックを Auto Scaling グループに追加した場合、ウォームアップ期間がスタートするのは、ライフサイクルフックアクションが完了してインスタンスが InService 状態になってからになります。詳細については、「Amazon EC2 Auto Scaling のライフサイクルフック」を参照してください。

  • スキップマッチングを有効にしても、混合インスタンスポリシーの起動テンプレート、起動テンプレートのバージョン、インスタンスタイプが変更されていない場合、インスタンスの更新は置換を行わずにすぐに成功します。その他の変更(例えば、スポット割り当て戦略の変更)を行った場合、Amazon EC2 Auto Scaling は Auto Scaling グループの設定を更新して、インスタンスの更新が成功した後、新しい希望の設定を反映します。

インスタンスの更新のスタートまたはキャンセル(コンソール)

Amazon EC2 Auto Scaling コンソールを使用して、インスタンスの更新を作成、表示、キャンセルできます。初めてインスタンスの更新を開始する場合は、コンソールにより、利用できる機能とオプションを理解することができます。

Auto Scaling グループの混合インスタンスポリシーを事前定義していない場合は、次の手順に従います。混合インスタンスポリシーを事前定義している場合は、コンソールでインスタンスの更新を開始する (混合インスタンスグループ) を参照してインスタンスの更新を開始します。

インスタンスの更新をスタートするには

  1. Amazon EC2 Auto Scaling コンソール (https://console.aws.amazon.com/ec2autoscaling/) を開きます。

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

    Auto Scaling グループページの下部に分割ペインが開きます。

  3. [Instance refresh] (インスタンスの更新) タブの [Active instance refresh] (アクティブインスタンスの更新) で、[Start instance refresh] (インスタンスの更新を開始する) を選択します。

  4. [Minimum healthy percentage] (最小正常率) で、インスタンスの更新中に正常な状態を維持する必要がある Auto Scaling グループの割合を入力します。デフォルトは 90% です。低いパーセンテージを選択すると、終了と同時に置換されるインスタンスの数が増加します。

  5. [Instance warmup] (インスタンスのウォームアップ) には、新しいインスタンスの状態が InService に変更されてからトラフィックを受信できるようになるまでの秒数を入力するか、空のままにしてデフォルトウォームアップを維持します。

    空のままにしておくと、グループに対するインスタンスのデフォルトウォームアップがデフォルトになります (有効化されている場合)。インスタンスのデフォルトウォームアップが有効化されていない場合、インスタンスのウォームアップは、グループのヘルスチェック猶予期間の値にフォールバックします。

  6. (オプション) [Checkpoints] (チェックポイント) で [Enable checkpoints] (チェックポイントを有効にする) を選択し、インスタンスの更新に増分または段階的なアプローチを使用するインスタンスを置換します。これにより、置換セット間の検証にさらに時間がかかります。チェックポイントの有効化を選択しない場合、インスタンスはほぼ連続した 1 回のオペレーションで置換されます。

    チェックポイントを有効にする場合は、追加ステップ チェックポイントを有効にする (コンソール) を参照してください。

  7. スキップマッチングを有効または無効にする:

    • 現在の起動テンプレートにすでに一致しているインスタンスの置換をスキップするには、[Enable skip matching] (スキップマッチングを有効にする) のチェックボックスをオンのままにします。

    • このチェックボックスをオフにしてスキップマッチングを無効にすると、すべてのインスタンスを置換することができます。

    スキップマッチングを有効にすると、現在の起動テンプレートを使用する代わりに、新しい起動テンプレートまたは現在の起動テンプレートの新しいバージョンを、インスタンスの更新をスタートするページの希望する設定のセクションで設定できます。

    注記

    スキップマッチング機能を使用して、現在起動設定を使用している Auto Scaling グループを更新するには、希望する設定で起動テンプレートを選択する必要があります。起動設定でのスキップマッチングの使用はサポートされていません。

  8. (オプション) 希望する設定セクションを拡張して、Auto Scaling グループで実行する更新を指定します。

    この時点から、コンソールインターフェイスで選択する代わりに、JSON または YAML 構文を使用してパラメータ値を編集するように選択できます。このためには、[Use console interface] (コンソールインターフェイスを使用する) の代わりに[Use code editor] (コードエディタを使用する) を選択します。以下の手順では、コンソールインターフェイスを使用して選択する方法について説明します。

    1. 起動テンプレートを更新する場合:

      • Auto Scaling グループの新しい起動テンプレートまたは新しい起動テンプレートバージョンを作成していない場合は、このチェックボックスをオフのままにしておきます。

      • 新しい起動テンプレートまたは新しい起動テンプレートバージョンを作成した場合は、このチェックボックスをオンにします。このオプションを選択すると、Amazon EC2 Auto Scaling が現在の起動テンプレートと現在の起動テンプレートバージョンを表示し、利用可能な他のバージョンを一覧表示します。起動テンプレートを選択し、バージョンを選択します。

        バージョンを選択すると、バージョン情報が表示されます。これは、インスタンスの更新の一部としてインスタンスを置換するときに使用される起動テンプレートのバージョンです。インスタンスの更新に成功すると、グループのスケール時など、新しいインスタンスが起動するたびに起動テンプレートのこのバージョンが使用されます。

    2. インスタンスタイプと購入オプションのセットを選択して、起動テンプレートのインスタンスタイプを上書きする場合:

      • 起動テンプレートで指定したインスタンスタイプと購入オプションを使用するには、このチェックボックスをオフにします。

      • 起動テンプレートのインスタンスタイプを上書きする場合、または未使用の EC2 容量を利用してスポットインスタンスを実行し、コストを節約する場合は、このチェックボックスをオンにします。このオプションを選択すると、各インスタンスタイプを手動で追加するか、プライマリインスタンスタイプおよび一致する追加のインスタンスタイプを取得するレコメンデーションオプションを選択できます。スポットインスタンスを起動する予定がある場合は、選択したアベイラビリティーゾーンに十分なインスタンス容量がないときに Amazon EC2 Auto Scaling が別のインスタンスタイプを起動できるように、複数のインスタンスタイプを追加することをお勧めします。これらの設定の処理方法の詳細については、複数のインスタンスタイプと購入オプションを使用する Auto Scaling グループ を参照してください。

        警告

        Amazon EC2 スポットサービスで容量を再利用する必要がある場合は、スポットインスタンスの中断を処理できないアプリケーションでスポットインスタンスを使用しないでください。

      このチェックボックスをオンにした場合は、起動テンプレートがまだスポットインスタンスをリクエストしていないことを確認してください。スポットインスタンスをリクエストする起動テンプレートを使用して、複数のインスタンスタイプを使用する Auto Scaling グループを作成し、スポットインスタンスとオンデマンドインスタンスを起動することはできません。

      注記

      現在起動設定を使用している Auto Scaling グループでこれらのオプションを設定するには、起動テンプレートの更新で起動テンプレートを選択する必要があります。起動設定のインスタンスタイプの上書きはサポートされていません。

  9. すべての選択内容を見直し、正しく設定されていることを確認します。

    現在の設定と提案された変更の違いが、想定外または望ましくない形でアプリケーションに影響を及ぼさないよう、この時点で確認することをお勧めします。例えば、準仮想化 (PV) AMI から元のインスタンスを起動するにもかかわらず、ハードウェア仮想マシン (HVM) AMI でのみサポートされている現行世代のインスタンスタイプに変更する場合は、HVM AMI を使用する必要があります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドインスタンスタイプ変更の互換性を参照してください。

  10. インスタンス更新の選択内容が正しい場合は、[Start] (スタート) を選択します。

混合インスタンスポリシーで Auto Scaling グループを作成した場合は、次の手順に従います。グループに混合インスタンスポリシーをまだ定義していない場合は、コンソールでインスタンスの更新を開始する (基本的な手順) を参照してインスタンスの更新を開始します。

インスタンスの更新をスタートするには

  1. Amazon EC2 Auto Scaling コンソール (https://console.aws.amazon.com/ec2autoscaling/) を開きます。

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

    Auto Scaling グループページの下部に分割ペインが開きます。

  3. [Instance refresh] (インスタンスの更新) タブの [Active instance refresh] (アクティブインスタンスの更新) で、[Start instance refresh] (インスタンスの更新を開始する) を選択します。

  4. [Minimum healthy percentage] (最小正常率) で、インスタンスの更新中に正常な状態を維持する必要がある Auto Scaling グループの割合を入力します。デフォルト値は 90% です。低いパーセンテージを選択すると、終了と同時に置換されるインスタンスの数が増加します。

  5. [Instance warmup] (インスタンスのウォームアップ) には、新しいインスタンスの状態が InService に変更されてからトラフィックを受信できるようになるまでの秒数を入力するか、空のままにしてデフォルトウォームアップを維持します。

    空のままにしておくと、グループに対するインスタンスのデフォルトウォームアップがデフォルトになります (有効化されている場合)。インスタンスのデフォルトウォームアップが有効化されていない場合、インスタンスのウォームアップは、グループのヘルスチェック猶予期間の値にフォールバックします。

  6. (オプション) [Checkpoints] (チェックポイント) で [Enable checkpoints] (チェックポイントを有効にする) を選択し、インスタンスの更新に増分または段階的なアプローチを使用するインスタンスを置換します。これにより、置換セット間の検証にさらに時間がかかります。チェックポイントの有効化を選択しない場合、インスタンスはほぼ連続した 1 回のオペレーションで置換されます。

    チェックポイントを有効にする場合は、追加ステップ チェックポイントを有効にする (コンソール) を参照してください。

  7. スキップマッチングを有効または無効にする:

    • 現在の起動テンプレートとすでに一致しているインスタンスの置換とインスタンスタイプの上書きをスキップするには、[Enable skip matching] (スキップマッチングを有効にする) チェックボックスをオンのままにします。

    • このチェックボックスをオフにしてスキップマッチングを無効にすると、すべてのインスタンスを置換することができます。

    スキップマッチングを有効にすると、現在の起動テンプレートを使用する代わりに、新しい起動テンプレートまたは現在の起動テンプレートの新しいバージョンを、インスタンスの更新をスタートするページの希望する設定のセクションで設定できます。[Desired configuration] (希望する設定) でインスタンスタイプの上書きを更新することもできます。

  8. [Desired configuration] (希望する設定) セクションで以下を実行します。

    この時点から、コンソールインターフェイスで選択する代わりに、JSON または YAML 構文を使用してパラメータ値を編集するように選択できます。このためには、[Use console interface] (コンソールインターフェイスを使用する) の代わりに[Use code editor] (コードエディタを使用する) を選択します。以下の手順では、コンソールインターフェイスを使用して選択する方法について説明します。

    1. 起動テンプレートを更新する場合:

      • Auto Scaling グループの新しい起動テンプレートまたは新しい起動テンプレートバージョンを作成していない場合は、このチェックボックスをオフのままにしておきます。

      • 新しい起動テンプレートまたは新しい起動テンプレートバージョンを作成した場合は、このチェックボックスをオンにします。このオプションを選択すると、Amazon EC2 Auto Scaling が現在の起動テンプレートと現在の起動テンプレートバージョンを表示し、利用可能な他のバージョンを一覧表示します。起動テンプレートを選択し、バージョンを選択します。

        バージョンを選択すると、バージョン情報が表示されます。これは、インスタンスの更新の一部としてインスタンスを置換するときに使用される起動テンプレートのバージョンです。インスタンスの更新に成功すると、グループのスケール時など、新しいインスタンスが起動するたびに起動テンプレートのこのバージョンが使用されます。

    2. これらの設定を使用して、起動テンプレートで定義されているインスタンスタイプと購入オプションを上書きする場合:

      デフォルトでは、このチェックボックスはオンになっています。Amazon EC2 Auto Scaling により、現在、Auto Scaling グループの混合インスタンスポリシーで設定されている値が各パラメータに入力されます。変更するパラメータの値のみを更新します。これらの設定に関するガイダンスについては、複数のインスタンスタイプと購入オプションを使用する Auto Scaling グループ を参照してください。

      警告

      このチェックボックスはオフにしないことをお勧めします。混合インスタンスポリシーの使用を停止する場合にのみオフにします。インスタンスの更新に成功すると、Amazon EC2 Auto Scaling は希望する設定に一致するようグループを更新します。混合インスタンスポリシーが含まれなくなった場合、Amazon EC2 Auto Scaling は現在実行中のスポットインスタンスを徐々に終了し、オンデマンドインスタンスに置換します。または、起動テンプレートがスポットインスタンスをリクエストした場合、Amazon EC2 Auto Scaling は現在実行中のオンデマンドインスタンスを徐々に終了し、スポットインスタンスに置換します。

  9. すべての選択内容を見直し、正しく設定されていることを確認します。

    現在の設定と提案された変更の違いが、想定外または望ましくない形でアプリケーションに影響を及ぼさないよう、この時点で確認することをお勧めします。例えば、準仮想化 (PV) AMI から元のインスタンスを起動するにもかかわらず、ハードウェア仮想マシン (HVM) AMI でのみサポートされている現行世代のインスタンスタイプに変更する場合は、HVM AMI を使用する必要があります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドインスタンスタイプ変更の互換性を参照してください。

    インスタンス更新の選択内容が正しい場合は、[Start] (スタート) を選択します。

インスタンスの更新をキャンセルするには

  1. Amazon EC2 Auto Scaling コンソール (https://console.aws.amazon.com/ec2autoscaling/) を開きます。

  2. Auto Scaling グループのチェックボックスを選択します。

  3. [Active instance refresh] (アクティブインスタンスの更新) の [Instance refresh] (インスタンスの更新) タブで、[Cancel instance refresh] (インスタンスの更新をキャンセルする) を選択します。

  4. 確認を求められたら、[確認] を選択します。

インスタンスの更新のスタートまたはキャンセル(AWS CLI)

インスタンスの更新をスタートするには

start-instance-refreshコマンドを使用して、AWS CLIからインスタンスの更新をスタートします。JSON 設定ファイルでは、変更する任意の設定を指定できます。設定ファイルを参照するときは、次の例に示すように、ファイルのパスと名前を指定します。

aws autoscaling start-instance-refresh --cli-input-json file://config.json

config.json の内容:

{ "AutoScalingGroupName": "my-asg", "Preferences": { "InstanceWarmup": 60, "MinHealthyPercentage": 50 } }

または、次のコマンドを実行して、オプションの設定なしでインスタンスの更新を開始することもできます。設定が指定されない場合は、InstanceWarmup および MinHealthyPercentage にデフォルト値が使用されます。

aws autoscaling start-instance-refresh --auto-scaling-group-name my-asg

出力例:

{ "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b" }
注記

希望する設定を指定し、AWS CLIでスキップマッチングを有効にするには、追加のstart-instance-refreshAWS Command Line Interface (AWS CLI) によりスキップマッチングを有効にするインスタンス更新の例の例を参照してください。

インスタンスの更新をキャンセルするには

AWS CLIからcancel-instance-refreshコマンドを使ってインスタンスの更新をキャンセルするには、次の例に示すように、Auto Scaling グループの名前を指定します。

aws autoscaling cancel-instance-refresh --auto-scaling-group-name my-asg

出力例:

{ "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b" }

制約事項

  • インスタンスが起動前に終了する: Auto Scaling グループにインスタンスが 1 つしかない場合、インスタンスの更新を開始すると停止する場合があります。これは、Amazon EC2 Auto Scaling は 1 つのインスタンスを終了してから、新しいインスタンスを起動するためです。

  • 合計持続時間: インスタンスの更新がインスタンスをアクティブに置き換えることができる最大時間は、14 日間です。

  • インスタンスが置き換えられない: インスタンスがスタンバイ状態にあるか、スケールインから保護されている場合、そのインスタンスを置き換えることはできません。Amazon EC2 Auto Scaling で、置き換えることができないインスタンスが検出された場合、引き続き他のインスタンスは置き換えられます。

  • 1 時間のタイムアウト: アプリケーションがヘルスチェックに合格しなかったり、スタンバイ状態またはスケールインから保護されているインスタンスがあるためにインスタンスの更新で置換を続行できない場合、再試行が 1 時間続行されます。加えて、問題の解決に役立つステータスメッセージが表示されます。1 時間経っても問題が解決しない場合は、オペレーションは失敗となります。1 時的な問題が発生した場合に、回復する時間を与えることを意図しています。

  • ロールバック しない: インスタンスの更新はいつでもキャンセルできますが、既に置き換えられたインスタンスは前の設定にロールバックされません。インスタンスの更新に失敗しても、既に置き換えられたインスタンスは前の設定にロールバックされません。失敗したインスタンスの更新を修正するには、まず更新の失敗の原因となった根本的な問題を解決してから、別のインスタンスの更新を開始します。