Elastic Beanstalk 環境用の Auto Scaling グループ - AWS Elastic Beanstalk

Elastic Beanstalk 環境用の Auto Scaling グループ

AWS Elastic Beanstalk 環境には、環境内の Amazon EC2 インスタンスを管理する Auto Scaling グループが含まれています。単一インスタンス環境では、Auto Scaling グループは常に1 つのインスタンスが実行されているよう確認します。負荷分散される環境では、実行する範囲のグループを設定すると、Auto Scaling は、負荷に基づき、必要に応じてインスタンスを追加または削除します。

また、Auto Scaling グループでは、環境のインスタンスの起動設定が管理されます。起動設定を変更することで、インスタンスタイプ、キーペア、Amazon Elastic Block Store (Amazon EBS) ストレージ、インスタンス起動時にのみ設定できるその他の設定を変更することができます。

Auto Scaling グループは、2 つの Amazon CloudWatch アラームを使用してスケーリングオペレーションをトリガーします。各インスタンスの 5 分間の平均アウトバウンドネットワークトラフィックが 6 MiB 以上または 2 MiB 以下の場合は、デフォルトのトリガーがスケーリングされます。Auto Scaling を効率的に使用するには、アプリケーション、インスタンスタイプ、サービス要件に合ったトリガーを設定します。レイテンシー、ディスク I/O、CPU 使用率、リクエスト数などの複数の統計に基づいて、スケールすることができます。

ピークトラフィックが予測される期間に、環境での Amazon EC2 インスタンスの使用を最適化する場合は、Auto Scaling グループを設定し、スケジュールに基づいてインスタンス数を変更します。毎日または週 1 回繰り返すグループの設定への変更、またはワンタイムへの変更をスケジュールして、多量のトラフィックをサイトへ誘導するマーケティングイベント用に準備することができます。

オプションとして、Elastic Beanstalk は、お客様の環境のオンデマンドインスタンスとスポットインスタンスを組み合わせることができます。スポットインスタンスの可用性に影響する変更をモニタリングし、自動的に応答するように Amazon EC2 Auto Scaling を設定するには、容量の再調整を有効にします。

Auto Scaling は、起動した各 Amazon EC2 インスタンスの状態をモニタリングします。インスタンスが予期せずに終了した場合、Auto Scaling は終了を検出し、代わりのインスタンスを起動します。グループを設定して、ロードバランサーのヘルスチェックメカニズムを使用する方法については、「」を参照してくださいAuto Scaling ヘルスチェックの設定

Elastic Beanstalk コンソールEB CLI、または設定オプションを使用して、環境の Auto Scaling を設定できます。

スポットインスタンスのサポート

環境のスポットオプションを有効にすると、Amazon EC2 スポットインスタンスを活用できます。環境の Auto Scaling グループは、Amazon EC2 購入オプションを組み合わせて、オンデマンドインスタンスとスポットインスタンスの組み合わせを維持します。

このトピックでは、環境のスポットインスタンスリクエストを有効にする以下の方法について説明します。

重要

スポットインスタンスに対する需要は刻一刻と大幅に変化する可能性があります。また、スポットインスタンスの可用性も利用可能な未使用の Amazon EC2 インスタンスの数に応じて大きく変化する可能性があります。スポットインスタンスが中断される可能性は常にあります。

これらの中断によるアプリケーションへの影響を最小限に抑えるために、Amazon EC2 Auto Scaling に含まれる [容量の再調整] オプションを有効にすることができます。この機能を有効にすると、EC2 は Auto Scaling グループのスポットインスタンスを中断する前に、自動的に置き換えようとします。この機能を有効にするには、Elastic Beanstalk コンソールを使用して、Auto Scaling グループを設定します。または、Elastic Beanstalk EnableCapacityRebalancing 設定オプションaws:autoscaling:asg 名前空間の true に設定することもできます。

詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「容量の再調整」、および Linux インスタンス用 Amazon EC2 ユーザーガイドの「スポットインスタンスの中断」を参照してください。

Elastic Beanstalk には、スポット機能をサポートするためのいくつかの設定オプションが用意されています。これらの設定は、以降の Auto Scaling グループの設定に関するセクションで説明します。

aws:ec2:instances 名前空間のこれらのオプションのうちの 2 つには、特別な注意が必要です。

  • SpotFleetOnDemandBase

  • SpotFleetOnDemandAboveBasePercentage

これら 2 つのオプションは、aws:autoscaling:asg 名前空間の MinSize オプションと相関しています:

  • MinSize のみが、環境の初期容量 (最小で実行するインスタンスの数) を決定します。

  • SpotFleetOnDemandBase は初期容量には影響しません。スポットが有効である場合、このオプションは任意のスポットインスタンスが考慮される前に、プロビジョニングされるオンデマンドインスタンス数のみを決定します。

  • SpotFleetOnDemandBaseMinSize よりも小さい場合を考慮します。それでも、初期容量どおりの MinSize インスタンスが得られます。そのうち少なくとも SpotFleetOnDemandBase はオンデマンドインスタンスである必要があります。

  • SpotFleetOnDemandBaseMinSize よりも大きい場合を考慮します。環境のスケールアウト時には、2 つの値の差に等しい数のインスタンスが追加されることが保証されます。つまり、SpotFleetOnDemandBase 要件を満たす前に、少なくともオンデマンドである追加の (SpotFleetOnDemandBase - MinSize) インスタンスを取得することが保証されています。

本稼働環境では、スポットインスタンスは、スケーラブルな負荷分散された環境の一部として特に便利です。単一インスタンス環境でスポットを使用することはお勧めしません。スポットインスタンスが使用できない場合、環境の容量全体(単一インスタンス)が失われる可能性があります。開発またはテストを目的として、単一インスタンス環境でのスポットインスタンスの使用を希望する場合があるとします。その場合は、SpotFleetOnDemandBaseSpotFleetOnDemandAboveBasePercentage の両方を必ずゼロに設定してください。その他の設定を行うと、オンデマンドインスタンスになります。

Notes
  • 一部の古い AWS アカウントでは、スポットインスタンスをサポートしないデフォルトのインスタンスタイプ (t1.micro など) を Elastic Beanstalk に提供する場合があります。スポットインスタンスリクエストを有効にして、指定されたインスタンスがいずれもスポットをサポートしていないエラーが表示される場合は、必ずスポットをサポートするインスタンスタイプを設定してください。スポットインスタンスタイプを選択するには、スポットインスタンスアドバイザーを使用します。

  • スポットインスタンスリクエストを有効にするには、Amazon EC2 起動テンプレートを使用する必要があります。この機能を環境の作成時や更新時に設定すると、Elastic Beanstalk は Amazon EC2 起動テンプレートを使用するように環境を設定しようとします (環境でまだ使用されていない場合)。この場合、ユーザーポリシーに必要なアクセス許可がないと、環境の作成や更新は失敗する可能性があります。したがって、管理ユーザーポリシーを使用するか、カスタムポリシーに必要なアクセス許可を追加することをお勧めします。必要なアクセス許可の詳細については、「カスタムユーザーポリシーの作成」を参照してください。

次の例は、幅広いスケーリングオプションを設定するさまざまなシナリオを示しています。すべての例において、スポットインスタンスリクエストを有効にした負荷分散環境が想定されています。

例 1: 初期容量の一部としてのオンデマンドとスポット

オプション設定
オプション 名前空間

MinSize

aws:autoscaling:asg

10

MaxSize

aws:autoscaling:asg

24

SpotFleetOnDemandBase

aws:ec2:instances

4

SpotFleetOnDemandAboveBasePercentage

aws:ec2:instances

50

この例では、環境は 10 個のインスタンスから始まります。そのうちの 7 個はオンデマンド(4 つのベース、上記 6 つのベースの 50%)で、3 個はスポットです。環境はインスタンスを最大 24 個にスケールアウトできます。スケールアウトすると、4 つのベースオンデマンドインスタンスの上にあるフリートの部分のオンデマンド部分は 50% に保たれ、全体では最大 24 のインスタンスが維持されます。そのうちの 14 はオンデマンド(4 つのベース、上記 20 のうち 50%)、10 はスポットです。

例 2: すべてのオンデマンドの初期容量

オプション設定
オプション 名前空間

MinSize

aws:autoscaling:asg

4

MaxSize

aws:autoscaling:asg

24

SpotFleetOnDemandBase

aws:ec2:instances

4

SpotFleetOnDemandAboveBasePercentage

aws:ec2:instances

50

この例では、環境は 4 つのインスタンスから始まり、そのすべてがオンデマンドです。環境はインスタンスを最大 24 個にスケールアウトできます。スケールアウトすると、4 つのベースオンデマンドインスタンスの上にあるフリートの部分のオンデマンド部分は 50% に保たれ、全体では最大 24 のインスタンスが維持されます。そのうちの 14 はオンデマンド(4 つのベース、上記 20 のうち 50%)、10 はスポットです。

例 3: 初期容量を超える追加のオンデマンドベース

オプション設定
オプション 名前空間

MinSize

aws:autoscaling:asg

3

MaxSize

aws:autoscaling:asg

24

SpotFleetOnDemandBase

aws:ec2:instances

4

SpotFleetOnDemandAboveBasePercentage

aws:ec2:instances

50

この例では、環境は 3 つのインスタンスから始まり、そのすべてがオンデマンドです。環境はインスタンスを最大 24 個にスケールアウトできます。初期の 3 つ上の最初の追加インスタンスはオンデマンドで、4 つのベースオンデマンドインスタンスを完成させます。さらにスケールアウトすると、4 つのベースオンデマンドインスタンスの上にあるフリートの部分のオンデマンド部分は 50% に保たれ、全体では最大 24 のインスタンスが維持されます。そのうちの 14 はオンデマンド(4 つのベース、上記 20 のうち 50%)、10 はスポットです。

Elastic Beanstalk コンソールを使用した Auto Scaling グループの設定

Elastic Beanstalk コンソールで、環境の [設定] ページにある [キャパシティー] を編集することで、Auto Scaling の動作を設定できます。

Elastic Beanstalk コンソールで Auto Scaling グループを設定するには

  1. Elastic Beanstalk コンソールを開き、[Regions] (リージョン) リストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. ナビゲーションペインで、[設定] を選択します。

  4. [キャパシティー] 設定カテゴリで、[編集] を選択します。

  5. [Auto Scaling グループ] セクションで、次のように設定します。

    • [環境タイプ] – [負荷分散] を選択します。

    • [最小インスタンス数] – グループに一度に含まれる EC2 インスタンスの最小数。グループは最小数から開始し、スケールアップのトリガー条件が満たされるとインスタンスが追加されます。

    • [最大インスタンス数] – グループに一度に含まれる EC2 インスタンスの最大数。

      注記

      ローリング更新を使用する場合、ローリング更新の最小インスタンス数が [サービス内のインスタンスの最小数] の設定よりも多いことを確認します。

    • フリート組成 — デフォルトはオンデマンドインスタンスです。スポットインスタンス要件を有効にするには、[Combined purchase options and instance (購入オプションとインスタンスの組み合わせ)] を選択します。

      スポットインスタンス要件を有効にすることを選択すると、次のオプションが有効になります:

      • 上限スポット料金 — スポットインスタンスの上限価格オプションに関する推奨事項については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「スポットインスタンスの料金履歴」を参照してください。

      • オンデマンドベース - 環境のスケールアウト時にスポットインスタンスを考慮する前に、Auto Scaling グループがプロビジョニングするオンデマンドインスタンスの最小数。

      • ベースを超えるオンデマンド - Auto Scaling グループがオンデマンドベースのインスタンスを超えてプロビジョニングする追加容量の一部としてのオンデマンドインスタンスの割合。

        注記

        オンデマンドベース」および「ベースを超えるオンデマンド」は、前述の最小および最大インスタンスオプションと関係しています。これらのオプションと例の詳細については、「スポットインスタンスのサポート」を参照してください。

      • 容量の再調整を有効にする — このオプションは、Auto Scaling グループに少なくとも 1 つのスポットインスタンスがある場合にのみ関係します。この機能を有効にすると、EC2 は Auto Scaling グループのスポットインスタンスを中断する前に自動的に置き換えるよう試み、アプリケーションへのスポットインスタンスの中断を最小限に抑えます。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「容量の再調整」を参照してください。

    • インスタンスタイプ – アプリケーションを実行するために起動した Amazon EC2 インスタンスのタイプ。詳細については、「インスタンスタイプ」を参照してください。

    • AMI ID – Elastic Beanstalk が環境で Amazon EC2 インスタンスを起動するために使用するマシンイメージ。詳細については、「AMI ID」を参照してください。

    • [アベイラビリティーゾーン] – アベイラビリティーゾーンの数を選択し、環境のインスタンスを分散させます。デフォルトでは、Auto Scaling グループは、使用可能なゾーン間で均等にインスタンスを起動します。少ないゾーンにインスタンスを集中させるには、使用するゾーンの数を選択します。実稼働環境では、2 つ以上のゾーンを使用して、一方のアベイラビリティーゾーンが使用できなくなってもアプリケーションが利用できるようにします。

    • [配置] (オプション) – 使用するアベイラビリティーゾーンを選択します。インスタンスを特定のゾーンのリソースに接続する必要がある場合、またはゾーン固有のリザーブドインスタンスを購入済みの場合は、この設定を使用します。クールダウンの場合: '720' カスタムアベイラビリティーゾーン: 'us-west-2a,us-west-2b' MaxSize: '4' ゾーンの数を設定する場合は、少なくともその数のカスタムゾーンを選択する必要があります。

      カスタム VPC で環境を起動する場合は、このオプションを設定できません。カスタム VPC では、環境に割り当てるサブネットのアベイラビリティーゾーンを選択します。

    • [スケーリングクールダウン] – スケーリング後、トリガーの評価を継続する前に、インスタンスが起動または終了するまでの時間 (秒)。詳細については、「スケーリングクールダウン」を参照してください。

    
            Elastic Beanstalk Auto Scaling 設定ウィンドウ
  6. [Apply] を選択します。

EB CLI を使用した Auto Scaling グループの設定

eb create コマンドを使用して環境を作成する場合、環境の Auto Scaling グループに関連するいくつかのオプションを指定できます。これは、環境の容量を制御するのに役立つオプションの一部です。

--single

1 つの Amazon EC2 インスタンスが含まれ、ロードバランサーがない環境を作成します。このオプションを使用しない場合、作成された環境にロードバランサーが追加されます。

--enable-spot

環境のスポットインスタンスリクエストを有効にします。

eb create コマンドの以下のオプションは、--enable-spot でのみ使用できます。

--instance-types

環境で使用する Amazon EC2 インスタンスタイプを一覧表示します。

--spot-max-price

お客様がスポットインスタンスに対して支払ってもよいと考えるユニット時間あたりの上限価格 (米ドル)。スポットインスタンスの上限価格オプションに関する推奨事項については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「スポットインスタンスの料金履歴」を参照してください。

--on-demand-base-capacity

環境のスケールアップ時にスポットインスタンスを考慮する前に、Auto Scaling グループがプロビジョニングするオンデマンドインスタンスの最小数。

--on-demand-above-base-capacity

--on-demand-base-capacity オプションで指定されたインスタンス数を超えて Auto Scaling グループがプロビジョニングする追加容量の一部としてのオンデマンドインスタンスの割合。

次の例では、環境を作成し、新しい環境のスポットインスタンスリクエストを有効にするように Auto Scaling グループを設定します。この例では、使用可能な 3 つのインスタンスタイプを使用できます。

$ eb create --enable-spot --instance-types "t2.micro,t3.micro,t3.small"
重要

--instance-type (「s」なし) という、同様の名前が付いた別のオプションがあります。EB CLI は、オンデマンドインスタンスの処理時のみ、このオプションを認識します。--instance-type (「s」なし) を --enable-spot オプションとともに使用しないでください。そうした場合、EB CLI によって無視されます。代わりに、--instance-types (「s」あり) を --enable-spot オプションとともに使用してください。

設定オプション

Elastic Beanstalk には、aws:autoscaling:asg および aws:ec2:instances という 2 つの名前空間で、Auto Scaling 設定の設定オプションが用意されています。

aws:autoscaling:asg 名前空間

aws:autoscaling:asg aws:autoscaling:asg 名前空間は、全体的なスケールと可用性のオプションを提供します。

次の設定ファイルのの例では、2~4 個のインスタンス、特定のアベイラビリティーゾーン、および 12 分間 (720 秒間) のクールダウン期間を使用するように Auto Scaling グループを設定します。スポットインスタンスの容量の再調整が有効になります。この最後のオプションは、この後に続く設定ファイルの例に示すように、aws:ec2:instances 名前空間で EnableSpottrue に設定されている場合にのみ有効です。

option_settings: aws:autoscaling:asg: Availability Zones: Any Cooldown: '720' Custom Availability Zones: 'us-west-2a,us-west-2b' MaxSize: '4' MinSize: '2' EnableCapacityRebalancing: true

aws:ec2:instances 名前空間

aws:ec2:instances 名前空間は、スポットインスタンスの管理など、環境のインスタンスに関連するオプションを提供します。aws:autoscaling:launchconfigurationaws:autoscaling:asg を補完します。

環境設定を更新し、InstanceTypes オプションから 1 つ以上のインスタンスタイプを削除すると、Elastic Beanstalk は、削除されたインスタンスタイプで実行されているすべての Amazon EC2 インスタンスを終了します。次に、環境の Auto Scaling グループは、現在指定されているインスタンスタイプを使用して、必要に応じて新しいインスタンスを起動し、必要な容量を完了します。

次の設定ファイルの例では、環境のスポットインスタンスリクエストを有効にするように Auto Scaling グループを設定します。使用可能な 3 つのインスタンスタイプを使用できます。ベースライン容量として少なくとも 1 つのオンデマンドインスタンスが使用され、任意の追加容量として、持続する 33% のオンデマンドインスタンスが使用されます。

option_settings: aws:ec2:instances: EnableSpot: true InstanceTypes: 't2.micro,t3.micro,t3.small' SpotFleetOnDemandBase: '1' SpotFleetOnDemandAboveBasePercentage: '33'

スポットインスタンスタイプを選択するには、スポットインスタンスアドバイザーを使用します。