属性ベースのインスタンスタイプの選択を使用して Auto Scaling グループを作成する - Amazon EC2 Auto Scaling

属性ベースのインスタンスタイプの選択を使用して Auto Scaling グループを作成する

Auto Scaling グループを作成する際、Amazon EC2 インスタンスを設定するために必要な情報、そのインスタンスのアベイラビリティーゾーンと VPC サブネット、希望するキャパシティー、キャパシティー制限の最小値と最大値を指定する必要があります。

混合インスタンスグループの作成時に、インスタンスタイプを手動で選択する代わりに、コンピューティング要件を記述しているインスタンス属性のセットを指定できます。Amazon EC2 Auto Scaling がインスタンスを起動するとき、Auto Scaling グループで使用されるインスタンスタイプは、必要なインスタンス属性と一致している必要があります。これは属性ベースのインスタンスタイプの選択と呼ばれます。

Auto Scaling グループまたは起動テンプレートは、インスタンス上で実行しようとするアプリケーションに必要なメモリのキャパシティーと、コンピューティング能力とを含む、インスタンスの属性を指定します。さらに、Auto Scaling グループまたは起動テンプレートでは、スポットインスタンスとオンデマンドインスタンスに対して料金保護のしきい値が 2 つ 指定されており、必要に応じてカスタマイズできます。これにより Amazon EC2 Auto Scaling では、必要のない場合に、より高価なインスタンスタイプが起動することのないようにできます。

このアプローチは、コンテナやビッグデータ、CI/CD など、柔軟にインスタンスタイプを使用するワークロードとフレームワークに最適です。

属性ベースのインスタンスタイプを選択すると、次の利点があります。

  • Amazon EC2 Auto Scaling は、幅広いインスタンスタイプからスポットインスタンスを選択して起動できます。これは、インスタンスタイプに対して柔軟であるという、スポットのベストプラクティスを満たしています。これにより、Amazon EC2 スポットサービスが必要なコンピューティング性能を見つけ、割り当てられる機会に恵まれます。

  • 利用可能なオプションの数が多いため、ワークロードに適したインスタンスタイプを見つけるには時間がかかることがあります。インスタンスの属性を指定すると、混合インスタンスグループを設定するときに、インスタンスタイプを簡単に選択できます。

  • Auto Scaling グループは、リリースされた時点で、新しい世代のインスタンスタイプを使用できます。要件に一致し、かつ Auto Scaling グループのために選択した割り当て戦略にマッチする場合には、新しい世代のインスタンスタイプが自動的に使用されます。

AWS Management Console、AWS CLI、または SDK 経由で、属性ベースのインスタンスタイプを選択できます。

起動テンプレートで属性ベースのインスタンスタイプの選択を設定する方法については、「Auto Scaling グループの起動テンプレートを作成する」を参照してください。SDK を使用して、Amazon EC2 Auto Scaling API 呼び出しでパラメータを渡して属性ベースのインスタンスタイプの選択を設定する方法については、「Amazon EC2 Auto Scaling API Reference」 (Amazon EC2 Auto Scaling API リファレンス) の「InstanceRequirements」を参照してください。

属性ベースのインスタンスタイプの選択について、詳細は AWS ブログの「Attribute-Based Instance Type Selection for EC2 Auto Scaling and EC2 Fleet」 (EC2 Auto Scaling および EC2 フリートにおける属性ベースのインスタンスタイプの選択) を参照してください。

考慮事項

属性ベースのインスタンスタイプの選択を使用する場合に考慮すべき点は、次のとおりです。

  • ほとんどの汎用的なワークロードでは、必要な vCPU とメモリの数を指定すれば十分です。高度なユースケースでは、ストレージのタイプ、ネットワークインターフェイス、CPU の製造元、アクセラレーターのタイプなどの属性を指定できます。

  • デフォルトでは、Auto Scaling グループで希望するキャパシティー値を、インスタンスの数として設定します。属性ベースのインスタンスタイプの選択を使用する場合は、オプションで vCPU の数またはメモリーの総量として希望するキャパシティータイプを指定できます。次に、Amazon EC2 Auto Scaling によってインスタンスが起動されると、それらの vCPU の数またはメモリーの総量が希望するキャパシティーに対してカウントされます。Amazon EC2 Auto Scaling コンソールでグループを作成する場合、この設定は[Configure group size and scaling policies] (グループサイズとスケーリングポリシーを設定する) ページの[Group size] (グループサイズ) セクションに表示されます。この機能は、インスタンスの重み付け機能の代わりに使えます。

  • インスタンスを起動することなくコンピューティング要件に一致するインスタンスタイプをプレビューでき、必要に応じて要件を調整できます。Amazon EC2 Auto Scaling コンソールで Auto Scaling グループを作成すると、[Choose instance launch options] (インスタンス起動オプションを選択) ページの [Preview matching instance types] (一致するインスタンスタイプのプレビュー) セクションに、インスタンスタイプのプレビューが表示されます。

  • または、AWS CLI か SDK を使用して Amazon EC2 GetInstanceTypesFromInstanceRequirements API コールを実行し、インスタンスタイプをプレビューすることもできます。Auto Scaling グループの作成または更新のリクエストの中で、正しい形式で InstanceRequirements パラメーターを渡します。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「指定された属性でインスタンスタイプをプレビューする」を参照してください。

料金保護について理解する

料金保護は、Auto Scaling グループのインスタンスタイプ間で、極端に料金に差が発生することを防ぐ機能です。新しい Auto Scaling グループを作成するか、属性ベースのインスタンスタイプを選択して既存の Auto Scaling グループを更新すると、料金保護がデフォルトで有効になります。オプションで、スポットインスタンスとオンデマンドインスタンスの料金保護のしきい値を選択できます。指定したしきい値よりも料金が高いインスタンスタイプは、Amazon EC2 Auto Scaling では選択されません。しきい値は、絶対値ではなく、ベースラインを上回るパーセンテージで定義された、お支払いの希望額を表します。ベースラインは、指定した属性を持つ最も低コストの現行世代 M、C、R インスタンスタイプの料金によって決定されます。M、C、または R のいずれのインスタンスタイプにも属性が一致しない場合、最低料金のインスタンスタイプが使用されます。

しきい値を指定しなかった場合、デフォルトで次のものが使用されます。

  • オンデマンドインスタンスの場合、料金保護のしきい値は 20% に設定されます。

  • スポットインスタンスの場合、料金保護のしきい値は 100% に設定されます。

Amazon EC2 Auto Scaling コンソールで Auto Scaling グループを作成するときにこれらの値を更新する場合には、[Choose instance launch options] (インスタンス起動オプションを選択) ページで、[Additional instance attributes] (追加のインスタンス属性) ドロップダウンリストから希望する料金保護属性を選択し、テキストボックスに属性の値を入力するか、属性値を選択します。コンソールから Auto Scaling グループを編集するか、AWS CLI または SDK から関連するパラメータを渡すことで、これらの値をいつでも更新できます。

注記

希望する容量タイプvCPUまたはメモリ GiB に設定した場合、料金保護のしきい値は、インスタンスごとの料金ではなく、vCPU 単位またはメモリあたりの料金に基づいて適用されます。

前提条件

Amazon マシンイメージ (AMI) やセキュリティグループなどの EC2 インスタンスの起動に必要なパラメータを含む、起動テンプレートを作成します。詳細については、「Auto Scaling グループの起動テンプレートを作成する」を参照してください。

起動テンプレートの使用に必要なアクセス許可があることを確認してください。起動テンプレートを使用すると、ec2:RunInstances アクセス許可がチェックされます。起動テンプレートで IAM ロールを指定している場合は、iam:PassRole アクセス許可もチェックされます。詳細については、「起動テンプレートのサポート」を参照してください。

属性ベースのインスタンスタイプの選択を使用する

以下の手順は、属性ベースのインスタンスタイプの選択を使用して Auto Scaling グループを作成する方法の説明です。

  • インスタンスを起動する起動テンプレートを指定します。

  • Auto Scaling グループを起動する VPC とサブネットを選択します。

  • 起動テンプレートの既存のインスタンスタイプ要件を新しい要件で上書きするオプションを選択します。

  • vCPU、メモリ、およびストレージなどのコンピューティング要件に一致するインスタンス属性を指定します。

  • 起動するオンデマンドインスタンスとスポットインスタンスの割合を指定します。

  • Amazon EC2 Auto Scaling が可能なインスタンスタイプからオンデマンドとスポットのキャパシティーを満たす方法を決定する割り当て戦略を選択します。

  • グループサイズを指定します。これには、最小キャパシティー、最大キャパシティー、希望する容量、および測定単位が含まれます。

作業を開始する前に、「前提条件」で説明されている通りに起動テンプレートが作成されていることを確認してください。

起動テンプレートがまだスポットインスタンスをリクエストしていないことを確認します。

属性ベースのインスタンスタイプの選択を使用して、Auto Scaling グループを作成するには (コンソール)
  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

  2. 画面の上部のナビゲーションバーで、起動テンプレートを作成したときに使用したのと同じ AWS リージョン を選択します。

  3. [Auto Scaling グループの作成] を選択します。

  4. [起動テンプレートまたは起動設定を選択する] ページで [Auto Scaling グループ名] にAuto Scaling グループの名前を入力します。

  5. 起動テンプレートを選択するには、以下の手順を実行します。

    1. [起動テンプレート] で、既存の起動テンプレートを選択します。

    2. [起動テンプレートのバージョン] で、スケールアウト時に Auto Scaling グループで使用する起動テンプレートのバージョン (デフォルト、最新、または特定のバージョン) を選択します。

    3. 起動テンプレートが、使用する予定のすべてのオプションをサポートしていることを確認し、[次へ] を選択します。

  6. インスタンスを起動する VPC とサブネットを選択するには、以下の手順を実行します。

    1. [Network] (ネットワーク) の下にある [Choose instance launch options] (インスタンス起動オプションを選択) ページで、[VPC] から VPC を選択します。Auto Scaling グループは、起動テンプレートで指定したセキュリティグループと、同じ VPC 内に作成する必要があります。

    2. [Availability Zones and subnets] (アベイラビリティーゾーンとサブネット) で、指定した VPC 内のサブネットを 1 つ以上選択します。複数のアベイラビリティーゾーンのサブネットを使用することで、高可用性を得られます。詳細については、「VPC サブネットを選択する場合の考慮事項」を参照してください。

  7. 属性ベースのインスタンスタイプの選択を使用するようにグループを設定するには、以下の手順を実行します。

    1. [Instance type requirements] (インスタンスタイプの要件) で、[Override launch template] (起動テンプレートを上書きする) を選択します。

      注記

      要件が既に含まれている起動テンプレートを選択した場合は、起動テンプレートで定義された設定 (vCPU およびメモリなど) が、使用する属性として自動的に入力されます。これらの属性は、Amazon EC2 Auto Scaling コンソールから必要に応じていつでも更新できます。

    2. [Specify instance attributes] (インスタンスの属性を指定する) で、まず vCPU とメモリの要件を入力します。

      • vCPUs (vCPU): コンピューティング要件に対応する vCPU の最小数と最大数を入力します。それに関して制限がないことを示すには、[No minimum] (最小値なし) または [No maximum] (最大値なし) チェックボックスをオンにします。

      • [Memory (MiB)] (メモリの量 (MiB)): コンピューティング要件に対応する最小メモリ量と最大メモリ量を MiB 単位で入力します。それに関して制限がないことを示すには、[No minimum] (最小値なし) または [No maximum] (最大値なし) チェックボックスをオンにします。

    3. (オプション) コンピューティング要件をより詳細に表現するには、[Additional instance attributes] (その他のインスタンス属性) で[Add attribute] (属性の追加) を選択します。ここで選択する属性と値によって、起動できるインスタンスタイプがさらに細かく定義されます。

      サポートされるすべての属性に関する詳細については、「Amazon EC2 Auto Scaling API Reference」(Amazon EC2 Auto Scaling API リファレンス) の「InstanceRequirements」を参照してください。

    4. [Preview matching instance types] (一致するインスタンスタイプのプレビュー)で、vCPU、メモリ、ストレージなど、指定されたコンピューティング要件に一致するインスタンスタイプを確認します。

    5. [Instance purchase options] (インスタンスの購入オプション) の [Instances distribution] (インスタンスの分散) で、オンデマンドインスタンスとスポットインスタンスとして起動されるグループの割合をそれぞれ指定します。アプリケーションが、ステートレスでフォールトトレラントであり、中断されるインスタンスを扱える場合は、より高い割合のスポットインスタンスを指定できます。

    6. スポットインスタンスの割合を指定するときは、[Include On-Demand base capacity] (オンデマンドベース容量を含める) の横にあるチェックボックスをオンにすることができます。その後、オンデマンドインスタンスによって満たされる必要がある Auto Scaling グループの最小初期キャパシティーを指定します。ベースキャパシティーを超える場合は、[Instances distribution] (インスタンスの分散) 設定を使用して、起動するオンデマンドインスタンスとスポットインスタンスの数を決定します。

    7. [Allocation strategies] (配分戦略) の[Lowest price] (最低価格) は、[On-Demand allocation strategy] (オンデマンドの配分戦略) によって自動的に選択され、変更できません。

    8. [Spot allocation strategy] (スポット配分戦略) で、配分戦略を選択します。[Capacity optimized] (キャパシティー最適化) の設定は、デフォルトのままにすることをお勧めします。デフォルトを維持しない場合は、[Lowest price (最低価格)] を選択し、最低価格のスポットインスタンスプールの数を入場し、多様化します。

    9. [キャパシティーの再調整] で、キャパシティーの再調整を有効にするか無効にするかを選択します。

      スポットインスタンスの割合を選択した場合は、キャパシティーの再調整を使用して、スポットの中断によってスポットインスタンスが間もなく終了されるというシナリオに、自動化を通じて対応することができます。詳細については、「キャパシティーの再調整を使用して Amazon EC2 スポットの中断に対処する」を参照してください。

    10. 終了したら、[Next] (次へ) を2 回選択して [Configure group size and scaling policies] (グループサイズとスケーリングポリシーを設定する) ページに移動します。

  8. [Configure group size and scaling policies] (グループサイズとスケーリングポリシーを設定する) ステップでは、以下の手順を実行します。

    1. 希望する容量をインスタンス以外の単位で測定する場合は、[Desired capacity type] (希望する容量タイプ) に適切なオプションを選択します。[Units] (ユニット)、[vCPUs]、および [Memory GiB] (メモリ GiB) がサポートされています。デフォルトで、Amazon EC2 Auto Scaling は [Units] (ユニット) を指定します。これはインスタンスの数になります。

    2. [Desired capacity] (希望するキャパシティー) に Auto Scaling グループの初期サイズを入力し、必要に応じて、[Minimum capacity] (最小キャパシティー) と [Maximum capacity] (最大キャパシティー) を制限します。詳細については、「Auto Scaling グループにキャパシティーの制限を設定する」を参照してください。

    3. (オプション) ターゲット追跡スケーリングポリシーを使用してスケールするようにグループを設定するには、この時点でスケーリングポリシーを指定する、またはグループの作成後に指定するオプションがあります。詳細については、「Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー」を参照してください。

    4. (オプション) スケールインするときに Auto Scaling グループがインスタンスを終了しないようにするには、インスタンスのスケールイン保護を有効にします。詳細については、「インスタンスのスケールイン保護を使用する」を参照してください。

    5. 完了したら、[次へ] を選択します。

  9. (オプション) グループがスケールするときに通知を受け取るには、[Add notification] (通知の追加) で通知を設定してから、[Next] (次へ) を選択します。詳細については、「Auto Scaling グループのスケール時に Amazon SNS 通知を受け取る」を参照してください。

  10. (オプション) タグを追加するには、[タグの追加] を選択し、各タグのタグキーと値を指定し、[次へ] を選択します。詳細については、「Auto Scaling グループとインスタンスにタグを付ける」を参照してください。

  11. [Review (レビュー)]ページで、[Create Auto Scaling group (Auto Scaling グループを作成)] を選択します。

例: 属性ベースのインスタンスタイプの選択を使用して、Auto Scaling グループを作成する (AWS CLI)

コマンドラインを使用して、属性ベースのインスタンスタイプを選択した Auto Scaling グループを作成するには、次の create-auto-scaling-group コマンドを使用します。

次のインスタンス属性が指定されています。

  • VCpuCount — インスタンスタイプには、4 個以上、最大 8 個の vCPU が必要です。

  • MemoryMiB – インスタンスタイプには最低 16384 MiB のメモリが必要です。

  • CpuManufacturers — インスタンスタイプには、インテル製の CPU が必要です。

aws autoscaling create-auto-scaling-group --cli-input-json file://~/config.json

次は、config.json ファイルの例です。

{ "AutoScalingGroupName": "my-asg", "DesiredCapacityType": "units", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Default" }, "Overrides": [{ "InstanceRequirements": { "VCpuCount": {"Min": 4, "Max": 8}, "MemoryMiB": {"Min": 16384}, "CpuManufacturers": ["intel"] } }] }, "InstancesDistribution": { "OnDemandPercentageAboveBaseCapacity": 50, "SpotAllocationStrategy": "capacity-optimized" } }, "MinSize": 0, "MaxSize": 100, "DesiredCapacity": 4, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }

vCPU の数またはメモリーの総量として、希望するキャパシティー値を設定するには、ファイルで "DesiredCapacityType": "vcpu" または "DesiredCapacityType": "memory-mib" を指定します。希望するキャパシティータイプのデフォルトは units で、これはインスタンスの数を、希望するキャパシティー値として設定します。

または、以下の[create-auto-scaling-group] コマンドを使用して、JSON ファイルの代わりに Auto Scaling グループの唯一のパラメータとして YAML ファイルを参照して、Auto Scaling グループを作成できます。

aws autoscaling create-auto-scaling-group --cli-input-yaml file://~/config.yaml

次は、config.yaml ファイルの例です。

--- AutoScalingGroupName: my-asg DesiredCapacityType: units MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceRequirements: VCpuCount: Min: 2 Max: 4 MemoryMiB: Min: 2048 CpuManufacturers: - intel InstancesDistribution: OnDemandPercentageAboveBaseCapacity: 50 SpotAllocationStrategy: capacity-optimized MinSize: 0 MaxSize: 100 DesiredCapacity: 4 VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782

vCPU の数またはメモリーの総量として、希望するキャパシティー値を設定するには、ファイルで DesiredCapacityType: vcpu または DesiredCapacityType: memory-mib を指定します。希望するキャパシティータイプのデフォルトは units で、これはインスタンスの数を、希望するキャパシティー値として設定します。

制約事項

  • 属性ベースのインスタンスタイプの選択は、起動テンプレートを使用する Auto Scaling グループに対してのみ設定できます。

  • 既に Auto Scaling グループがあり、インスタンスタイプを必要なインスタンス属性に置き換えようとする場合、オンデマンドの配分戦略は lowest-price である必要があります。prioritized 配分戦略を使用するには、続けてインスタンスタイプを手動で追加し、優先順位を付ける必要があります。さらにスポット配分戦略は、capacity-optimized または lowest-price のいずれかである必要があります。capacity-optimized-prioritized 配分戦略を使用するには、インスタンスタイプを手動で追加し、優先順位を付ける必要があります。