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 は、お客様の環境のオンデマンドインスタンスとスポットインスタンスを組み合わせることができます。

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

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

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

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

重要

スポットインスタンスに対する需要は刻一刻と大幅に変化する可能性があります。また、スポットインスタンスの可用性も利用可能な未使用の Amazon EC2 インスタンスの数に応じて大きく変化する可能性があります。スポットインスタンスが中断される可能性は常にあります。したがって、アプリケーションでスポットインスタンスの中断に対して準備する必要があります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「スポットインスタンスの中断」を参照してください。

Elastic Beanstalk には、スポット機能をサポートするためのいくつかの設定オプションが用意されています。これらの設定は、以降の Auto Scaling グループの構成に関するセクションで説明します。これらのオプションのうち、SpotFleetOnDemandBaseSpotFleetOnDemandAboveBasePercentage(両方とも aws:ec2:instances 名前空間内)の 2 つは特に注意する必要があります。MinSize オプションとどのように関連するかを検討してください(aws:autoscaling:asg 名前空間内)。MinSize のみが環境の初期容量を決定します。初期容量は、実行する最小のインスタンス数です。SpotFleetOnDemandBase は初期容量に影響しません。スポットが有効である場合、このオプションは任意のスポットインスタンスが考慮される前に、プロビジョニングされるオンデマンドインスタンス数のみを決定します。SpotFleetOnDemandBaseMinSize よりも少ない場合、初期容量として正確な MinSize インスタンスを取得します。このうち少なくとも SpotFleetOnDemandBase がオンデマンドインスタンスである必要があります。SpotFleetOnDemandBaseMinSize よりも大きい場合、環境のスケールアウトに伴い、少なくとも SpotFleetOnDemandBase - MinSize インスタンスの追加が保証されます。これは SpotFleetOnDemandBase 要件を満たす前にオンデマンドです。

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

コメント
  • 一部の古い 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 グループ設定

Auto Scaling の動作は、Elastic Beanstalk コンソール で環境の [Configuration (設定)] ページの [Capacity (容量)] を編集することによって設定できます。

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

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

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

    注記

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

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

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

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

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

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

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

      注記

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

    • フリート組成 – スポットインスタンスリクエストを有効にするには、[Combined purchase options and instance types (購入オプションとインスタンスタイプの組み合わせ)] を選択します。

      この例では、[オンデマンドインスタンス] を選択します。

    • インスタンスタイプ – アプリケーションを実行するために起動した 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

単一の Amazon EC2 インスタンスを使用して環境を作成するオプション。ロードバランサーは使用しません。このオプションを指定しないと、負荷分散環境が作成されます。

--instance-types

環境で使用する Amazon EC2 インスタンスタイプのリスト。

--enable-spot
--spot-max-price

スポットインスタンスリクエストの有効化と設定に関連するオプション。

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

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

設定オプション

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

aws:autoscaling:asg 名前空間

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

次の設定ファイルのの例では、2~4 個のインスタンス、特定のアベイラビリティーゾーン、および 12 分間(720 秒間)のクールダウン期間を使用するように Auto Scaling グループを設定します。

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

aws:ec2:instances 名前空間

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

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

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

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

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