AutoScalingのas-put-scheduled-update-group-actionコマンドが便利すぎる
AWS AutoScaling
AWSには AutoScaling という機能があって、事前に設定したパラメータでEC2インスタンスをスケールアウトすることが出来る。たとえばCPUが60%以上の状態が5分続いたらとか、SQSがいくつ溜まったらとか、を監視してインスタンスを立ち上げられる。負荷分散が容易。
そのAutoScalingにはas-put-scheduled-update-group-actionというコマンドが存在する(コマンド名長い)。あらかじめ指定しておいた時間にAutoSalingGroupの設定を変更することが出来るコマンド。
例えばこんなふうに。
$ as-put-scheduled-update-group-action SampleScheduledAction --auto-scaling-group SampleAutoScalingGroup --region ap-northeast-1 --time '+10 minutes' --end-time '+20 minutes' --max-size 1 --min-size 1
という具合にコマンドを打つと、10分後にSampleAutoSalingGroupのmax-sizeとmin-sizeを1に変更するスケジュールをSampleScheduledActionという名前で保存することが出来る。よって、結果的に10分後にインスタンスが1台立ち上がることになる。オプションの意味は以下の様な感じ。
auto-scaling-group | スケジュールで変更させるAutoScalingGroupを指定する |
region | リージョンの指定 |
time | スケジュールの開始時間を指定する。+10 minutesとすると10分後。UTCでピンポイントの時刻指定も可能 |
end-time | スケジュールの変更をもとに戻す時間。指定方法はtimeオプションと同じ。 |
max-size | AutoScalingで立ち上げるインスタンスの上限数 |
min-size | AutoScalingで立ち上げるインスタンスの下限数 |
定期実行のrecurrenceオプション
時間指定スケールアウトでお腹いっぱいなのに、さらに定期実行できるrecurrenceオプションというものがあります。cron記法でスケジュールを指定できます。
$ as-put-scheduled-update-group-action SampleScheduledAction --auto-scaling-group SampleAutoScalingGroup --region ap-northeast-1 --recurrence '*/10 18,20-22 * * *' --max-size 1 --min-size 1
まんまcrontabの書き方。18時と20~22時(UTC形式)までの間で10分毎にインスタンスを立ち上げます。素晴らしい。注意点としてはend-timeがcronに対応していないので、インスタンスを落とすのはなんらかの方法を考えないといけないということあたりかね。立ち上げたインスタンス内で、必要な処理が終わったあとにAutoScalingGroupの設定を変えてあげればいいだけだからそんなに面倒でもない。