Qiitaの記事であまり詳しい説明を見かけないので ElasticBeanstalk の Time-based Scaling についてご紹介したいと思います。
Time-based Scaling とは
ElasticBeanstalk では AutoScaling により、サービスへのアクセス増加に対して柔軟にリソースが追加される仕組みが備わっています。
しかし、AutoScaling では決められたCPU使用率などの閾値を超えない限りインスタンスの追加は行われないため、急激なアクセス増には上手く対応出来ないという欠点があります。
そこで登場したのが Time-based Scaling です。
あらかじめアクセス数の増加が予想できる場合、スケジュールを事前に登録しておくことで希望するインスタンス数を自動的に立ち上げておくことが出来ます。
普段10台で運用している環境で、19時を過ぎたら20台のインスタンスを用意したい、という場合には19時を過ぎたタイミングで不足分のインスタンスが自動的に立ち上がり、ロードバランサーに追加されます。
逆に24時を過ぎたら10台に戻したい、という場合もスケジュールを追加することで対応出来ます。
設定方法
マネージメントコンソールでの設定方法を簡単にご紹介します。
まず環境を選択し、「設定」を開きます。
「容量」の「編集」を押して編集画面を開きます。
よく使うのは AutoScaling の設定とスケーリングトリガーの部分ですが、画面の一番下に Time-based Scaling の設定メニューがあります。(日本語環境では「時間に基づくスケーリング」と表記)
「スケジュールされたアクションの追加」からスケジュールが追加出来ます。
インスタンスの最小数・最大数は指定した時間以降のAutoScalingの最小値・最大値を設定します。
希望する容量には必要なインスタンス数を設定します。
指定した時刻に起動しているインスタンス数と希望する容量とに差分がある場合、自動的にインスタンスの起動や停止が行われます。
頻度には1回限りか繰り返しが選べます。
通常は繰り返しを選択し、CRON式でスケジュールを指定することになると思います。
一定期間のみの適用であれば、開始時刻・終了時刻を指定して制御することも可能です。
「追加」を押すと先程のスケジュールの一覧に追加されます。
注意点
UTCベースなので時刻を間違えやすい
CRON式を日本基準で書いてしまうと9時間ずれてしまいます。
また、曜日の指定なども注意が必要です。
スケジュールのリストにタイムゾーンの選択肢としてUTCとローカルがありますので、ローカルを選択して正しく設定されているかを確認するようにしましょう。
「適用」を押すまでは反映されない(スケジュールを変更した場合も同様)
スケジュールは「適用」を押すまでは環境に反映されていません。
追加や変更をした後は必ず「適用」を押しましょう。
AutoScaling の設定にも注意
Time-based Scaling は指定した時間に希望した容量のインスタンスを確保する仕組みです。
あらかじめインスタンスを増加させていたとしても一定期間アクセスが無いと AutoScaling の設定に従って余分なインスタンスは停止されてしまいます。
もし、このようなケースが予想される場合はスケジュールで指定する最小値と希望する容量の値をそろえておくことで防ぐことができます。
まとめ
スマートフォン向けのアプリではプッシュ通知やログインボーナスなどで急激なアクセス増加が定期的に起こりますが、AutoScaling だけではなかなか対処が難しい問題です。
もしこのような状況で悩まれている方がいたら Time-based Scaling を使ってみてください。