458 文字
2 分
Instance Schedulerを使ってEC2, RDSの定期停止
概要
-
平日昼間しか稼働しないお値段高めのインスタンスがあるので節約します。
-
CloudWatchやLambdaで簡易的に実装されている例がありますが、ステート管理や設定の柔軟さに欠けます。
-
こちらの設定が良さげです。
-
https://docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html#step1
-
CloudFormationで管理されているのでデプロイが楽
-
曜日、時間、タイムゾーン、リージョンなどの条件を指定して定期的にスタート、停止
-
停止やスタートのステートを保管しているので効率的な実行
-
設定概要
- こちらの設定が十分細かいのでこちらの設定どおりにやる
- 今回は、sleep-night-and-weekend-ec2 という名前でデプロイしました。

テンプレートの内容
デフォルトではいくつか設定が入っているのでDynamoDBのテーブルを見てみるのが良いと思います。どのようなロジックなのかがなんとなくわかると思います。typeがscheduleになっているレコードが実行される設定です。crontabの行のようなものです。

CloudFormationでのデプロイ後
デフォルトで入稿されているオフィスアワーの設定を更新します。fish用設定
set stack sleep-night-and-weekend-ec2set aws_profile defaultset name office-hoursset region ap-northeast-1scheduler-cli update-period --name $name --begintime 09:00 --endtime 23:00 --weekdays mon-fri --stack $stack --profile-name $aws_profile --region $region日本時間での計画停止の設定を入稿します。
set periods office-hoursset schedule jp-office-hoursset description "Office hours in Japan"set stack sleep-night-and-weekend-ec2set aws_profile defaultset region ap-northeast-1scheduler-cli create-schedule --stack $stack --name $schedule --periods $periods --description "$description" --timezone Asia/Tokyo --profile-name $aws_profile --region $region以下のレコードが追加されます。

あとは規定のTagをEC2に打てば終わり。
set instance_id 'i-0d13c9eb8xxxxxxxxxx'aws ec2 create-tags \ --resources $instance_id \ --tags Key=Schedule,Value=jp-office-hoursCloudWatchLogsを確認。デフォルトは5分ごとにこのスタックが実行されるので5分以内にはas-isになります。

Instance Schedulerを使ってEC2, RDSの定期停止
https://blog.teraren.com/posts/aws-instance-scheduler/