目的
AWS RDSインスタンスを停止し7日経過後、自動で起動してしまい気付かないうちに請求料金がとんでもないことに!となるのは、おそらく初心者あるあるかと思います。
そのため、RDSインスタンスが自動で起動する前に、こちらで設定した時間に確実に自動で起動・自動停止をさせることで、うっかりRDSインスタンスが起動したままになることを防止します。
対象者
RDSインスタンス自動起動・停止させるにはLambdaなども使えますが、スクリプトは書けない…
そんなAWS初心者向けのEventBridgeを使用した簡単な方法です。
IAMRoleの作成
1.まずはRoleの作成から始めます。
IAMダッシュボードへ移動し、まずはEventBridgeがRDSを自動起動・停止出来るポリシーを作成するため、サイドメニューからポリシーを選択
2.右上のポリシーの作成をクリック
3.まずは自動起動させるためのポリシー設定です。
- ポリシーエディタはビジュアル
- サービスはRDSを選択
RDSに対するアクションを指定できるようになります。
- アクション許可にstartを入力
- 書き込み権限でStartDBInstanceを選択
- リソースはRDS内のインスタンスを限定して指定するので特定にチェック
- 特定のインスタンスを指定するため、ARNを追加をクリック
ポップアップで設定画面が開かれるので入力してきます。
- リソースのリージョンは対象インスタンスのあるリージョンを入力
- Resource db instance name には対象のDB識別子(インスタンス名)を入力
- 上記2つを入力するとリソースARNは自動で作成されるので特に触らず、ARNを追加をクリック
リソースARNが登録されました
- リクエスト条件のオプションは触らず、許可をさらに追加をクリック
4.今度は自動停止をするためのポリシーを設定します。先ほどと同じ流れです。
- サービスはRDSを選択
- アクション許可には、今度はStopと入力する
- 書き込みでは、StopDBInstanceを選択
- リソースは特定を選択し、ARNを追加をクリック
- ポップアップで設定画面が開かれるので入力する
- リソースのリージョンは対象インスタンスのあるリージョンを指定
- Resource db instance name には対象のDB識別子を入力
- 上記2つを入力するとリソースARNは自動で作成されるので、ARNを追加をクリック
- 正しく追加されていることを確認したら、次へをクリック
- 以上で、RDSインスタンスの自動起動と停止の出来るポリシーが作成出来たので、ポリシー名を入力したら右下のポリシーの作成をクリックします
- ポリシーの一覧画面に戻るので、先ほど作成したポリシー名で検索をし、正しく作成出来ているか確認しましょう
- RDSに対するStartとStopのポリシーが与えられています
IAMRoleの作成
- ポリシーが作成出来ましたので、ポリシーをアタッチするロールを作成します
- カスタム信頼ポリシーには下記をコピーして貼り付け、次へをクリック
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "scheduler.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ロールに許可を追加します
- ロール名を入力して、右下のロールを作成をクリック
- ロール一覧に作成したロールが表示されることを確認します
自動起動設定をする
それでは事前準備が出来ましたので、AWS EventBridgeを使用した自動起動・停止設定をしていきましょう。
自動起動・停止設定では、それぞれ起動と停止を分けて作成します。
そのため、まずは自動起動設定からしていきたいと思います。
1.AWS EventBridgeを開き、EventBridge スケジュールを選択します。
2.スケジュールの作成、をクリック。
3.スケジュールの詳細の指定画面になります。
4.そのままページの下部へ行くと、スケジュールのパターン設定になります。
- 頻度……定期的なスケジュール
- タイムゾーン…… Asia/Tokyo
- スケジュールの種類……rateベースのスケジュール
- rate式は1週間ごとに作動させたいため、値は 7、単位は daysを選択
- フレックスタイムウィンドウはオフを選択
- オフにしないと時間にズレが生じてしまい正確に起動・停止が出来なくなる恐れがあります。
5.時間枠の設定をします。
- 開始日時を設定
- スタートしたい日付と時間を指定
次へをクリックします。
6.ターゲットの選択で、詳細設定をします。
- ターゲットAPIはすべてのAPIを選択
- すべてのAWSのサービスで、RDSを検索欄に入力し、絞り込む
- Amazon RDSを選択
- さらに詳細なRDSサービスが表示されるので、今度はStartを検索欄に入力して絞りこむ
- 表示された一覧からStartDBInstaceを選択
- APIに渡すJSONが表示されるので、DbInstanceIdentifier(DB識別子またはインスタンス名のこと)を入力して次へをクリック
7.最終設定をしていきます
- スケジュールの状態は、有効化
- スケジュール完了後のアクションはNONEにする
- DELETEにするとスケジュールが削除されてしまうので注意
- 再試行ポリシーとデッドレターキュー
- EventBridgeのスケジュールが失敗した場合に再試行するかどうか?の設定です
- 設定はお好みでいいと思います
- デッドレターキューはなし
- 暗号化はなし
- アクセス許可は先に作成してあるロールを選択して次へ
8.最後に全体のチェックをして、作成した内容に誤りが無ければ、最後にページ右下のスケジュールを作成をクリックして、自動起動設定は完了
- 間違いがあれば各項目の編集から修正ができます
自動停止設定をする
1.自動起動設定が出来たので、次は自動停止設定をします。
流れとしては、自動起動設定と同じです。
2.スケジュールの作成、をクリック
(一覧に、先に作成した自動起動設定のスケジュールが作成されてるのも確認できます)
3.スケジュール名を入力
- 説明はお好みで
- スケジュールグループはデフォルトを選択
- そのままページの下部へ行くと、スケジュールのパターン設定になります
- 頻度……定期的なスケジュール
- タイムゾーン…… Asia/Tokyo
- スケジュールの種類……rateベースのスケジュール
- rate式は1週間ごとに作動させたいため、値は 7、単位は daysを選択
- フレックスタイムウィンドウはオフを選択
- オフにしないと時間にズレが生じてしまい正確に起動・停止が出来なくなる恐れがあります。
5.時間枠の設定をします
- 開始日時を設定(自動停止設定ですが終了日時ではありません)
- 自動起動設定と同じ日付を指定
- 時間は、RDSは起動に時間が掛かるので、自動で起動させる時間の20分~30分後で設定すると良いと思います
- 次へをクリックします。
6.ターゲットの選択で、詳細設定をします。
- ターゲットAPIはすべてのAPI
- すべてのAWSのサービスで、RDSを検索欄に入力し、絞り込む
- Amazon RDSを選択
- さらに詳細なRDSサービスが表示されるので、今度はStopを検索欄に入力して絞りこむ
- StopDBInstaceを選択
- APIに渡すJSONが表示されるので、DbInstanceIdentifier(DB識別子またはインスタンス名のこと)を入力して次へをクリック
7.最終設定をしていく
- スケジュールの状態は、有効化
- スケジュール完了後のアクションはNONEにする
- DELETEにするとスケジュールが削除されてしまうので注意
- 再試行ポリシーとデッドレターキュー
- EventBridgeのスケジュールが失敗した場合に再試行するかどうか?の設定です
- 設定はお好みでいいと思います
- デッドレターキューはなし
- 暗号化はなし
- 先に作成したアクセス許可のロールを選択して次へ
8.最後に全体のチェックをして、作成した内容に誤りが無ければ、最後にページ右下のスケジュールを作成をクリックして、自動停止設定も完了です
- 間違いがあれば各項目の編集から修正ができます
動作確認
- 自動起動・停止設定が登録出来たら、正しく動作されるか確認をしてみましょう。
- 現時点から5分後程度先に起動時間を設定、その20分~30分後に停止時間を設定して、インスタンスが自動で動くのが確認出来たら完了です!
- だいたい設定時刻ピッタリではなく、5分後くらいにステータスが起動中になります。
- 無事に起動完了しました。
- 停止時刻になり、停止中なりました。
- 無事に停止完了です!
- これで自動起動・停止設定が設定通りに動作することを確認出来ました。
- 動作確認後、スケジュールを戻すのを忘れずに。
さいごに
AWS EventBridgeを使ったRDSインスタンスの自動起動・停止設定は難しい設定が無く、シンプルに設定が出来るので、初心者でも簡単かと思います。
ぜひ、使ってみてください。