最近、AWS費用削減のため、Instance Schedulerを使ったRDSの自動起動・停止の仕組みを導入しました。
Instance Schedulerは、EC2とRDSインスタンスの起動および停止スケジュールを設定できるソリューションです。
今回は、RDSを自動起動・停止するために必要な一連の設定手順についてまとめていこうと思います。
なお、手順については、AWSナレッジセンターの下記記事を参考にさせていただきつつ、ところどころ必要に応じて変更しています。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/stop-start-instance-scheduler/
事前準備
Instance Schedulerを使うには、Instance Scheduler CLIのセットアップが必要になります。また、Instance Scheduler CLIの利用するにあたり、AWS CLIの認証情報が必要になりますので、AWS CLIの設定も合わせて行う必要があります。
※AWS CLIとInstance Scheduler CLIが設定済みの方は、事前準備はスキップして大丈夫です。
AWS CLIのセットアップ
こちらはAWSの日本語ドキュメントが充実しているので、そちらを引用させていただきます。
- AWS CLI バージョン 1 のインストール
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv1.html - AWS CLIの設定
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration
Instance Scheduler CLIのセットアップ
下記ページにダウンロードリンクがあるので、こちらからパッケージ「scheduler-cli.zip」をダウンロードし、解凍します。
https://docs.aws.amazon.com/solutions/latest/instance-scheduler/appendix-a.html#install
解凍後、パッケージのディレクトリへ移動し、下記コマンドでインストールします。
# 解凍したパッケージのディレクトリへ移動
$ cd ~/Downloads/scheduler-cli
# インストール
$ python setup.py install
# scheduler-cliコマンドが使えることを確認
$ scheduler-cli --version
scheduler-cli v1.2.0
Instance Schedulerの設定
Instance Schedulerのスタック作成
それでは、ここからInstance Schedulerを設定していきます。
Instance Schedulerテンプレートが下記に用意されているので、下記ページにアクセスし、AWSコンソールにログインした上で「Launch Solution」をクリックして起動します。
https://docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html#step1
デフォルトでは、バージニア北部(us-east-1)で開かれるので、右上のメニューから自身が利用したいリージョンに変更します。今回は東京(ap-northeast-1)で作成しますので、リージョン変更してから「次へ」をクリックします。
「スタックの詳細を指定」画面では、パラメータを選択・設定していきます。今回は下記のパラメータをデフォルト値から変更しています。
- スタックの名前:RDSInstanceScheduler
- Service(s) to schedule:RDS
- Create RDS instance snapshot:No
- Region:ap-northeast-1
- Default time zone:Asia/Tokyo
- Enable CloudWatch Logs:Yes
- Log retention days:7
- Started tags:state=started
- Stopped tags:state=stopped



「スタックオプションの設定」画面はデフォルト値のまま「次へ」をクリックします。
「レビュー」画面で設定内容を確認できまし。内容を確認し、問題がなければ、「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」にチェックを入れ、「スタックの作成」をクリックします。
Instance Schedulerのスタック作成が完了すると、DynamoDBのインスタンススケジューラ構成テーブルが作成されます。このテーブルの中にインスタンスの起動する期間やスケジュール等の内容が保存されていて、scheduler-cliコマンドを使って必要な設定の作成・変更を行なっていきます。
今回は、月曜日から金曜日の7:30 〜 23:30の間、RDSインスタンスを起動するスケジュールを作成してみます。
インスタンスを起動する期間を作成・更新
期間では、インスタンスを起動しておく時間を定義します。「office-hours」という期間がデフォルトで作成されていますので、update-periodコマンドを使って、今回設定したい期間である「月曜日から金曜日の7:30 〜 23:30」へ変更します。なお、create-periodコマンドを使えば、好きな名称の期間を作成することもできます。
$ scheduler-cli update-period --profile cfn --stack RDSInstanceScheduler --region ap-northeast-1 --name office-hours --begintime 07:30 --endtime 23:30 --weekdays mon-fri
{
"Period": {
"Weekdays": [
"mon-fri"
],
"Endtime": "23:30",
"Type": "period",
"Begintime": "07:30",
"Name": "office-hours"
}
}
DynamoDBを確認すると、設定した期間に更新されていることを確認できます。
スケジュールを作成・更新
スケジュールは、RDSインスタンスにどのスケジュールを適用するかを識別するタグ値として使用します。
デフォルトで「uk-office-hours」というスケジュールが作成されていますので、それにならって、「jp-office-hours」というスケジュールを作成します。作成した後に設定内容を変更したい場合は、「update-schedule」コマンドを使って変更することができます。
$ scheduler-cli create-schedule --profile cfn --stack RDSInstanceScheduler --name jp-office-hours --region ap-northeast-1 --periods office-hours --timezone Asia/Tokyo
{
"Schedule": {
"RetainRunning": false,
"Enforced": false,
"Hibernate": false,
"Name": "jp-office-hours",
"UseMetrics": false,
"StopNewInstances": true,
"Periods": [
"office-hours"
],
"UseMaintenanceWindow": false,
"Timezone": "Asia/Tokyo",
"Type": "schedule"
}
}
DynamoDBを確認すると、新しいスケジュールが作成されていることが確認できます。
スケジュールのタグ付け
作成したスケジュールを停止したいRDSへタグ付けすれば、スケジュール通りに起動・停止するようになります。
対象のRDSのタグに下記の通り登録します。
- Schedule:jp-office-hours

RDSが停止している間は、下記のように停止中を意味するタグが付けられます。
- Schedule:stopped

RDSが起動している間は、下記のように起動中を意味するタグが付けられます。
- Schedule:started
