AWS Answerで公開されているec2-schedulerを使ってみました。
EC2の自動起動、停止についてはLambdaを使って色々と工夫されているかと思いますが、このec2-schedulerはかなり高機能なソリューションになっていますのでぜひ利用を検討してもらえればと思います。

Automatically start and stop your Amazon EC2 and Amazon RDS instances using AWS CloudFormation and EC2 and RDS instance tags

aws.amazon.com

ec2-schedulerでできること

  • EC2の自動起動・停止
  • RDSの自動起動・停止
  • EC2のインスタンスタイプ変更

構成

以下のような構成で提供されています。

デフォルトでは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も用意されています。

Overview of Instance Scheduler command line interface

docs.aws.amazon.com

EC2側にタグを付与

対象のEC2に以下のタグを付与します

動作確認

正しく設定されていれば、上記の時間以降に対象EC2が停止されます。

また、上記の時間設定であれば、9:00になれば対象EC2が起動されています。

注意点

設定した時間にEC2が停止もしくは起動されているわけではないので、例えば必ず9:00から使いたいのであれば、起動時間を考慮して早めに起動しておく必要があります。

このLambda自体のコストとしては、月額約5$程度となります。
起動・停止スケジュールを複数作ることもできますし、クロスアカウントでの実行や実行結果をCloudWatchのカスタムメトリクスに書き込むといったこともできるようです。かなり使いやすいと思うので導入を検討してみてはいかがでしょうか?

参考

AWS Instance Scheduler – AWS Instance Scheduler

元記事はこちら

ec2-schedulerでEC2を定期的に停止してコストを節約しよう