EC2(AWS)のAutoScalingで時刻指定によってサーバを増減する方法
AWSのAutoScaling機能では、負荷状況・アクセス数などの指標に応じて
EC2インスタンス数の増減を自動調整する事が出来ますが。
cron設定の様に時刻指定でサーバの増減を調整する事も出来るので、
設定方法をメモしておきます。
アクセスや処理が集中する時間(逆に少ない時間)があらかじめ明らかな場合は、
時刻指定で調整するのもよいのではないかと思います。
(キャンペーン等を実施する時間が決まって居るなど、)
私の見落としかも知れないですが、
現時点(2015年9月)でAWSのManagementConsole(Web上の管理画面)で設定する方法が無さそうなので、
ここではAWS CLIで設定します。
例えば、
日中(JSTの9〜18時)はサーバ8台、夜間(9〜18時以外)はサーバ2台で
運用したい場合は、以下のようにコマンドを実行します。
$ aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name "<AutoScalingGroup名>" \
--scheduled-action-name "up" \
--recurrence "0 0 * * *" \
--desired-capacity 8
$ aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name "<AutoScalingGroup名>" \
--scheduled-action-name "down" \
--recurrence "0 9 * * *" \
--desired-capacity 2
recurrenceの部分はcrontabに記載する書式と同じです。
時刻はUTCで指定します。
繰り返しで無く一回限りの日時指定は「--recurrence」で無く「--time」を使います。
AlarmによるScalingと組み合わせる場合は、「--desired-capacity」でなく「--min-size」「--max-size」で指定した方が良いと思います。
詳しくは
aws autoscaling put-scheduled-update-group-action help
で確認して下さい。
設定した内容の確認は以下のコマンドで行います。
$ aws autoscaling describe-scheduled-actions
設定を削除する場合は以下のコマンドです。
$ aws autoscaling delete-scheduled-action \
--auto-scaling-group-name "<AutoScalingGroup名>" \
--scheduled-action-name "up"
$ aws autoscaling delete-scheduled-action \
--auto-scaling-group-name "<AutoScalingGroup名>" \
--scheduled-action-name "down"
日中しか使わない業務系サーバとか、
夜間のバッチ処理用サーバとかは、AutoScalingで構成して
使わない時間帯は「--desired-capacity 0」としてコスト削減という使い方なんかもできますね。