目的
- Beanstalkで動く環境を日中だけ動作させ、夜間はコスト削減のために停止させたい
概要
- CloudWatchのイベント > ルールから、ラムダを実行する際にCron式でスケジュールを設定できるが、、Beanstalkで管理されているので、例えラムダでEC2を停止させても復活したりする
- かといってBeanstalkそのものを止めたり削除・復帰させるのは無駄な動作っぽい
- Beanstalkでスケジュール設定できるので、環境立ち上げ時に
.ebextension
に設定を記載することで、スケジューリングによるインスタンスの停止・起動が可能!
方法
-
.ebextension
に下記の内容を追記するだけでOK
ebextension_scheduling.config
// スケジューリング自体を開始させる日付を指定(現在日時より前ならOK)
- namespace: aws:autoscaling:scheduledaction
option_name: StartTime
resource_name: ScheduledEC2Start
value: "2020-04-01T04:07:2Z"
// スケジューリング自体を停止させる日付を指定(適当に1000年後とかにしてます)
- namespace: aws:autoscaling:scheduledaction
option_name: EndTime
resource_name: ScheduledEC2Start
value: "2999-04-28T04:07:2Z"
// インスタンスのマックス数を3に指定
- namespace: aws:autoscaling:scheduledaction
option_name: MaxSize
resource_name: ScheduledEC2Start
value: "3"
// インスタンスのミニマム数を2に指定
- namespace: aws:autoscaling:scheduledaction
option_name: MinSize
resource_name: ScheduledEC2Start
value: "2"
// 期待キャパシティを指定(今回は2にしてます)
- namespace: aws:autoscaling:scheduledaction
option_name: DesiredCapacity
resource_name: ScheduledEC2Start
value: "2"
// スケジューリングを発動させる時間をCron式で指定
- namespace: aws:autoscaling:scheduledaction
option_name: Recurrence
resource_name: ScheduledEC2Start
value: "00 01 * * 1-6"
// スケジューリング自体を開始させる日付を指定(現在日時より前ならOK)
- namespace: aws:autoscaling:scheduledaction
option_name: StartTime
resource_name: ScheduledEC2Stop
value: "2020-04-01T04:07:2Z"
// スケジューリング自体を停止させる日付を指定(適当に1000年ごとかにしてます)
- namespace: aws:autoscaling:scheduledaction
option_name: EndTime
resource_name: ScheduledEC2Stop
value: "2999-04-28T04:07:2Z"
// インスタンスのマックス数を0に指定
- namespace: aws:autoscaling:scheduledaction
option_name: MaxSize
resource_name: ScheduledEC2Stop
value: "0"
// インスタンスのミニマム数を0に指定
- namespace: aws:autoscaling:scheduledaction
option_name: MinSize
resource_name: ScheduledEC2Stop
value: "0"
// 期待キャパシティを0に指定
- namespace: aws:autoscaling:scheduledaction
option_name: DesiredCapacity
resource_name: ScheduledEC2Stop
value: "0"
// スケジューリングを発動させる時間をCron式で指定
- namespace: aws:autoscaling:scheduledaction
option_name: Recurrence
resource_name: ScheduledEC2Stop
value: "00 11 * * 0-5"
説明
- この処理はオートスケーリング を利用したものなので、意味合いとしては停止時=インスタンスが0にスケーリングすることと同義
- 起動時は最大値3で最小値2、つまりスケーリングで最大3つまでインスタンスが増加するように指定
- 停止時は最大値・最小値・キャパシティ全てで0を指定しているので、=EC2全ての停止ということになる。
備考
- 今回はDBは外だしで環境を作ったので、EC2のみの停止にしていますが、DBもBeanstalkで作った際に設定できるのかが気になりました
- 基本的に自由度が少なくなるので、Beanstalk使うときにDBも一緒に作ることはあまりないかと思いますが、、、
- ちなみに外出しのDBはラムダをCloudWatchのルールでスケジューリングして設定しているので、EC2もDBも同じ時間で夜間停止させるという処理が可能です
- 開発・STG環境でのコスト削減に役立つのではないかとおもいっます