複数のインスタンスタイプと購入オプションを使用する Auto Scaling グループ - Amazon EC2 Auto Scaling

複数のインスタンスタイプと購入オプションを使用する Auto Scaling グループ

1 つの Auto Scaling グループ内で、オンデマンドインスタンスとスポットインスタンスのフリートを起動してオートスケールできます。スポットインスタンスの使用で割引を受けるだけでなく、リザーブドインスタンスまたは Savings Plan を使用して、通常のオンデマンドインスタンス コストの割引料金を受け取ることができます。これらすべての要素を組み合わせることで、EC2 インスタンスのコストを最適な方法で削減しながら、アプリケーションに必要なスケールとパフォーマンスを確実に得ることができます。

まず、起動テンプレートで一般的な設定パラメータを指定し、Auto Scaling グループの作成時にそのテンプレートを選択します。Auto Scaling グループを設定すると、以下のことができます。

  • グループの 1 つ以上のインスタンスタイプを選択します (オプションで、起動テンプレートで指定されたインスタンスタイプを上書きします)。

  • 複数の起動テンプレートを定義して、異なる CPU アーキテクチャ(例えば、Arm と x86 など)のインスタンスを同じ Auto Scaling グループで起動することを許可します。

  • 各インスタンスタイプに個別の重みを付けます。これが便利なのは、たとえば、インスタンスタイプ別に異なる vCPU、メモリ、ストレージ、またはネットワーク帯域幅の機能を設定する場合です。

  • Savings Plan またはリザーブドインスタンスの割引料金の利点であるインスタンスタイプの優先順位を設定します。

  • 起動するオンデマンドキャパシティーとスポットキャパシティーを指定し、オプションのオンデマンドベース部分を指定します。

  • Amazon EC2 Auto Scaling がインスタンスタイプ間でどのようにオンデマンドキャパシティーとスポットキャパシティーを配分するかを定義します。

  • キャパシティーの再調整を有効にします。キャパシティーの再調整を有効にすると、Amazon EC2 スポットサービスがスポットインスタンスの中断リスクが高まっていることを通知したとき、Amazon EC2 Auto Scaling はスポットインスタンスを起動しようとします。新しいインスタンスを起動すると、古いインスタンスを終了します。詳細については、「キャパシティーの再調整を使用して Amazon EC2 スポットの中断に対処する」を参照してください。

可用性を高めるには、複数のアベイラビリティーゾーンで実行されている複数のインスタンスタイプ間でアプリケーションをデプロイします。使用できるインスタンスタイプは 1 つだけですが、選択したアベイラビリティーゾーンに十分なインスタンスキャパシティーがない場合に Amazon EC2 Auto Scaling が別のインスタンスタイプを起動することを許可する、いくつかのインスタンスタイプを使用するのがベストプラクティスです。スポットインスタンスでは、インスタンスキャパシティーが不足している場合、Amazon EC2 Auto Scaling はオンデマンドインスタンスを起動するのではなく、他のスポットインスタンス プール (選択したインスタンスタイプと割り当て戦略によって決まります) を試行し続けるため、スポットインスタンスのコスト削減を活用できます。

Auto Scaling グループの設定で複数のインスタンスタイプを関連付けるには、次の 2 つの方法があります。

  • このトピックで説明しているように、インスタンスタイプを手動で追加します。

  • Auto Scaling グループが使用するインスタンスタイプの、選択の基準となるインスタンス属性のセットを選択します。これは属性ベースのインスタンスタイプの選択と呼ばれます。詳細については、「Using attribute-based instance type selection」 (属性ベースのインスタンスタイプの選択を使用する) を参照してください。

配分戦略

以下の配分戦略では、Auto Scaling グループが可能なインスタンスタイプから [オンデマンドとスポットキャパシティー] の [] をどのように満たすかを決定しています。

Amazon EC2 Auto Scaling はまず、指定されたアベイラビリティーゾーン間でインスタンスの分散バランスを確認しようとします。次に、指定された配分戦略に従ってインスタンスタイプを起動します。

スポットインスタンス

Amazon EC2 Auto Scaling では、スポットインスタンスに使用できる、以下の配分戦略を提供しています。

capacity-optimized

Amazon EC2 Auto Scaling は、起動するインスタンスの数に最適なキャパシティーのスポットインスタンス プールから、インスタンスを割り当てます。この方法でデプロイすると、予備の EC2 キャパシティーを最も効率的に活用できます。

スポットインスタンスでは、価格は需要と供給の長期的な傾向に基づいて時間の経過とともに緩やかに変動しますが、キャパシティーはリアルタイムで変動します。capacity-optimized戦略では、リアルタイムのキャパシティーデータを調べ、可用性の最も高いプールを予測することで、そのプールから スポットインスタンス を自動的に起動します。これは、ビッグデータと分析、画像とメディアレンダリング、機械学習などのワークロードに適しています。また、作業の再開とチェックポイント設定に関連する中断に伴うコストが高くなる可能性がある高パフォーマンス コンピューティングにも適しています。中断の可能性を低くすることにより、capacity-optimized 戦略ではワークロードの全体的なコストを削減できます。

または、capacity-optimized-prioritized分配戦略を使用し、起動テンプレートのオーバーライドのリスト内のインスタンスタイプの順序を、優先順位の高いものから順番に (リストの最初から最後まで) 設定することもできます。Amazon EC2 Auto Scaling は、ベストエフォートベースでインスタンスタイプの優先順位を尊重しますが、まずはキャパシティーに合わせて最適化します。これは、中断の可能性を最小限に抑える必要があるワークロードに適したオプションですが、適切なインスタンスタイプを設定することも重要です。

lowest-price

Amazon EC2 Auto Scaling は、指定した N 個 のアベイラビリティーゾーンあたりのプールのうち、最低料金のスポットインスタンス プールからスポットインスタンスを割り当てます。

たとえば、4 つのインスタンスタイプと 4 つのアベイラビリティーゾーンを指定した場合、Auto Scaling グループは、最大 16 個 (各アベイラビリティーゾーンに 4 個) のスポットプールにアクセスできます。配分戦略で 2 つのスポットプール (N = 2) を指定した場合、Auto Scaling グループは、アベイラビリティーゾーンあたり 2 つの最安価なプールを引き出し、スポットキャパシティーを満たすことができます。

Amazon EC2 Auto Scalingは、ベストエフォート方式で指定した N 個のプールからスポットインスタンスを、引き出そうとすることにご注意ください。希望するキャパシティーを満たす前にプールにスポットキャパシティーの残量がなくなった場合、Amazon EC2 Auto Scaling は次の最も安価なプールのキャパシティーを利用してリクエストを満たします。希望するキャパシティーを確実に満たすために、スポットインスタンスが、指定した N 個を超えるプールから割り当てられることがあります。また、ほとんどのプールにスポットキャパシティーがない場合には、指定した N 個より少ないプールから希望するキャパシティーのすべてが割り当てられることがあります。

まずは、capacity-optimized 配分戦略を選択し、アプリケーションに適した少数のインスタンスタイプを指定することをお勧めします。さらに、インスタンスの起動時に Amazon EC2 Auto Scaling が選択するアベイラビリティーゾーンの範囲を定義できます。

オプションで、スポットインスタンスの上限価格を指定できます。上限価格を指定しない場合、デフォルトの上限価格はオンデマンド価格ですが、スポットインスタンスによって提供される大幅な割引は引き続き受けられます。これらの割引が可能なのは、新しいスポット料金モデルを使用して適用されるスポット料金が安定しているためです。

スポットインスタンスの配分戦略の詳細については、AWSブログの[Amazon EC2 スポットインスタンスのキャパシティー最適化配分戦略の紹介]を参照してください。

オンデマンドインスタンス

Amazon EC2 Auto Scaling では、オンデマンドインスタンスに使用できる、以下の配分戦略を提供しています。

lowest-price

Amazon EC2 Auto Scaling は、現在のオンデマンド料金に基づき、各アベイラビリティーゾーンで最も安価なインスタンスタイプを自動的にデプロイします。

必要なキャパシティーによっては、希望のキャパシティーを満たすために、各アベイラビリティーゾーンで複数のタイプのオンデマンドインスタンスを受け取る場合があります。

注記

現状、スケールインイベントの期間中に終了ポリシーを実装している場合は、Amazon EC2 Auto Scaling はオンデマンドインスタンスに対して、lowest-price 配分戦略を遵守しません。

prioritized

Amazon EC2 Auto Scaling グループは、起動テンプレートのリスト内でのインスタンスタイプの優先度を使用して、オンデマンドキャパシティーを満たすときに最初に使用するインスタンスタイプを決定します。たとえば、3 つの起動テンプレートの優先度を c5.largec4.largec3.large と指定したとします。オンデマンドインスタンスが起動されると、Auto Scaling グループは c5.largec4.largec3.largeの順でオンデマンドキャパシティーを満たします。

オンデマンドインスタンスの優先順位を管理する場合は、次の点を考慮してください。

Savings Plans またはリザーブドインスタンスを使用して、オンデマンドインスタンスの大幅な割引を受けるために、使用料を前払いでお支払いいただけます。Savings Plans またはリザーブドインスタンスの詳細については、「Amazon EC2 料金表」ページを参照してください。

  • リザーブドインスタンスでは、Amazon EC2 Auto Scaling が一致するインスタンスタイプを起動すると、通常のオンデマンドインスタンス コストの割引料金が適用されます。つまり、c4.large の未使用のリザーブドインスタンスがある場合、インスタンスタイプの優先順位を設定して、リザーブドインスタンスの最も高い優先順位を c4.large インスタンスタイプに付与できます。c4.large インスタンスが起動すると、リザーブドインスタンスの料金が発生します。

  • Savings Plans では、Amazon EC2 Instance Savings Plans または Compute Savings Plans を使用する場合、通常のオンデマンドインスタンス コストの割引料金が適用されます。Savings Plans には柔軟性があるため、インスタンスタイプの優先順位付けの柔軟性が高まります。Savings Plan でカバーされているインスタンスタイプを使用する限り、任意の順序で優先順位を設定でき、場合によってはその順序を完全に変更することもできます。また、Savings Plan によって提供される割引料金が適用され続けます。Savings Plans の詳細については、[Savings Plans ユーザーガイド] を参照してください。

オンデマンドインスタンスの割合を制御する

オンデマンドインスタンスとして起動される Auto Scaling グループのインスタンスの割合を完全にコントロールできます。インスタンスキャパシティーを常に確保するために、オンデマンドインスタンスとして起動されるグループのインスタンスの割合を指定できます。また、オプションで、起動されるオンデマンドインスタンスのベース数を指定することもできます。オンデマンドインスタンスのベースキャパシティーを指定することを選択した場合、Amazon EC2 Auto Scaling グループがスケールアウトしたときに、このベースキャパシティーのオンデマンドインスタンスを起動した後にのみ、Amazon EC2 Auto Scaling グループがスポットインスタンスを起動します。ベースキャパシティーを超える場合、オンデマンドインスタンスの割合を使用して、起動するオンデマンドインスタンスとスポットインスタンスの数が決まります。オンデマンドインスタンスの割合には、0 から 100 までの任意の数を指定できます。

Amazon EC2 Auto Scaling は、その割合を同等のインスタンス数に変換します。結果によって小数値がでる場合、Amazon EC2 Auto Scaling はオンデマンドインスタンスを優先して次の整数に切り上げられます。

サイズを増やす際の Auto Scaling グループの動作は以下のようになります。

例: スケーリング動作
インスタンスの分散 購入オプション全体における実行中のインスタンスの合計数
10 20 30 40
例 1
On-Demand base: 10 10 10 10 10
On-Demand percentage above base: 50% 0 5 10 15
Spot percentage: 50% 0 5 10 15
例 2
On-Demand base: 0 0 0 0 0
On-Demand percentage above base: 0% 0 0 0 0
Spot percentage: 100% 10 20 30 40
例 3
On-Demand base: 0 0 0 0 0
On-Demand percentage above base: 60% 6 12 18 24
Spot percentage: 40% 4 8 12 16
例 4
On-Demand base: 0 0 0 0 0
On-Demand percentage above base: 100% 10 20 30 40
Spot percentage: 0% 0 0 0 0
例 5
On-Demand base: 12 10 12 12 12
On-Demand percentage above base: 0% 0 0 0 0
Spot percentage: 100% 0 8 18 28

スポットインスタンスのベストプラクティス

スポットインスタンスをリクエストする Auto Scaling グループを作成する前に、[Linux インスタンス用 Amazon EC2 ユーザーガイド] の [EC2 スポットを利用するうえでのベストプラクティス] を参照してください。リクエストを計画するときにこれらのベストプラクティスを使用して、できるだけ低価格でインスタンスのタイプをプロビジョニングできるようにします。また、次のことをお勧めします。

  • オンデマンド価格であるデフォルトの上限料金を使用します。起動するスポットインスタンスのスポット価格のみを支払います。スポット価格が上限価格以下である場合、リクエストが落札されるかどうかは可用性によります。詳細については、[Linux インスタンス用 Amazon EC2 ユーザーガイド.] の [コストと削減] を参照してください。

  • 複数のインスタンスタイプを使用する Auto Scaling グループを作成します。キャパシティーはアベイラビリティーゾーンのインスタンスタイプごとに個別に変動するため、インスタンスタイプの柔軟性が高ければ、通常、より多くのコンピューティング性能を得られます。

  • 同様に、最もよく使用されているインスタンスタイプだけに制限しないでください。価格は長期の需要に基づいて調整されます。そのため、よく使用されているインスタンスタイプ (最近開始されたインスタンスファミリーなど) の料金はより調整が大きくなる傾向があります。使用されることが少なくなった旧世代のインスタンスタイプを選択すると、コストが下がり、中断が少なくなる傾向があります。

  • capacity-optimizedまたはcapacity-optimized-prioritized配分戦略を使用することをお勧めします。つまり、Amazon EC2 Auto Scaling は、利用可能なスポットキャパシティーに基づいて最適に選択されたスポットプールを使用してインスタンスを起動するので、スポットの中断の可能性を減らすことができます。

  • lowest-price配分戦略を選択してウェブサービスを実行する場合は、多数のスポットプール (例えば、N=10) を指定します。多数のスポットプールを指定すると、いずれかのアベイラビリティーゾーンのプールが一時的に使用不可になったときのスポットインスタンスの中断の影響が抑えられます。バッチ[batch]処理や他のミッションクリティカルでないアプリケーションを実行している場合は、スポットプール数をより少なく、たとえば N = 2 に指定できます。これにより、アベイラビリティーゾーンあたりで使用可能な最低価格のスポットプールからのみ、スポットインスタンスを確実にプロビジョニングできます。

上限価格を指定する場合は、AWS CLI または SKD を使用して Auto Scaling グループを作成しますが、注意が必要です。上限価格が選択したインスタンスタイプのスポット料金より低い場合、スポットインスタンス は起動されません。

前提条件

起動テンプレートを作成する。詳細については、「Auto Scaling グループの起動テンプレートを作成する」を参照してください。

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

スポットインスタンスとオンデマンドインスタンスを使用して Auto Scaling グループを作成する (コンソール)

次の手順を実行して、スケールできるスポットインスタンスとオンデマンドインスタンスのフリートを作成します。

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

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

スポットインスタンスとオンデマンドインスタンスを使用して Auto Scaling グループを作成するには

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

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

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

  4. Choose launch template or configuration のページで、以下を実行します。

    1. Auto Scaling グループ名に Auto Scaling グループの名前を入力します。

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

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

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

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

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

  7. [Instance type requirements] (インスタンスタイプの要件) で、[Override launch template] (起動テンプレートを上書きする)、[Manually add instance types] (インスタンスタイプを手動で追加する) と選択します。

    1. [Instance types] (インスタンスタイプ)で、起動できるインスタンスのタイプを選択します。まずはレコメンデーションを使用できます。

    2. (オプション) インスタンスタイプの順序を変更するには、矢印を使用します。優先度ベースの配分戦略を選択している場合、インスタンスタイプを設定した順序によって起動の優先順位が設定されます。

    3. (オプション) [インスタンスの重み付け] を使用するには、各インスタンスタイプに、Auto Scaling グループのキャパシティーに対してカウントされるインスタンスの量に対応する重みを付けます。

  8. [Instance purchase options] (インスタンスの購入オプション) で、必要に応じて購入オプションを更新して、スポットインスタンスを使用しているアプリケーションのコストを削減します。

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

    2. スポットインスタンスの起動を選択したかどうかに応じて、[Include On-Demand base capacity] (オンデマンドのベースキャパシティーを含める) の横にあるチェックボックスをオンにできます。さらに、オンデマンドインスタンスが満たすべき、Auto Scaling グループの初期キャパシティーの最小量を指定します。ベースキャパシティーを超える場合は、[Instances distribution] (インスタンスの分散) 設定を使用して、起動するオンデマンドインスタンスとスポットインスタンスの数を決定します。

  9. [Allocation strategies] (配分戦略) の [On-Demand allocation strategy] (オンデマンドの配分戦略) で、配分戦略を選択します。

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

  11. [キャパシティーの再調整] で、キャパシティーの再調整を有効にするか無効にするかを選択します。詳細については、「キャパシティーの再調整を使用して Amazon EC2 スポットの中断に対処する」を参照してください。

  12. [Next] を選択します。

    または、残りはデフォルトのままにして、[Skip to Review (確認をスキップ)] を選択できます。

  13. [Configure advanced options] (詳細オプションの設定) ページで、希望するオプションを設定し、[Next] (次へ) を選択します。

  14. (オプション) [Configure group size and scaling policies (グループサイズとスケーリングポリシーの設定)] ページで、次のオプションを設定し、[次へ] を選択します。

    1. [希望するキャパシティー] に、起動するインスタンスの初期数を入力します。この数値を最小キャパシティーまたは最大キャパシティー制限の範囲外の値に変更する場合は、[最小キャパシティー] または [最大キャパシティー] の値を更新する必要があります。詳細については、「Auto Scaling グループにキャパシティーの制限を設定する」を参照してください。

    2. Auto Scaling グループのサイズを自動的に拡大縮小するには、[ターゲット追跡スケーリングポリシー] を選択し、指示に従います。詳細については、「ターゲット追跡スケーリングポリシー」を参照してください。

    3. [Instance scale-in protection (インスタンスのスケールイン保護)] で、インスタンスのスケールイン保護を有効にするかどうかを選択します。詳細については、「インスタンスのスケールイン保護を使用する」を参照してください。

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

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

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

スポット配分戦略を設定する (AWS CLI)

以下の設定例では、さまざまなスポット割り当て戦略を使用してスポットインスタンスを起動する方法を示しています。

注記

これらの例は、JSON または YAML でフォーマットされた設定ファイルの使用方法を示しています。AWS CLIバージョン 1 を使用する場合は、JSON 形式の設定ファイルを指定する必要があります。AWS CLIバージョン 2 を使用する場合は、YAML または JSON のいずれかでフォーマットされた設定ファイルを指定できます。

例 1: capacity-optimized 割り当て戦略を使用して スポットインスタンス を起動する

次の [create-auto-scaling-group] コマンドは、以下を指定する Auto Scaling グループを作成します。

  • オンデマンドインスタンスとして起動するグループの割合 (0) とオンデマンドインスタンスの初期のベース数 (1)

  • 優先度に従って起動するインスタンスタイプ (c5.largec5a.largem5.largem5a.largec4.largem4.largec3.largem3.large)

  • インスタンスを起動するサブネット (subnet-5ea0c127subnet-6194ea3bsubnet-c934b782)。それぞれ異なるアベイラビリティーゾーンに対応

  • 起動テンプレート (my-launch-template) とそのバージョン ($Default)

Amazon EC2 Auto Scaling がオンデマンドキャパシティーを満たそうとするとき、まず c5.large インスタンスタイプを起動します。スポットインスタンスは、スポットインスタンスのキャパシティーに基づいて、各アベイラビリティーゾーンの最適なスポットプールから取得されます。

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

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

{ "AutoScalingGroupName": "my-asg", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Default" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] }, "InstancesDistribution": { "OnDemandBaseCapacity": 1, "OnDemandPercentageAboveBaseCapacity": 0, "SpotAllocationStrategy": "capacity-optimized" } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }

または、以下の[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 MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large InstancesDistribution: OnDemandBaseCapacity: 1 OnDemandPercentageAboveBaseCapacity: 0 SpotAllocationStrategy: capacity-optimized MinSize: 1 MaxSize: 5 DesiredCapacity: 3 VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782

例 2: capacity-optimized-prioritized 割り当て戦略を使用して スポットインスタンス を起動する

次の [create-auto-scaling-group] コマンドは、以下を指定する Auto Scaling グループを作成します。

  • オンデマンドインスタンスとして起動するグループの割合 (0) とオンデマンドインスタンスの初期のベース数 (1)

  • 優先度に従って起動するインスタンスタイプ (c5.largec5a.largem5.largem5a.largec4.largem4.largec3.largem3.large)

  • インスタンスを起動するサブネット (subnet-5ea0c127subnet-6194ea3bsubnet-c934b782)。それぞれ異なるアベイラビリティーゾーンに対応

  • 起動テンプレート (my-launch-template) とそのバージョン ($Latest)

Amazon EC2 Auto Scaling がオンデマンドキャパシティーを満たそうとするとき、まず c5.large インスタンスタイプを起動します。Amazon EC2 Auto Scaling がスポットキャパシティーを満たそうとするとき、ベストエフォートベースでインスタンスタイプの優先順位を尊重しますが、まずはキャパシティーに合わせて最適化します。

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

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

{ "AutoScalingGroupName": "my-asg", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] }, "InstancesDistribution": { "OnDemandBaseCapacity": 1, "OnDemandPercentageAboveBaseCapacity": 0, "SpotAllocationStrategy": "capacity-optimized-prioritized" } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }

または、以下の[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 MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large InstancesDistribution: OnDemandBaseCapacity: 1 OnDemandPercentageAboveBaseCapacity: 0 SpotAllocationStrategy: capacity-optimized-prioritized MinSize: 1 MaxSize: 5 DesiredCapacity: 3 VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782

例 3: 2つのプール間での lowest-price 配分戦略を使用してスポットインスタンスを起動する

次の [create-auto-scaling-group] コマンドは、以下を指定する Auto Scaling グループを作成します。

  • オンデマンドインスタンスとして起動するグループの割合 (50)。オンデマンドインスタンスの初期のベース数は指定しない

  • 優先度に従って起動するインスタンスタイプ (c5.largec5a.largem5.largem5a.largec4.largem4.largec3.largem3.large)

  • インスタンスを起動するサブネット (subnet-5ea0c127subnet-6194ea3bsubnet-c934b782)。それぞれ異なるアベイラビリティーゾーンに対応

  • 起動テンプレート (my-launch-template) とそのバージョン ($Latest)

Amazon EC2 Auto Scaling がオンデマンドキャパシティーを満たそうとするとき、まず c5.large インスタンスタイプを起動します。スポットキャパシティーについては、Amazon EC2 Auto Scaling は、各アベイラビリティーゾーンで 2 つの最低価格のプールのスポットインスタンスを均等に起動しようとします。

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

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

{ "AutoScalingGroupName": "my-asg", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] }, "InstancesDistribution": { "OnDemandPercentageAboveBaseCapacity": 50, "SpotAllocationStrategy": "lowest-price", "SpotInstancePools": 2 } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }

または、以下の[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 MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large InstancesDistribution: OnDemandPercentageAboveBaseCapacity: 50 SpotAllocationStrategy: lowest-price SpotInstancePools: 2 MinSize: 1 MaxSize: 5 DesiredCapacity: 3 VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782

Auto Scaling グループが正しく設定されているかどうか、およびグループがインスタンスを起動したことを確認する (AWS CLI)

Auto Scaling グループが正しく設定され、インスタンスが起動しているかどうかをチェックするには、[Auto Scaling グループの説明] のコマンドを使用します。混合インスタンスのポリシーとサブネットのリストが存在し、正しく設定されていることを確認します。インスタンスが起動した場合は、インスタンスとそのステータスのリストが表示されます。インスタンスの起動によるスケーリング アクティビティを表示するには、[スケーリング アクティビティを記述] のコマンドを使用します。進行中および最近完了したスケーリングをモニタリングできます。