ec2-schedulerでEC2を定期的に停止してコストを節約しよう
AWS Answerで公開されているec2-schedulerを使ってみました。
EC2の自動起動、停止についてはLambdaを使って色々と工夫されているかと思いますが、このec2-schedulerはかなり高機能なソリューションになっていますのでぜひ利用を検討してもらえればと思います。
aws.amazon.com
構成
以下のような構成で提供されています。
デフォルトでは5分毎にLambdaが起動されて特定のタグが付与されているEC2、RDSの自動起動、停止を行っています。
デプロイ方法
以下のリンクからCloudFormationを該当リージョンから実行します。
リージョンごとに設定が必要になります。
Launch CloudFormation
設定方法
DynamoDBのConfigTableに以下のレコードを追加します。
テーブル名はスタック名+ConfigTableになっています。
ex)
月曜から金曜までの9:00 - 20:00(日本時間)の間だけEC2を起動する設定
scheduleレコード
type | name | description | periods | timezone |
---|---|---|---|---|
schedule | ec2_stopstart | ec2 stop start | {"weekday_9to20"} | Asia/Tokyo |
periodレコード
type | name | description | timezone | weekdays | begintime | endtime |
---|---|---|---|---|---|---|
period | weekday_9to20 | Office hours | Asia/Tokyo | {"mon-fri"} | 9:00 | 20:00 |
ちなみにconfigレコードはデフォルトタイムゾーンの設定やタグ名の設定など実行時の設定内容を保存しています。
また、レコードの登録については、DynamoDBをコンソールから直接変更してもいいですが、scheduler-cliという専用のCLIも用意されています。
docs.aws.amazon.com
EC2側にタグを付与
対象のEC2に以下のタグを付与します
動作確認
正しく設定されていれば、上記の時間以降に対象EC2が停止されます。
また、上記の時間設定であれば、9:00になれば対象EC2が起動されています。
注意点
設定した時間にEC2が停止もしくは起動されているわけではないので、例えば必ず9:00から使いたいのであれば、起動時間を考慮して早めに起動しておく必要があります。
このLambda自体のコストとしては、月額約5$程度となります。
起動・停止スケジュールを複数作ることもできますし、クロスアカウントでの実行や実行結果をCloudWatchのカスタムメトリクスに書き込むといったこともできるようです。かなり使いやすいと思うので導入を検討してみてはいかがでしょうか?