Auto Scaling は、スケジュールタスクとイベントトリガータスク (ターゲット追跡ルールを含む) の両方をサポートしています。両方がアクティブな場合、不適切な設定が原因で、イベントトリガータスクがスケジュールタスクによるスケールアウトを上書きし、想定外のキャパシティになる可能性があります。これらの相互作用を理解することで、タスクを正しく設定し、スケーリングの競合を回避できます。
問題のシナリオ
スケーリンググループで予想インスタンス数、スケジュールタスク、イベントトリガータスク (ターゲット追跡ルールなど) が同時に有効になっている場合、競合が発生する可能性があります。具体的には、スケジュールタスクがスケールアウトをトリガーした後、その処理が完了する前にイベントトリガータスクが作動して予想インスタンス数を上書きし、スケールアウトが適用されなくなるケースです。
代表的なケース
原因分析
根本的な原因は、スケジュールタスクとイベントトリガータスクの実行メカニズムの違いにあります:
|
項目 |
スケジュールタスク (予想インスタンス数のみを変更する場合) |
イベントトリガータスク |
|
実行方法 |
スケーリングアクティビティを直接トリガーせず、予想インスタンス数の値のみを変更します。 |
直ちにスケーリングアクティビティをトリガーし、同時に予想インスタンス数を更新します。 |
|
有効になるまでの時間 |
予想インスタンス数が変更されてから反映されるまで 30 秒から 1 分かかります。 |
直ちに反映されます。 |
|
競合のリスク |
この遅延時間の間に、値が他のタスクによって上書きされる可能性があります。 |
実行時、現在の実際のインスタンス数に基づいて新しい予想インスタンス数を計算し、以前の値を上書きします。 |
根本的な問題:スケジュールタスクが予想インスタンス数のみを変更する場合、その操作はアトミックで即時有効なキャパシティ変更ではありません。30 秒から 1 分の遅延の間に、イベントトリガータスクが現在の実際のインスタンス数に基づいてスケーリングアクティビティをトリガーし、予想インスタンス数を再計算して上書きしてしまう可能性があります。
ベストプラクティス:ベースキャパシティはスケジュールタスクで、エラスティックキャパシティはイベントトリガータスクで管理
解決策の概要
「ベース + エラスティック」の階層型キャパシティモデルを使用して、スケジュールタスクとイベントトリガータスクの役割を明確に分離します:
-
ベースキャパシティ (スケジュールタスクによる管理):スケジュールタスクを使用して、最小インスタンス数と予想インスタンス数の両方を設定し、ピーク時間帯のキャパシティの最低ラインがイベントトリガータスクによって引き下げられないようにします。
-
エラスティックキャパシティ (イベントトリガータスクによる管理):ターゲット追跡ルールまたはイベントトリガータスクを使用して、実際の負荷に基づき、ベースキャパシティを上回るインスタンスを動的に追加または削除します。

操作手順
以下の例では、推奨される設定について説明します。ビジネス要件として、毎日午前 8:00 にベースラインの 10 インスタンスから 50 インスタンスにスケールアウトし、午後 10:00 に通常レベルに戻します。また、ターゲット追跡ルールを使用して CPU 使用率を 60% に維持するものとします。
ステップ 1:スケールアウト用スケジュールタスクの作成
ピーク時間帯の開始時に最小インスタンス数と予想インスタンス数の両方を設定するスケジュールタスクを作成します。これにより、ベースキャパシティが即時に有効になり、イベントトリガータスクによって上書きされるのを防ぎます。
-
Auto Scaling コンソールにログインします。
-
左側のナビゲーションペインで、スケーリンググループをクリックします。
-
対象のスケーリンググループを探し、その名前をクリックして詳細ページに移動します。
-
スケーリングルールとタスク タブをクリックします。スケジュールされたタスク タブで、スケジュール済みタスクの作成 をクリックします。
-
以下の設定で、スケールアウト用スケジュールタスクを作成します:
パラメーター
値
[タスク名]
scheduled-scale-up
[実行時刻]
毎日午前 8:00 (またはビジネスのピーク時間帯の開始時刻)
[繰り返しスケジュール]
毎日
[スケーリング方法]
[スケーリンググループのインスタンスの数を設定]
[最大インスタンス数]
50
[希望インスタンス数 (個)]
50
主要な設定: スケーリング方法 を スケーリンググループのインスタンスの数を設定 に設定し、最大インスタンス数 と 希望インスタンス数 (個) の両方を 50 に設定します。これにより、定時タスクは最小インスタンス数と期待インスタンス数を同時に更新し、イベントトリガー型タスクがインスタンス数を 50 未満にスケールインするのを防ぎます。
ステップ 2:スケールイン用スケジュールタスクの作成
ペアとなるスケールイン用スケジュールタスクを作成します。ピーク時間帯の終了後、リソースの無駄を避けるために、最小インスタンス数を通常レベルに戻します。
-
スケジュールされたタスクタブで、スケジュール済みタスクの作成をクリックし、次の設定を使用します。
パラメーター
値
[タスク名]
scheduled-scale-down
[実行時刻]
毎日午後 10:00 (またはビジネスのピーク時間帯の終了時刻)
[繰り返しスケジュール]
毎日
[スケーリング方法]
スケーリンググループのインスタンス数を設定
[最大インスタンス数]
10
[希望インスタンス数 (個)]
10
ステップ 3:ターゲット追跡ルールの設定
イベントトリガータスクが、スケジュールタスクによって設定されたベースキャパシティを上回る範囲で、実際の負荷に基づいて自動的にスケーリングできるように、ターゲット追跡ルールを作成します。
-
[スケーリングルールとタスク] タブをクリックします。[スケーリングルール] タブで、[スケーリングルールの作成] をクリックします。
-
以下の設定で、ターゲット追跡ルールを作成します:
パラメーター
値
[ルールタイプ]
[目標追従スケーリングルール]
[メトリックタイプ]
(ECS) 平均 CPU 使用率
[目標値]
60%
ターゲット追跡ルールは、CPU 使用率に基づいて、スケーリンググループの最小インスタンス数と最大インスタンス数の間でインスタンス数を自動的に調整します。スケジュールタスクによって最小インスタンス数が 50 に設定されているため、CPU 使用率が低い場合でも、インスタンス数が 50 を下回ることはありません。
設定後の想定される動作
|
時刻 |
イベント |
最小インスタンス数 |
予想インスタンス数 |
実際の効果 |
|
毎日午前 8:00 |
スケールアウト用スケジュールタスクがトリガー |
10 → 50 |
10 → 50 |
直ちに 50 インスタンスへのスケールアウトを開始 |
|
午前 8:00 – 午後 10:00 |
ターゲット追跡ルールが継続的に実行 |
50 |
50 以上 |
CPU 使用率が 60% を超えると、50 インスタンスをベースにスケールアウトします。60% を下回る場合は、最小 50 インスタンスまでスケールインします。 |
|
毎日午後 10:00 |
スケールイン用スケジュールタスクがトリガー |
50 → 10 |
50 → 10 |
通常のキャパシティレベルに戻ります。余剰なインスタンスは徐々に解放されます。 |
|
その他の時間 |
ターゲット追跡ルールが継続的に実行 |
10 |
10 以上 |
CPU 使用率に基づき、10 インスタンスをベースに弾力的にスケーリング |
設定のキーポイント
-
スケジュールタスクのスケーリング方法として [スケーリンググループのインスタンス数を設定] を選択します。予想インスタンス数のみを変更するのではなく、最小インスタンス数と予想インスタンス数の両方を設定します。
-
スケジュールタスクはペアで作成します:スケールアウトタスクとスケールインタスクをペアで作成し、ピーク時間帯の後に最小インスタンス数が通常に戻るようにして、リソースの無駄を避けます。
-
最小インスタンス数、予想インスタンス数、最大インスタンス数の関係:
-
スケジュールタスクは、最小インスタンス数 と 予想インスタンス数 を設定することで、ベースキャパシティを制御します。
-
イベントトリガータスクと ターゲット追跡ルール は、最小インスタンス数 と 最大インスタンス数 の間で弾力的に調整します。
-
組み込みのシステムルールにより、最小インスタンス数 ≤ 予想インスタンス数 ≤ 最大インスタンス数 という関係が保証されます。優先順位は明確であり、追加の競合回避メカニズムは不要です。
-
よくある質問
-
スケジュールタスクによるスケールアウトが成功した後、CPU 使用率が低い場合にターゲット追跡ルールがインスタンスをスケールインしますか?
いいえ。 定時タスクは 最大インスタンス数 も設定します。 ターゲット追跡ルールは、最大インスタンス数 未満にスケールインしません。 このため、最大インスタンス数 を同時に設定することが重要です。
-
スケジュールタスクで予想インスタンス数のみを変更することは可能ですか?
非推奨です。希望インスタンス数 (個) のみを変更すると、以下のリスクがあります。
-
希望インスタンス数 (個) の変更が反映されるまでに 30 秒から 1 分の遅延があります。この期間中、イベントトリガー型のタスクによって値が上書きされる可能性があります。
-
スケールアウトに成功しても、最大インスタンス数 がそれに応じて更新されていない場合、ターゲット追跡ルールによって、意図したレベルを下回るスケールインが発生する可能性があります。
-
-
スケジュールタスクで最大インスタンス数を設定する必要がありますか?
通常は不要です。最大インスタンス数 は、異常な状況で無制限にスケーリングされるのを防ぐため、通常は固定の上限値のままにします。業務で時間帯ごとに異なるインスタンス数の上限が必要な場合は、定時タスクで 最大インスタンス数 を調整することもできます。
-
簡易スケーリングルールを使用するイベントトリガータスクでも、競合は発生しますか?
はい、競合は依然として発生する可能性があります。イベントトリガー型タスクが シンプルスケーリングルール、ステップスケーリングルール、または 目標追従スケーリングルール のいずれに関連付けられているかに関わらず、定時タスクの遅延期間中にトリガーされた場合、希望インスタンス数 (個) を上書きします。このトピックの解決策は、すべてのタイプのイベントトリガー型タスクに適用されます。