はじめに
2年くらい資格学習だけのエアプ勢だった僕が、いよいよAWSをさわり始めました。
そして最初の試練として上司から以下のような依頼をもらいました。
「EC2インスタンスを2個実行中だけど、営業時間外は使わないから止めてコストカットしよう」
AutoScalingスケジュールで実現!
該当のEC2インスタンスはAutoScalingグループで管理されているので、下記の通りスケジュールを2個作成することで実現はできました。
EC2 >AutoScalingグループ >(僕のAutoScalingグループ名) >
オートスケーリング >予定されたアクション >予定されたアクションを作成するボタン
- 終了スケジュール
(Japan 06:00~, 希望するキャパシティ:0, 最小キャパシティ:0, 最大キャパシティ:0) - 起動スケジュール
(Japan 21:00~, 希望するキャパシティ:2, 最小キャパシティ:2, 最大キャパシティ:10)
※どこのタイムゾーンの設定で時間指定しているかには気を付けて...!
上記の設定は、以下の設定を動的に変化させるスケジュールを組むようなイメージになりますね。
EC2 >AutoScalingグループ >(僕のAutoScalingグループ名) >詳細 >グループの詳細
おまけ(CloudFormation)
プロジェクトとしてはEC2インスタンスやAutScalingグループといったリソースをCloudFormationにてデプロイするようにしていたので、
上記のスケジュール作成もCloudFormationスタックのテンプレートに組み込みました。
そのときのテンプレート(yamlファイル)記述は以下になります。
AutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
# (中略)
# 終了スケジュール
ScaleDownScheduledAction:
Type: AWS::AutoScaling::ScheduledAction
Properties:
AutoScalingGroupName: !Ref AutoScalingGroup
DesiredCapacity: 0
MinSize: 0
MaxSize: 0
Recurrence: '0 12 * * *' # UTC時間で指定
# 起動スケジュール
ScaleUpScheduledAction:
Type: AWS::AutoScaling::ScheduledAction
Properties:
AutoScalingGroupName: !Ref AutoScalingGroup
DesiredCapacity: 2
MinSize: 2
MaxSize: 10
Recurrence: '0 21 * * *' # UTC時間で指定
※プロパティにタイムゾーン指定は無いので、時間はUTCで指定する
さいごに
今回はAutoScaling管理されていたので上記のような対応をしてみましたが、
EC2インスタンスを止めるためにAutoScalingスケジュールを利用するのは本来の使い方でないような気がしていて少し引っかかっています。
(EC2インスタンスを停止じゃなくて終了してるし)
こういうケースのときにより良いやり方がもしあれば、有識者のみなさん!コメントにてご教授くださいませ!!