AWS SAA(Solutions Architect - Associate)対策

Auto Scalingポリシー

このレッスンでできるようになること

需要の変わり方を読んで、目標追跡・ステップ・スケジュール・予測のどのスケーリング方式を選ぶか、そして間に合わないときに何を足すかを判断できるようになります。

まず要件を読む

あるメディア企業が、Auto Scaling グループの後ろで記事配信サーバーを動かしています。平日の昼はゆるやかに混み、毎週月曜の朝 9 時にメールマガジンを配信した直後だけアクセスが跳ね上がります。現在は CPU 使用率が上がってから台数を増やしているのですが、増えたインスタンスが応答できるようになる頃には山が過ぎており、その間ユーザーがエラー画面を見ています。運用チームを増やさずに直したい、という相談です。

ここには2つの別々の問題が混ざっています。ゆるやかな増減への追従と、時刻が読めているスパイクへの先回りです。SAA では、この2つを別のポリシーで解くと気づけるかが問われます。

4つの方式の線引き

方式何を指示するか向いている場面
目標追跡スケーリング「平均 CPU を 50 パーセントに保て」のように目標値だけ負荷がなめらかに増減する。まず既定で選ぶ
ステップスケーリングしきい値の帯ごとに増やす台数を指定超過の度合いで増やす量を変えたい
シンプルスケーリング1つのアラームで一定数を増減古い方式。新規設計では選ばない
スケジュールされたアクション日時を指定して最小台数を上げ下げ増える時刻が決まっている
予測スケーリング過去のパターンから先回りして台数を用意曜日や時間帯で繰り返す山がある

目標追跡とステップは、どちらもメトリクスを見てから動きます。つまり山が来てから起動が始まる方式です。起動に時間がかかるアプリでは、この遅れがそのまま障害時間になります。

スケジュールと予測は、山が来る前に台数を用意する方式です。冒頭の月曜 9 時のように時刻が確定しているならスケジュール、曜日や時間帯で繰り返すが厳密な時刻までは決まっていないなら予測が合います。

そして予測スケーリングは単独では使いません。過去にない山が来たときに追従できないからです。予測で土台を用意し、目標追跡で残りの揺れを吸収する、という組み合わせが基本形です。

立ち上がりが遅いときに足すもの

台数を増やす判断が正しくても、インスタンスが使い物になるまで数分かかるなら間に合いません。次を検討します。

  • ウォームアップの設定 — 起動直後のインスタンスのメトリクスを集計から除き、増やしすぎと減らしすぎを防ぐ
  • ウォームプール — あらかじめ初期化済みのインスタンスを停止状態で待たせ、必要になったら起動するだけにする
  • ライフサイクルフック — 起動完了前の準備や、終了前のログ退避のために状態を保留する
  • ヘルスチェックタイプを ELB にする — EC2 としては生きているがアプリが応答しない、という状態を検知して入れ替える

要件語から構成への対応

要件の言い回し選ぶもの
使用率を一定に保ちたい / 運用の手間を最小に目標追跡スケーリング
超過の度合いによって増やす台数を変えたいステップスケーリング
毎日 9 時から / 決まった時刻に必ず増えるスケジュールされたアクション
曜日ごとの傾向がある / 事前に用意しておきたい予測スケーリング(目標追跡と併用)
起動に時間がかかり、スパイクに間に合わないウォームプール
プロセスは生きているが応答しないインスタンスがあるヘルスチェックタイプを ELB に

よくある引っ掛け

その1 「しきい値を下げる」だけの選択肢。 CPU 60 パーセントで増やしていたのを 40 パーセントに下げれば早く動き出しますが、起動時間そのものは縮まないうえ、平常時も台数が増えてコストが上がります。原因が起動の遅さなら、ウォームプールや予測が正解です。

その2 最大台数を常に高くしておく選択肢。 最大値は上限であって台数ではないので、これを上げても山の直前に台数は増えません。先回りさせたいならスケジュールで最小台数を上げます。

まとめ

  • 迷ったらまず目標追跡。運用の手間が最も少ない
  • 時刻が確定しているならスケジュール、繰り返す傾向があるなら予測
  • 予測スケーリングは目標追跡と組み合わせて使う
  • 起動が遅くて間に合わない問題は、ポリシーではなくウォームプールで解く
  • アプリの生死を見たいならヘルスチェックタイプを ELB にする
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

ある企業のアプリケーションは、Auto Scaling グループで動いています。負荷は毎日夕方に決まって高まるものの、インスタンスの起動から初期化完了まで約 8 分かかるため、CPU 使用率をトリガーにした現在の設定では立ち上がりが常に間に合わず、夕方の数分間だけエラーが出ています。運用の手間を増やさずにこれを解消する構成はどれですか。