メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

Elastic Beanstalk で Auto Scaling を設定する

Auto Scaling は、ユーザーが定義したパラメータに基づいて、Auto Scaling group 内の Amazon EC2 インスタンスを自動的に起動または終了するように設計されたウェブサービスです。Elastic Beanstalk は、ロードバランシング、Auto Scaling 環境で Auto Scaling をサポートします。Amazon EC2 インスタンス数を自動的に増減することで、アプリケーションへのトラフィックの変化にシームレスに対応できます。ユーザーが Auto Scaling group に対して定義するトリガは、帯域幅の使用量や CPU 使用率などのメトリクスに応じてコンピューティングリソースをスケールするように Elastic Beanstalk に指示します。特定の時刻に実行するようにスケーリングアクションをスケジュールすることもできます。Auto Scaling は、Amazon CloudWatch と連携して、アプリケーションを実行するサーバーインスタンスのメトリクスを取得します。

Auto Scaling は、起動した各 Amazon EC2 インスタンスの状態もモニタリングします。インスタンスが予期せず終了した場合、Auto Scaling は終了を検出し、代わりのインスタンスを起動します。この機能を使用すると、任意の固定の Amazon EC2 インスタンス数を自動的に維持できます。

注記

Auto Scaling の設定は、ローリング更新に影響する可能性があります。ローリング更新を設定してある場合、ローリング更新の対象となる稼働中インスタンスの最小数が、Auto Scaling group の最大サイズより大きい場合、ローリング更新は実行されません。ローリング更新の [Minimum instances in service] 設定、または Auto Scaling group の [Maximum instance count] 設定のどちらかの値を変更する必要があります。

Auto Scaling の詳細については、Auto Scaling ドキュメントを参照してください。

AWS マネジメントコンソール

Auto Scaling の動作は、環境マネジメントコンソールで環境の [Configuration] ページの [Scaling] を編集することで設定することができます。

 [Elastic Beanstalk Auto Scaling Configuration] ウィンドウ

ここでは、アプリケーションの Auto Scaling パラメータの設定方法について説明します。

起動設定

ページの [Auto Scaling] セクションで起動設定を編集することで、Elastic Beanstalk アプリケーションが Auto Scaling リソースをプロビジョニングする方法を制御できます。

[Minimum instance count] ボックスと [Maximum instance count] ボックスを使用して、Elastic Beanstalk アプリケーションが使用する Auto Scaling の最小サイズと最大サイズを指定できます。

注記

固定の Amazon EC2 インスタンス数を維持するには、[Minimum instance count] ボックスと [Maximum instance count] ボックスを同じ値に設定します。

[Availability Zones] ボックスを使用すると、Elastic Beanstalk でインスタンスを起動するアベイラビリティーゾーンの数を指定できます。いずれかのアベイラビリティーゾーンが利用不可になった場合に別のゾーンでインスタンスを起動できるように、複数のアベイラビリティーゾーンを選択することをお勧めします。例えば、3 インスタンス以上存在する場合は、[Availability Zones] に「3」を指定します。

[Custom Availability Zones] ボックスを使用すると、リージョン内で Elastic Beanstalk がインスタンスを起動するアベイラビリティーゾーンを指定できます。カスタムアベイラビリティーゾーンを選択しなかった場合、Elastic Beanstalk が自動的にアベイラビリティーゾーンを選びます。アベイラビリティーゾーンの数は、選択したカスタムアベイラビリティーゾーンと同じかそれ以下でなければなりません。例えば、[Any 2] を選択した場合は、少なくとも 2 つのカスタムアベイラビリティーゾーンを選択する必要があります。

注記

アベイラビリティーゾーンでの作業時の注意点がいくつかあります。

  • フォールトトレラントなアプリケーションを構築するには、複数のアベイラビリティーゾーンでインスタンスを起動することが大切です。それにより、1 つのアベイラビリティーゾーンがダウンしても、別のアベイラビリティーゾーンで動作を続行することができます。

  • リザーブドインスタンスを購入した場合は、購入時に指定したのと同じアベイラビリティーゾーンを指定する必要があります。リザーブドインスタンスでは、インスタンスに対して低額の予約金支払いを行い、1 年または 3 年間それを予約することで、そのインスタンスを実行する時間料金を大幅に削減できます。リザーブドインスタンスの詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「リザーブドインスタンス」を参照してください。

  • デフォルトの VPC 環境または非 VPC 環境でのみ、カスタムアベイラビリティーゾーンを作成できます。

[Scaling cooldown (seconds)] ボックスには、Auto Scaling がインスタンスを起動した後、何らかのスケーリングアクティビティを再開するまでに待機する時間を指定します。この指定により、新しいインスタンスがトラフィックの処理を開始するための時間が確保されます。クールダウン期間が経過するまでに、CloudWatch アラームが継続して発行されないような適切なリソースレベルが環境で維持された場合、新しいインスタンスは起動されません。

トリガ

ページの [Scaling Trigger] セクションを編集することで、Elastic Beanstalk アプリケーションのスケーリングアクションに関するメトリクスベースのパラメータを設定することができます。トリガとは、インスタンス数を増やす(スケールアウト)タイミングやインスタンス数を減らす(スケールイン)タイミングをシステムに指示するために定義する、Auto Scaling のメカニズムです。Amazon CloudWatch に対して発行される Amazon EC2 または Elastic Load Balancing のメトリクス(Amazon EC2 インスタンスの CPU 使用率など)に基づいて実行するようにトリガを設定し、指定した条件を満たしているかどうかを判断することができます。メトリクスについて指定した条件の上限または下限を、指定した期間超過すると、トリガによって規模の拡大や縮小と呼ばれる、長時間実行されるプロセスが起動されます。Amazon EC2 メトリクスの詳細については、『Amazon CloudWatch ユーザーガイド』の「Amazon Elastic Compute Cloud のディメンションおよびメトリクス」を参照してください。Elastic Load Balancing メトリクスの詳細については、『Elastic Load Balancing ユーザーガイド』の「Amazon CloudWatch を使用した Load Balancer の監視」を参照してください。

Auto Scaling のトリガは、インスタンス固有の Amazon CloudWatch メトリクスを監視して動作します。トリガには、CPU 使用率、ネットワークトラフィック、ディスクアクティビティ、インスタンスの状態が含まれます。[Trigger Measurement] ドロップダウンリストを使用して、トリガのメトリクスを指定します。

次の一覧では、AWS マネジメントコンソールを使用して設定できるトリガパラメータについて説明します。

  • [Trigger statistic] を使用して、トリガが使用する統計を、MinimumMaximumSumAverage から指定します。

  • [Unit of measurement] を使用して、トリガ測定の単位を指定します。

  • [Measurement period] に、Amazon CloudWatch がトリガのメトリクスを測定する頻度を指定します。[Breach duration] は、トリガが発せられるまでに、指定した限度([Upper threshold] と [Lower threshold] の値)を超えることが許可される時間を示します。

  • [Upper breach scale increment] と [Lower breach scale increment] ボックスでは、スケーリングアクティビティを実行するときに追加または削除する Amazon EC2 インスタンスの数を指定します。

時間に基づくスケーリング

時間に基づくスケーリングでは、各 Auto Scaling group で Amazon EC2 インスタンスを起動または終了するスケーリングアクションを計画することができます。必要に応じて、スケーリングアクションをスケジュールできます。有効期限切れも含め、環境でスケジュールされているスケーリングアクションのリストを表示するには、AWS マネジメントコンソールの [Scaling] ページの [Time-based Scaling] セクションを参照してください。1 つの環境には、有効期限切れのアクション(過去に終了したアクション)を除き、スケジュールに基づくスケーリングアクションを最大 120 個設定できます。

ご使用の Elastic Beanstalk アプリケーションで、特定の時期におけるスケールアウトまたはスケールインのニーズが予測可能である場合は、スケーリングアクションを反復的にスケジュールできます。また、将来予定される 1 回限りのイベントについて、スケーリングアクションをスケジュールすることもできます。スケジュールに基づくアクションをまったく新しく作成する代わりに、有効期限切れのスケジュールに基づくアクションの開始時刻を将来の日時に変更することで、アクションを再利用できます。(Elastic Beanstalk は、有効期限切れのスケジュールに基づくアクションのうち最新 150 個の履歴を保持します)。

[Time-based Scaling] セクションの表には、以下の情報が表示されます。

  • [Name] 列には、スケジュールに基づくアクションを作成したときに割り当てた名前が表示されます。作成後にスケーリングアクションの名前を変更することはできません。

  • [Limits] 列には、スケジュールに基づくアクションを作成したとき、または最後に変更したときに、Auto Scaling group に指定したインスタンスの最小数、最大数、希望する数が表示されます。

  • [Next occurrence] 列には、スケジュールに基づくアクションが次に有効になる日時が表示されます。反復的なスケーリングアクションの場合、[Next occurrence] は、CRON 式を使用して指定した繰り返しに基づきます。

ページの [Time-based Scaling] セクションで、[Add scheduled action] をクリックすると [New scheduled action] ウィンドウが表示され、以下のオプションを指定できます。

 Elastic Beanstalk の [New Scheduled Scaling Action] ウィンドウ
  • [Name] を使用して、スケジュールに基づくスケーリングアクションに、他のスケーリングアクションと区別し、後で探すために使用できる名前を指定します。空白を使用せず、英数字で指定する必要があります。この名前には 255 文字の制限があります。

  • [Instances] には、その Auto Scaling group のインスタンス数の最小値([Min])と最大値([Max])を指定します。

  • [Desired capacity] ボックスには、その Auto Scaling group で実行したいインスタンス数を指定します。希望する容量は、インスタンスの最大数として定義した値以下、かつ最小数として定義した値以上でなければなりません。

  • [Occurrence] では、このスケーリングアクションを 1 回だけ実行するのか、繰り返し実行するのかを選択します。

    • [One-time] を選択する場合、以下の項目を設定します。

      • [Start time] – アクションを実行する将来の日付と時刻を指定します。

    • [Recurrent] を選択する場合、以下の項目を設定します。

      • [Recurrence] – CRON 式を使用して、スケジュールに基づくアクションを実行する頻度を指定します。たとえば、毎週火曜日の午前 6:30 (UTC 時刻) に有効になるように反復的なアクションをスケジュールする場合、「30 6 * * 2」という CRON 式を使用できます。CRON の構文の詳細については、「Cron」を参照してください。

      • [Start time](オプション)– アクションを起動する将来の日付と時刻を指定します。開始時間を指定しない場合、予定されたアクションは即座にアクティブになります。コンソールは、デフォルトで次の 1 時間の最初を自動的に選択します。

      • [End time](オプション)– スケジュールに基づくアクションを停止する将来の日付と時刻を指定します終了時刻を指定しない場合、そのスケーリングアクションは、終了日時を設定するまで繰り返されます。

ISO 8601 時間形式を使用して、開始時刻と終了時刻を UTC で指定します。たとえば、2015-04-28T04:07:02Z のように指定します。ISO 8601 時刻形式の詳細については、「Date and Time Formats」を参照してください日付はすべての予定されているアクションで一意である必要があります。

スケジュールに基づくアクションは、Elastic Beanstalk マネジメントコンソールを使用して停止することはできませんが、オプションで EB CLI で停止することができます。スケジュールに基づくスケーリングアクションを停止すると、Elastic Beanstalk はスケジュールに基づくアクションを無視し、何も実行しません。アクションを停止することで、スケジュールに基づくアクションを削除することなく停止できるため、必要な場合には後で再開することができます。

Auto Scaling 設定名前空間

Elastic Beanstalk は、以下の名前空間で追加の設定オプションを提供しており、お使いの環境で Auto Scaling をさらにカスタマイズすることができます。

例: 時間ベースのスケーリングアクションの設定

このセクションでは、スケジュールに基づくスケーリングアクションを設定するオプション設定ファイルの例を示します。これらのファイルをアプリケーションソースバンドルの .ebextensions ディレクトリに含めます。アプリケーションでの設定ファイルのデプロイの詳細については、設定ファイル (.ebextensions) による高度な環境のカスタマイズを参照してください。

例 scheduled-scale-up-specific-time.config

この設定ファイルでは、2015-12-12T00:00:00Z に 5 インスタンスから 10 インスタンスにスケールアウトするよう Elastic Beanstalk に指示しています。

option_settings:
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: MinSize
    value: '5'
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: MaxSize
    value: '10'
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: DesiredCapacity
    value: '5'
  - namespace: aws:autoscaling:scheduledaction
    resource_name: ScheduledScaleUpSpecificTime
    option_name: StartTime
    value: '2015-12-12T00:00:00Z'

同じ設定を指定する簡単な構文の例を次に示します。

option_settings:
  ScheduledScaleUpSpecificTime.aws:autoscaling:scheduledaction:
    MinSize: '5'
    MaxSize: '10'
    DesiredCapacity: '5'
    StartTime: '2015-12-12T00:00:00Z'

例 scheduled-scale-down-specific-time.config

この設定ファイルでは、2015-12-12T07:00:00Z にスケールインするよう Elastic Beanstalk に指示しています。

option_settings:
  ScheduledScaleDownSpecificTime.aws:autoscaling:scheduledaction:
    MinSize: '1'
    MaxSize: '1'
    DesiredCapacity: '4'
    StartTime: '2015-12-12T07:00:00Z'

例 scheduled-periodic-scale-up.config

この設定ファイルでは、毎日午前 9 時にスケールアウトするよう Elastic Beanstalk に指示しています。このアクションは、2015 年 5 月 14 日に開始し、2016 年 1 月 12 日に終了するようにスケジュールされます。

option_settings:
  ScheduledPeriodicScaleUp.aws:autoscaling:scheduledaction:
    MinSize: '5'
    MaxSize: '10'
    DesiredCapacity: '5'
    StartTime: '2015-05-14T07:00:00Z'
    EndTime: '2016-01-12T07:00:00Z'
    Recurrence: 0 9 * * *

例 scheduled-weekend-scale-down.config

この設定ファイルでは、毎週金曜日の午後 6 時にスケールインするよう Elastic Beanstalk に指示しています。週末はアプリケーションが大量のトラフィックを受信しないことがわかっている場合は、同様のスケジュールに基づくアクションを作成できます。

option_settings:
  ScheduledWeekendScaleDown.aws:autoscaling:scheduledaction:
    MinSize: '1'
    MaxSize: '4'
    DesiredCapacity: '1'
    StartTime: '2015-12-12T07:00:00Z'
    EndTime: '2016-01-12T07:00:00Z'
    Recurrence: 0 18 * * 5

コマンドラインインターフェイス(CLI)

EB CLI を使用して、Auto Scaling の環境設定を編集できます。

EB CLI を使用してアプリケーションの環境設定を編集するには

  1. アプリケーションの環境設定を更新します。

    $ eb config my-env
  2. オプション設定ファイルをテキストエディタで開き、以下の設定を追加します。

      AWSEBAutoScalingScaleDownPolicy.aws:autoscaling:trigger:
        LowerBreachScaleIncrement: '-1'
      AWSEBAutoScalingScaleUpPolicy.aws:autoscaling:trigger:
        UpperBreachScaleIncrement: '1'
      AWSEBCloudwatchAlarmHigh.aws:autoscaling:trigger:
        UpperThreshold: '6000000'
      AWSEBCloudwatchAlarmLow.aws:autoscaling:trigger:
        BreachDuration: '5'
        EvaluationPeriods: '1'
        LowerThreshold: '2000000'
        MeasureName: NetworkOut
        Period: '5'
        Statistic: Average
        Unit: Bytes
      aws:autoscaling:asg:
        Availability Zones: Any
        Cooldown: '360'
        Custom Availability Zones: null
        MaxSize: '4'
        MinSize: '1'
      aws:autoscaling:launchconfiguration:
        BlockDeviceMappings: null
        EC2KeyName: null
        IamInstanceProfile: aws-elasticbeanstalk-ec2-role
        ImageId: ami-13de5b0e
        InstanceType: t1.micro
        MonitoringInterval: 5 minute
        RootVolumeIOPS: null
        RootVolumeSize: null
        RootVolumeType: null
        SSHSourceRestriction: tcp,22,22,0.0.0.0/0
        SecurityGroups: awseb-e-um3yfrzq22-stack-AWSEBSecurityGroup-10MV688E4994W

EB CLI を使用して、カスタムアベイラビリティーゾーンを指定することもできます。

EB CLI を使用してアプリケーション環境設定のカスタムアベイラビリティーゾーンを更新するには

  1. Auto Scaling 用のカスタムアベイラビリティーゾーンを指定して、アプリケーション環境設定を更新します。

    $ eb config
  2. オプション設定ファイルをテキストエディタで開き、以下の設定を追加します。

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

EB CLI を使用して、環境内の Auto Scaling group ごとに、インスタンス数をスケールアウトまたはスケールインするためのスケジュールに基づくアクションを作成することができます。

EB CLI を使用してスケジュールに基づくスケーリングアクションを作成するには

  1. Run eb config

    $ eb config
  2. オプション設定ファイルをテキストエディタで開き、以下の設定を追加して、1 回限りのスケジュールに基づくスケーリングアクションを作成します。

    注記

    以下の例では、ScheduledScaleUpSpecificTimeScheduledScaleUpRecurring は、それぞれのスケジュールに基づくアクションに付ける名前です。設定は、スケジュールに基づくスケーリングアクション名に従ってグループ化されます。

      ScheduledScaleUpSpecificTime.aws:autoscaling:scheduledaction:
        DesiredCapacity: '5'
        EndTime: null
        MaxSize: '10'
        MinSize: '5'
        Recurrence: null
        StartTime: '2015-12-12T00:00:00Z'
        Suspend: 'false'

    オプション設定ファイルをテキストエディタで開き、以下の設定を追加して、反復的なスケジュールに基づくスケーリングアクションを作成します。

      ScheduledScaleUpRecurring.aws:autoscaling:scheduledaction:
        DesiredCapacity: '5'
        EndTime: '2016-01-12T07:00:00Z'
        MaxSize: '10'
        MinSize: '5'
        Recurrence: '0 9 * * *'
        StartTime: '2015-12-12T00:00:00Z'
        Suspend: 'false'
    

EB CLI および Elastic Beanstalk コンソールは、上記のオプションで推奨値を適用します。設定ファイルを使用して同じオプションを設定する場合、これらの設定値は削除する必要があります。詳細については、「推奨値」を参照してください。