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

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

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

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

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

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

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

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

  • リザーブドインスタンスまたは Savings Plan の割引料金の恩恵を受けることができるインスタンスタイプの優先順位を設定します。

  • Amazon EC2 Auto Scaling がインスタンスタイプ間でどのようにスポット容量を配分するかを定義します。

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

配分戦略

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

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

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

オンデマンドインスタンスの配分戦略は 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 のインスタンス Savings Plans またはコンピューティング Savings Plans を使用する場合、通常のオンデマンドインスタンス料金の割引料金が適用されます。Savings Plans には柔軟性があるため、インスタンスタイプの優先順位付けの柔軟性が高まります。Savings Plan でカバーされているインスタンスタイプを使用する限り、任意の順序で優先順位を設定でき、場合によってはその順序を完全に変更することもできます。また、Savings Plan によって提供される割引料金が適用され続けます。Savings Plans の詳細については、「Savings Plans ユーザーガイド」を参照してください。

スポットインスタンス

Amazon EC2 Auto Scaling には、スポットインスタンスに使用できる 2 種類の配分戦略があります。

capacity-optimized

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

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

lowest-price

Amazon EC2 Auto Scaling は、指定した数 (N 個) のスポットインスタンスプールのうち、容量を満たすときに最低単価のプールからインスタンスを割り当てます。

たとえば、4 つのインスタンスタイプと 4 つのアベイラビリティーゾーンを指定した場合、Auto Scaling グループは、最大 16 個の異なるスポットインスタンスプールからスポット容量を満たすことができます。配分戦略に 2 つのスポットプール (N = 2) を指定した場合、Auto Scaling グループは、最低単価の 8 個以上のスポットプールからスポット容量を満たすことができます。

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

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

スポットインスタンスの配分戦略の詳細については、AWS ブログの「Amazon EC2 スポットインスタンスの容量最適化配分戦略の紹介」を参照してください。

オンデマンドインスタンスの割合のコントロール

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

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

例: スケーリング動作
インスタンスの分散 購入オプション全体における実行中のインスタンスの合計数
10 20 30 40
例 1
オンデマンドベース: 10 10 10 10 10
ベースを超えるオンデマンド割合: 50% 0 5 10 15
スポットの割合: 50% 0 5 10 15
例 2
オンデマンドベース: 0 0 0 0 0
ベースを超えるオンデマンド割合: 0% 0 0 0 0
スポットの割合: 100% 10 20 30 40
例 3
オンデマンドベース: 0 0 0 0 0
ベースを超えるオンデマンド割合: 60% 6 12 18 24
スポットの割合: 40% 4 8 12 16
例 4
オンデマンドベース: 0 0 0 0 0
ベースを超えるオンデマンド割合: 100% 10 20 30 40
スポットの割合: 0% 0 0 0 0
例 5
オンデマンドベース: 12 10 12 12 12
ベースを超えるオンデマンド割合: 0% 0 0 0 0
スポットの割合: 100% 0 8 18 28

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

スポットインスタンスをリクエストする Auto Scaling グループを作成する前に、スポットのベストプラクティスを確認してください。リクエストを計画するときにこれらのベストプラクティスを使用して、できるだけ低価格でインスタンスのタイプをプロビジョニングできるようにします。また、以下のことをお勧めします。

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

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

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

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

  • スポットインスタンスの中断の通知を使用して、スポットインスタンスのステータスをモニタリングします。例えば、Amazon SNS トピック、AWS Lambda 関数、別のターゲットのいずれかに EC2 スポットの 2 分前警告を自動的に送信するルールを Amazon EventBridge で設定できます。詳細については、Amazon EC2 の Linux インスタンス用ユーザーガイドおよび Amazon EventBridge ユーザーガイド の「スポットインスタンス中断の通知」を参照してください。

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

前提条件

起動テンプレートは、Auto Scaling グループで使用するように設定されています。詳細については、「起動テンプレートの作成 Auto Scaling グループ」を参照してください。

IAM ユーザーは、ec2:RunInstances アクションを呼び出すアクセス許可がある場合にのみ、起動テンプレートを使用して Auto Scaling グループを作成できます。詳細については、「テンプレートサポートの起動」を参照してください。

Auto Scaling グループの作成 (コンソール)

スケーラブルなオンデマンドインスタンスとスポットインスタンスのフリートを作成するには、以下の手順に従います。

複数の購入オプションを使用する Auto Scaling グループを作成するには (コンソール)

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

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

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

  4. [Create an Auto Scaling group (Auto Scaling グループを作成)] を選択します。

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

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

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

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

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

  6. 設定の構成ページの [購入のオプションとインスタンスタイプ] で、[Combine purchase options and instance types (購入のオプションとインスタンスタイプの組み合わせを選択)] を選択します。

  7. [Instances distribution (インスタンスの分散)] で、次の手順を実行します。

    デフォルト設定をそのまま使用する場合は、次の手順を省略できます。

    1. [Optional On-Demand Base (オプションのオンデマンドベース)] で、オンデマンドインスタンスが満たす必要がある Auto Scaling グループの初期容量となるインスタンス最小数を指定します。

    2. [On-Demand Percentage Above Base (ベースを超える場合のオンデマンドの割合)] で、オプションのオンデマンドベース数を超える場合の追加容量となるオンデマンドインスタンスとスポットインスタンスの割合を指定します。

    3. アベイラビリティーゾーンごとのスポット配分戦略では、容量の最適化 のデフォルト設定を維持することをお勧めします。デフォルトを維持しない場合は、[Lowest price (最低価格)] を選択し、最低価格のスポットインスタンスプールの数を入場し、多様化します。

  8. [インスタンスタイプ] では、開始点として、推奨事項をもとに、起動できるインスタンスのタイプを選択します。それ以外の場合は、インスタンスタイプを削除し、必要に応じ、後で追加します。

  9. (オプション) インスタンスタイプの順序を変更するには、矢印を使用します。インスタンスタイプを設定した順序によって、オンデマンドインスタンスの優先度が設定されます。Auto Scaling グループでオンデマンドキャパシティが起動された場合、リストの一番上にあるインスタンスタイプの優先順位が最も高くなります。

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

  11. [ネットワーク] の [VPC] で、起動テンプレートで指定したセキュリティグループの VPC を選択します。複数のインスタンスタイプおよび購入オプションを使用するインスタンスの起動は、EC2-Classic ではサポートされていません。

  12. [サブネット] で、指定した VPC 内のサブネットを 1 つ以上選択します。複数のアベイラビリティーゾーンのサブネットを使用することで、高可用性を得られます。Amazon EC2 Auto Scaling を使用した高可用性の詳細については、「複数のアベイラビリティーゾーンへのインスタンスの分散」を参照してください。

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

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

  14. [詳細オプションの設定] ページで、次のオプションを設定し、[次へ] を選択します。

    1. (オプション) Amazon EC2 インスタンスを Elastic Load Balancing (ELB) ロードバランサーに登録するには、[ロードバランシングの有効化] を選択します。Application Load Balancer または Network Load Balancer をアタッチするには、既存のターゲットグループを選択するか、新しいターゲットグループを作成します。Classic Load Balancer をアタッチするには、既存のロードバランサーを選択するか、新しいロードバランサーを作成します。

    2. (オプション) ELB ヘルスチェックを有効にするには、[ヘルスチェック] で、[ヘルスチェックのタイプ] の [ELB] を選択します。

    3. (オプション) [Health check grace period (ヘルスチェックの猶予期間)] に、Amazon EC2 Auto Scaling がインスタンスの状態を確認するまでの時間を入力します。この目的は、Amazon EC2 Auto Scaling がインスタンスを正常でないとマークし、時間が来る前にインスタンスを終了するのを防ぐためです。デフォルトは 300 秒です。

  15. Configure group size and scaling policies ページで、次のオプションを設定し、[次へ] を選択します。

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

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

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

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

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

  18. [Review] ページで、[Auto Scaling グループの作成] を選択します。

Auto Scaling グループの作成 (AWS CLI)

次の例は、AWS CLI create-auto-scaling-group コマンドを使用して複数の購入オプションを持つ Auto Scaling グループを作成する方法を示しています。

例: capacity-optimized 配分戦略を使用してスポットインスタンスを起動する

ここで示している create-auto-scaling-group コマンドは、以下を指定する Auto Scaling グループを作成します。

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

  • 優先度に従って起動するインスタンスタイプ (c3.largec4.largec5.large)

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

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

Amazon EC2 Auto Scaling がオンデマンド容量を満たそうとするとき、まず c3.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": "c3.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c5.large" } ] }, "InstancesDistribution": { "OnDemandBaseCapacity": 1, "OnDemandPercentageAboveBaseCapacity": 0, "SpotAllocationStrategy": "capacity-optimized" } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "Tags": [] }

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

ここで示している create-auto-scaling-group コマンドは、以下を指定する Auto Scaling グループを作成します。

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

  • 優先度に従って起動するインスタンスタイプ (c3.largec4.largec5.large)

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

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

Amazon EC2 Auto Scaling がオンデマンド容量を満たそうとするとき、まず c3.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": "c3.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c5.large" } ] }, "InstancesDistribution": { "OnDemandPercentageAboveBaseCapacity": 50, "SpotAllocationStrategy": "lowest-price", "SpotInstancePools": 2 } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "Tags": [] }

グループがインスタンスを起動したことを確認するには

次の describe-auto-scaling-groups コマンドを使用します。

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

以下の応答の例は、希望する容量が 3 で、グループには実行中のインスタンスが 3 つあることを示しています。

{ "AutoScalingGroups": [ { "AutoScalingGroupARN": "arn", "ServiceLinkedRoleARN": "arn", "TargetGroupARNs": [], "SuspendedProcesses": [], "DesiredCapacity": 3, "MixedInstancesPolicy": { "InstancesDistribution": { "SpotAllocationStrategy": "lowest-price", "OnDemandPercentageAboveBaseCapacity": 50, "OnDemandAllocationStrategy": "prioritized", "SpotInstancePools": 2, "OnDemandBaseCapacity": 0 }, "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "Overrides": [ { "InstanceType": "c3.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c5.large" } ] } }, "EnabledMetrics": [], "Tags": [], "AutoScalingGroupName": "my-asg", "DefaultCooldown": 300, "MinSize": 1, "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0aae8709d49eeba4f", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2b", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0c43f6003841d2d2b", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2c", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0feb4cd6677d39903", "HealthStatus": "Healthy", "LifecycleState": "InService" } ], "MaxSize": 5, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "HealthCheckGracePeriod": 0, "TerminationPolicies": [ "Default" ], "LoadBalancerNames": [], "CreatedTime": "2019-02-17T02:29:12.853Z", "AvailabilityZones": [ "us-west-2a", "us-west-2b", "us-west-2c" ], "HealthCheckType": "EC2", "NewInstancesProtectedFromScaleIn": false } ] }

その他の例については、「Amazon EC2 Auto Scaling のインスタンスの重み付け」を参照してください。