スキップマッチングでのインスタンスの更新の使用 - Amazon EC2 Auto Scaling

スキップマッチングでのインスタンスの更新の使用

スキップマッチングは、既に最新の更新が適用されているインスタンスを無視するように Amazon EC2 Auto Scaling に指示します。これにより、必要以上のインスタンスを置き換えることはありません。これは Auto Scaling グループが特定のバージョンの起動テンプレートを使用していることを確認し、異なるバージョンを使用するインスタンスのみを置き換えたいときに役立ちます。

スキップマッチングを使用する際は、以下を考慮してください。

  • スキップマッチングと必要な設定の両方でインスタンスの更新を開始する場合、Amazon EC2 Auto Scaling は必要な設定と一致するインスタンスがあるかどうかをチェックします。次に、必要な設定に一致しないインスタンスのみを置き換えます。インスタンスの更新に成功した後、Amazon EC2 Auto Scaling はグループを更新して必要な設定を反映させます。

  • スキップマッチングでインスタンスの更新を開始しても、必要な設定を指定しない場合、Amazon EC2 Auto Scaling は、Auto Scaling グループに最後に保存した設定と一致するインスタンスがあるかどうかをチェックします。次に、最後に設定した構成と一致しないインスタンスのみが置き換えられます。

  • スキップマッチングは、新しい起動テンプレート、起動テンプレートの新しいバージョン、一連のインスタンスタイプにで使用できます。スキップマッチングを有効にしますが、これらのうちどれも変更されていない場合は、インスタンスの更新はインスタンスを置き換えることなく直ちに成功します。必要な設定にその他の変更 (スポット割り当て戦略の変更など) を行った場合、Amazon EC2 Auto Scaling はインスタンスの更新が成功するまで待機します。次に、新しい必要な設定を反映するように Auto Scaling グループ設定を更新します。

  • 新しい起動設定では、スキップマッチングを使用することはできません。

  • スキップマッチングでインスタンスの更新中に、$Default または $Latest のいずれかを起動テンプレートに指定されている場合、Amazon EC2 Auto Scaling は各インスタンスが置き換えられるたびに起動テンプレートのバージョンを再評価します。したがって、インスタンスがまだ置き換え中に起動テンプレートの新しいバージョンを作成する場合、Amazon EC2 Auto Scaling は起動テンプレートの新しいバージョンを使用することになります。これにより、Amazon EC2 Auto Scaling がグループ全体に新しいバージョンを適用すると同時に、以前に置き換えたインスタンスが再び置き換えられる可能性があります。

このセクションでは、スキップマッチングを有効にしてインスタンスの更新を開始するための AWS CLI 指示が含まれます。コンソールを使用する手順については、「インスタンスの更新の開始 (コンソール)」を参照してください。

このセクションのステップに従い、AWS CLI を使用して次の手順を実行します。

  • インスタンスに適用する起動テンプレートを作成します。

  • インスタンスの更新を開始して起動テンプレートを Auto Scaling グループに適用します。スキップマッチングを有効にしない場合、すべてのインスタンスが置き換えられます。これは、インスタンスのプロビジョニングに使用した起動テンプレートが、必要な設定に指定した起動テンプレートと同じであっても当てはまります。

新しい起動テンプレートでスキップマッチングを使用するには
  1. create-launch-template」コマンドを使用し、Auto Scaling グループに新しい起動テンプレートを作成します。Auto Scaling グループに作成されたインスタンスの詳細を定義する --launch-template-data オプションおよび JSON 入力を含めます。

    例えば、次のコマンドを使用して AMI ID ami-0123456789abcdef0 および t2.micro インスタンスタイプを含む基本的な起動テンプレートを作成します。

    aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \ --launch-template-data '{"ImageId":"ami-0123456789abcdef0","InstanceType":"t2.micro"}'

    成功すると、コマンドは以下のような出力を返します。

    { "LaunchTemplate": { "LaunchTemplateId": "lt-068f72b729example", "LaunchTemplateName": "my-template-for-auto-scaling", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "CreateTime": "2023-01-30T18:16:06.000Z", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }

    詳細については、「AWS Command Line Interface(AWS CLI) での起動テンプレートの作成と管理の例」を参照してください。

  2. start-instance-refresh」コマンドを使用し、インスタンス置き換えワークフローを開始して ID lt-068f72b729example を含む新しい起動テンプレートを適用します。起動テンプレートは新しいため、バージョンは 1 つしかありません。つまり、起動テンプレートの 1 バージョンはこのインスタンスの更新の対象となります。インスタンスの更新中にスケールアウトイベントが発生し、かつ Amazon EC2 Auto Scaling がこの起動テンプレートのバージョン 1 を使用して新しいインスタンスをプロビジョニングする場合は置き換えられません。操作が正常に完了すると、新しい起動テンプレートが Auto Scaling グループに正常に適用されます。

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

    config.json の内容。

    { "AutoScalingGroupName": "my-asg", "DesiredConfiguration": { "LaunchTemplate": { "LaunchTemplateId": "lt-068f72b729example", "Version": "$Default" } }, "Preferences": { "SkipMatching": true } }

    成功すると、コマンドは以下のような出力を返します。

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

混合インスタンスポリシーに Auto Scaling グループがある場合、このセクションの手順に従って、AWS CLI を使用してスキップマッチングでインスタンスの更新を開始します。次のオプションがあります。

  • ポリシーで指定されたすべてのインスタンスタイプに適用する新しい起動テンプレートを指定します。

  • ポリシーの起動テンプレートを変更するかどうかを問わず、更新された一連のインスタンスタイプを指定します。例えば、不要なインスタンスタイプから移行できます。起動テンプレートは、置き換えるインスタンスの AMI、セキュリティグループ、その他の詳細を変更せず、そのまま使用します。

ニーズに合ったオプションに応じて、次のいずれかのセクションにある手順に従ってください。

新しい起動テンプレートでスキップマッチングを使用するには
  1. create-launch-template」コマンドを使用し、Auto Scaling グループに新しい起動テンプレートを作成します。Auto Scaling グループに作成されたインスタンスの詳細を定義する --launch-template-data オプションおよび JSON 入力を含めます。

    例えば、次のコマンドを使用して AMI ID ami-0123456789abcdef0 を含む起動テンプレートを作成します。

    aws ec2 create-launch-template --launch-template-name my-new-template --version-description version1 \ --launch-template-data '{"ImageId":"ami-0123456789abcdef0"}'

    成功すると、コマンドは以下のような出力を返します。

    { "LaunchTemplate": { "LaunchTemplateId": "lt-04d5cc9b88example", "LaunchTemplateName": "my-new-template", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "CreateTime": "2023-01-31T15:56:02.000Z", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }

    詳細については、「AWS Command Line Interface(AWS CLI) での起動テンプレートの作成と管理の例」を参照してください。

  2. Auto Scaling グループの既存の混合インスタンスポリシーを表示するには、「describe-auto-scaling-group」コマンドを実行します。この情報は、インスタンスの更新を開始する次のステップで必要になります。

    次のコマンドの例では、my-asg という名前の Auto Scaling グループに設定された混合インスタンスポリシーを返します。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    成功すると、コマンドは以下のような出力を返します。

    { "AutoScalingGroups":[ { "AutoScalingGroupName":"my-asg", "AutoScalingGroupARN":"arn", "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-073693ed27example", "LaunchTemplateName":"my-old-template", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" }, { "InstanceType":"m5a.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } }, "MinSize":1, "MaxSize":5, "DesiredCapacity":4, ... } ] }
  3. start-instance-refresh」コマンドを使用し、インスタンス置き換えワークフローを開始して ID lt-04d5cc9b88example を含む新しい起動テンプレートを適用します。起動テンプレートは新しいため、バージョンは 1 つしかありません。つまり、起動テンプレートの 1 バージョンはこのインスタンスの更新の対象となります。インスタンスの更新中にスケールアウトイベントが発生し、かつ Amazon EC2 Auto Scaling がこの起動テンプレートのバージョン 1 を使用して新しいインスタンスをプロビジョニングする場合は置き換えられません。操作が正常に完了すると、更新された混合インスタンスポリシーが Auto Scaling グループに正常に適用されます。

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

    config.json の内容。

    { "AutoScalingGroupName":"my-asg", "DesiredConfiguration":{ "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-04d5cc9b88example", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" }, { "InstanceType":"m5a.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } } } }, "Preferences":{ "SkipMatching":true } }

    成功すると、コマンドは以下のような出力を返します。

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

次の手順では、起動テンプレートを変更せずに更新された一連のインスタンスタイプを指定します。

更新された一連のインスタンスタイプでスキップマッチングを使用するには
  1. Auto Scaling グループの既存の混合インスタンスポリシーを表示するには、「describe-auto-scaling-group」コマンドを実行します。この情報は、インスタンスの更新を開始する次のステップで必要になります。

    次のコマンドの例では、my-asg という名前の Auto Scaling グループに設定された混合インスタンスポリシーを返します。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    成功すると、コマンドは以下のような出力を返します。

    { "AutoScalingGroups":[ { "AutoScalingGroupName":"my-asg", "AutoScalingGroupARN":"arn", "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-073693ed27example", "LaunchTemplateName":"my-template-for-auto-scaling", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" }, { "InstanceType":"m5a.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } }, "MinSize":1, "MaxSize":5, "DesiredCapacity":4, ... } ] }
  2. start-instance-refresh コマンドを使用し、インスタンス置き換えワークフローを開始して更新を適用します。特定のインスタンスタイプを使用するインスタンスを置き換える場合、必要な設定で希望するインスタンスタイプのみを含む混合インスタンスポリシーを指定する必要があります。代わりに新しいインスタンスタイプを追加するかどうかを選択できます。

    次のコマンドの例では、不要なインスタンスタイプ m5a.large なしでインスタンスの更新を開始します。グループ内のインスタンスタイプが残り 3 つのインスタンスタイプのいずれかと一致しないとき、インスタンスは置き換えられます。(インスタンスの更新は、新しいインスタンスをプロビジョンするインスタンスタイプを選択しませんのでご注意ください。代わりに割り当て戦略によって選択されます) 操作が正常に完了すると、更新された混合インスタンスポリシーが Auto Scaling グループに正常に適用されます。

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

    config.json の内容

    { "AutoScalingGroupName":"my-asg", "DesiredConfiguration":{ "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-073693ed27example", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } } } }, "Preferences":{ "SkipMatching":true } }