Auto Scalingは「入れれば勝手に伸縮する」ものではありません。指標選び、ウォームアップ、スケールインの安全設計を外すと、遅延・コスト・障害のいずれかを踏みます。EC2とECSの実務ポイントを整理します。

Auto Scalingは、EC2でもECS/Fargateでも「導入した瞬間に効く」機能ではありません。効かせるかどうかは、スケール指標の選び方、ウォームアップ時間の設定、そしてスケールインをどこまで安全に倒すかという設計判断で決まります。本記事では、EC2 Auto Scaling・ECSサービスAuto Scaling(Application Auto Scaling)を対象に、ターゲット追跡/ステップ/スケジュール/予測の使い分けから、スパイク対応とコストまでを、実務の落とし穴込みで整理します。

01まず全体像 — 3つのAuto Scalingを混同しない

AWSで「Auto Scaling」と呼ばれるものは実は複数あり、設定面もAPIも別です。ここを混同すると設計会議が噛み合いません。

本記事では実務で触る機会が多いEC2 Auto ScalingとECSサービスAuto Scalingを中心に扱います。ECSの起動タイプ選定はFargate対EC2起動タイプ、EC2のインスタンスタイプ選びはEC2インスタンスタイプ選定も併せてご覧ください。

スケーリングポリシーの使い分け ターゲット追跡 CPU/メモリ/ リクエスト数を 目標値に維持 まず第一候補 ステップ 閾値の乖離幅で 増減量を段階指定 急変への反応を 細かく制御 スケジュール 時刻ベースで 下限を先回り 既知のイベント セール等 予測(EC2のみ) 過去データから 需要を予測し 先回り増強 周期性が前提 実務の基本形 ターゲット追跡(常時) + 予測 or スケジュール(先回り) 複数併用時は各ポリシーの必要台数の「最大値」が採用される
図:4種のスケーリングポリシーと、実務での基本的な組み合わせ方

02ターゲット追跡が第一候補である理由

AWSは明確に、平均CPU使用率やターゲットあたりリクエスト数といった指標に対してはターゲット追跡スケーリングを推奨しています。ターゲット追跡では、指標と目標値を決めるだけで、AWS側がCloudWatchアラームを自動生成・管理し、必要台数を逆算して増減します。運用負荷が低く、需要曲線に追従しやすいのが利点です。

EC2でよく使う定義済み指標はASGAverageCPUUtilization、ALB配下ならALBRequestCountPerTarget。ECSサービスではECSServiceAverageCPUUtilizationECSServiceAverageMemoryUtilizationALBRequestCountPerTargetが定番です。

現場のコツ:ターゲット追跡は「1つのターゲット値を維持する」思想なので、複数ターゲット追跡ポリシーを同一グループに付けるとスケールイン方向で綱引きが起きます。基本は主要指標1本に絞り、どうしても2軸必要なら、片方をステップにするか、スケールインを片方だけに任せる設計にします。

03指標選定 — ここを外すと全部崩れる

Auto Scaling設計の本丸は指標選定です。AWSのECS運用ベストプラクティスは、スケール指標が満たすべき2条件を明快に示しています。

この2条件を満たさない指標でスケールすると、増やしても指標が下がらず暴走する、あるいは下がりすぎて振動する、といった破綻が起きます。特にメモリベースのスケーリングは要注意です。AWSは、JVM(Java 8 update 191以降)が利用可能なメモリいっぱいにヒープを確保するため、メモリ使用率がスループットやコンカレンシーと相関しないケースが多いと明記しており、Javaや.NET・Rubyなどのランタイムではメモリベースのスケーリングを推奨していません。CPUバウンドならCPU使用率、そうでなければ負荷試験に基づき平均スループットか平均コンカレンシーで、というのが公式の指針です。

アプリの型 推奨スケール指標 補足
CPUバウンドなAPI平均CPU使用率最も素直。c系インスタンス向き
メモリバウンド(解放される)平均メモリ使用率リクエスト終了でメモリ解放が前提
ワーカー型(同時実行上限あり)平均コンカレンシー上限到達前に増強。カスタム指標推奨
Java/GC系ランタイムCPU or 平均リクエスト数メモリは避ける
非同期ジョブ処理キュー深さSQSはApproximateNumberOfMessagesVisible

指標は机上で決めず、ステージング環境の負荷試験で決めるのが公式の推奨です。負荷を段階的に上げ、SLOを割るまでの各指標の振る舞いを観測し、飽和リソースと比例性を確認してから採用します。監視の土台づくりはCloudWatch監視の第一歩も参照してください。

04ウォームアップとクールダウン — 振動を止める要

スケールアウト直後のインスタンスは、起動・アプリ初期化・JITウォームアップなどで一時的にCPUが跳ねたり、逆にまだトラフィックを受けていなかったりします。これを集計に含めると、Auto Scalingが誤った判断をして台数が振動します。

EC2 Auto Scalingではデフォルトインスタンスウォームアップを設定します。これは、インスタンスがInServiceになってから、集計指標にデータを寄与し始めるまでの待機時間です。これを設定しておくと、暖機中の個別インスタンスの一時的な高負荷でスケール判断が歪むのを防げます。AWSはこの設定を強く推奨しており、設定するとステップ/ターゲット追跡のウォームアップ時間として一元的に使われます(旧来のクールダウンに代わる推奨機構)。

現場のコツ:ウォームアップ時間は「AMIのブート+コンテナ起動+アプリのreadyまで」を実測して決めます。ゴールデンAMIやコンテナイメージの軽量化で起動を短縮すると、スパイク追従が段違いに良くなります。イメージの整備はコンテナイメージのハードニングも参考に。

05スケールインの安全設計 — 事故はだいたい縮小時に起きる

スケールアウトの失敗は「遅い・高い」で済みますが、スケールインの失敗は処理中のリクエストを切る・ジョブを殺すという実害につながります。ここは臆病に設計します。

スケールインは「速く」ではなく「安全に、ゆっくり」が原則です。ターゲット追跡は増強を速く・縮小を保守的に振る舞うよう設計されていますが、アプリ側のシャットダウン処理が甘いと台無しになります。

スケールアウトは速く/スケールインは安全に 時間 スケールアウト 閾値超で即増強 起動+ウォームアップ InService 暖機完了後に 指標へ寄与開始 スケールイン 保守的に判断 保護+ドレイン スケールイン時の安全機構 1. 登録解除の遅延(deregistration_delay)で処理中リクエストを流し切る 2. スケールイン保護 / ECSタスク保護で長時間処理を守る 3. SIGTERM受信でグレースフルシャットダウン(stopTimeout内で完了)
図:スケールアウトは速く、スケールインは複数の安全機構で保守的に

06予測スケーリング — 効く条件を見極める

予測スケーリング(EC2 Auto Scaling専用)は、過去の指標から需要を予測し、需要が立ち上がる前に先回りで増強する機能です。周期性のあるワークロード、たとえば「平日朝に負荷が立ち上がる」「毎週末にアクセスが増える」といった曜日・時間帯に固有の繰り返しパターンを持つ場合に効果を発揮します。

公式ドキュメントベースで押さえるべき要点は次の通りです(数値・仕様はバージョン依存のため公式で最新を確認してください)。

現場のコツ:予測スケーリングは「まずforecast onlyで1〜2週間観測し、外れ具合を見てから本番投入」が鉄則です。混在インスタンスグループ(Mixed Instances)でvCPUやネットワーク帯域が機種で異なると予測がずれるため、予測を使うグループは機種を揃えるのが無難です。周期性が読めない突発スパイク主体のワークロードには予測は向きません。

07スパイク対応 — 予測できない急変にどう備えるか

予測やスケジュールが効くのは「読める」需要です。読めない急変には、ターゲット追跡だけでは起動時間ぶんの遅れが必ず出ます。実務での備え方は次の通りです。

ECSのクラスターキャパシティ(EC2起動タイプでのインスタンス側)は、キャパシティプロバイダとManaged Scalingで別途スケールする二層構造になります。タスクだけ増やしても載せる先のEC2が無ければ意味がないため、この二層の整合を必ず確認してください。

08コスト最適化 — スケール設計はそのままコスト設計

Auto Scalingは「必要なときだけ払う」ための仕組みですが、設計次第で逆にコストを膨らませます。判断軸を整理します。

スケール設計はコスト設計そのものです。指標・ターゲット値・下限台数・割引適用の4点を、SLOとコスト目標の両にらみで決めるのがEMWの基本方針です。実運用の監視・アラート設計は監視・アラート設計と併せて固めてください。

まとめ

Auto Scaling設計の勘所を整理します。

「入れれば伸縮する」ではなく、指標選定・ウォームアップ・スケールインの安全という3点を詰めきることが、遅延もコストも障害も出さないAuto Scaling設計の核心です。

参考(一次情報)

Auto Scaling方針の設計レビューや、既存グループのチューニングはお問い合わせください。負荷試験からの指標選定までご支援します。

相談する
← ブログ一覧へ戻る