AWS RDSインスタンスの自動起動・停止設定

## 目的
AWS RDSインスタンスを停止し7日経過後、自動で起動してしまい気付かないうちに請求料金がとんでもないことに！となるのは、おそらく初心者あるあるかと思います。
そのため、RDSインスタンスが自動で起動する前に、こちらで設定した時間に確実に自動で起動・自動停止をさせることで、うっかりRDSインスタンスが起動したままになることを防止します。

## 対象者
RDSインスタンス自動起動・停止させるにはLambdaなども使えますが、スクリプトは書けない…
そんなAWS初心者向けの**EventBridge**を使用した簡単な方法です。

## IAMRoleの作成
1.まずはRoleの作成から始めます。
IAMダッシュボードへ移動し、まずはEventBridgeがRDSを自動起動・停止出来るポリシーを作成するため、サイドメニューからポリシーを選択

![ポリシー選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/e90a7051-70df-7021-5bba-f01271b9b5cc.png)

 
2.右上のポリシーの作成をクリック

![ポリシーの作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/d9639fb1-81c3-21d4-e1ac-467eabe5dea8.png)

 
 3.まずは**自動起動**させるためのポリシー設定です。
  - ポリシーエディタは**ビジュアル**
 - サービスは**RDS**を選択

 ![アクセス許可を指定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/034acfdc-dfd0-1591-2ea3-d933c1fe5d77.png)

 
 RDSに対するアクションを指定できるようになります。
 - アクション許可に**start**を入力
 - 書き込み権限で**StartDBInstance**を選択
 - リソースはRDS内のインスタンスを限定して指定するので**特定**にチェック
 - 特定のインスタンスを指定するため、**ARNを追加**をクリック

 ![ポリシー設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/842758fd-72f8-4d2e-4296-e17427867dea.png)

　
ポップアップで設定画面が開かれるので入力してきます。
 - リソースのリージョンは対象インスタンスのある**リージョン**を入力
 - Resource db instance name には対象の**DB識別子**（インスタンス名）を入力
 - 上記2つを入力するとリソースARNは自動で作成されるので特に触らず、ARNを追加をクリック

![ARNを指定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/f1b44167-3bab-92b8-f42f-697840eacd81.png)

　
 リソースARNが登録されました
- リクエスト条件のオプションは触らず、**許可をさらに追加**をクリック

 
![ARN登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/37cf11a9-34a4-de4c-ccb8-6f6f06359307.png)


 
4.今度は**自動停止**をするためのポリシーを設定します。先ほどと同じ流れです。
- サービスは**RDS**を選択
- アクション許可には、今度は**Stop**と入力する
- 書き込みでは、**StopDBInstance**を選択
- リソースは**特定**を選択し、**ARNを追加**をクリック
- ポップアップで設定画面が開かれるので入力する

![追加登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/5ce576cd-4e2e-4307-5475-02b74a212a54.png)
　

- リソースのリージョンは対象インスタンスのある**リージョンを指定**
- Resource db instance name には対象の**DB識別子**を入力
- 上記2つを入力するとリソースARNは自動で作成されるので、**ARNを追加**をクリック

![ARNを追加2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/45f6479d-e65c-a3bc-ac61-3c981637cb24.png)

 
- 正しく追加されていることを確認したら、次へをクリック

![ARNを追加3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/30adecc9-1842-4f60-6b50-18a2bfe82a17.png)

　
- 以上で、RDSインスタンスの自動起動と停止の出来るポリシーが作成出来たので、**ポリシー名を入力**したら右下の**ポリシーの作成**をクリックします

![ポリシー作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/bc432ce2-dbee-5220-587e-9fe96435cdcd.png)



- ポリシーの一覧画面に戻るので、先ほど作成したポリシー名で検索をし、正しく作成出来ているか確認しましょう
- RDSに対するStartとStopのポリシーが与えられています

![確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/aa0183de-f68b-69b2-652a-d7db3e98cde4.png)
 


## IAMRoleの作成
1. ポリシーが作成出来ましたので、ポリシーをアタッチするロールを作成します
- サイドメニューからロールを選択
![ロール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/28678573-71c6-ae70-d7e3-a687d2958aec.png)
　
 - ロールを作成をクリック
![ロールを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/265e6fc1-4bfb-e8bf-a770-e4cff5d39123.png)
　
 - **カスタム信頼ポリシー**を選択
![カスタム信頼ポリシー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/d39232cb-c807-0611-4643-bda3a5e1fe5f.png)

　
- カスタム信頼ポリシーには下記をコピーして貼り付け、次へをクリック

![スクリーンショット 2024-05-20 111151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/89abe0d0-8d75-6ba6-e703-da52dad82fa8.png)


```
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"Service": "scheduler.amazonaws.com"
			},
			"Action": "sts:AssumeRole"
		}
	]
}
```
　
ロールに許可を追加します
- 許可ポリシーは、先程作成したポリシー名を検索して、出てきたらチェックを入れて、次へをクリック
![許可ポリシー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/44538057-63d1-4c7c-5799-abc99a55eef4.png)

 　
- ロール名を入力して、右下の**ロールを作成**をクリック

![ロールの作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/bcd032ce-dda6-3f55-817f-ec64b868256b.png)

　
- ロール一覧に作成したロールが表示されることを確認します

![ロール一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/f438105f-1036-c5ef-a45d-1b1c9e51c51b.png)





## 自動起動設定をする
それでは事前準備が出来ましたので、AWS EventBridgeを使用した自動起動・停止設定をしていきましょう。
自動起動・停止設定では、それぞれ起動と停止を分けて作成します。
そのため、まずは自動起動設定からしていきたいと思います。

1.AWS EventBridgeを開き、**EventBridge スケジュール**を選択します。

![schedule-0](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/acfc140e-47af-f1e7-90af-4be7c3a1097e.png)

 
2.**スケジュールの作成**、をクリック。

![schedule-1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/24763a48-5321-21f3-b715-75ef4428f6a1.png)

3.**スケジュールの詳細**の指定画面になります。
- **スケジュール名**を入力
- 説明はお好みで
- スケジュールグループは**デフォルト**
![設定1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/1b7b8463-6155-861a-f813-9511bb75a608.png)

　
4.そのままページの下部へ行くと、**スケジュールのパターン**設定になります。
- 頻度……**定期的なスケジュール**
- タイムゾーン…… **Asia/Tokyo**
- スケジュールの種類……**rateベースのスケジュール**
- rate式は1週間ごとに作動させたいため、**値は 7**、**単位は days**を選択 
- フレックスタイムウィンドウは**オフ**を選択
    - オフにしないと時間にズレが生じてしまい正確に起動・停止が出来なくなる恐れがあります。

![スケジュールパターン設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/f198a720-0395-5a10-57f5-075167ee7170.png)

　
5.時間枠の設定をします。
- **開始日時**を設定
- スタートしたい日付と時間を指定
次へをクリックします。

![時間枠設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/20e18115-be88-40fc-74d7-75ad23ef5535.png)

　
6.ターゲットの選択で、詳細設定をします。

- ターゲットAPIは**すべてのAPI**を選択
- すべてのAWSのサービスで、**RDS**を検索欄に入力し、絞り込む
- **Amazon RDS**を選択

![ターゲット詳細1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/30a48b6b-09b3-6ca3-0cd8-a1a367021c18.png)
　
 - さらに詳細なRDSサービスが表示されるので、今度は**Start**を検索欄に入力して絞りこむ
 - 表示された一覧から**StartDBInstace**を選択

![ターゲット詳細2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/e92f9eb7-14c1-73f4-a260-7e71eddf5431.png)

　
 - APIに渡すJSONが表示されるので、DbInstanceIdentifier（DB識別子またはインスタンス名のこと）を入力して次へをクリック

 ![DB識別子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/c14c626c-9fc3-0b25-226b-42dcb2f2dec8.png)

　
7.最終設定をしていきます

- スケジュールの状態は、**有効化**
- スケジュール完了後のアクションは**NONE**にする
    - DELETEにするとスケジュールが削除されてしまうので注意
- 再試行ポリシーとデッドレターキュー
    - EventBridgeのスケジュールが失敗した場合に再試行するかどうか？の設定です
    - 設定はお好みでいいと思います
    - デッドレターキューはなし

![スケジュール最終設定1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/520c6b0e-cf72-6097-0974-c37c6b4ba981.png)


- 暗号化はなし
- アクセス許可は先に作成してあるロールを選択して次へ

![ロール選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/8d8fb0a3-552e-63fb-6325-89ab3893e819.png)


　
8.最後に全体のチェックをして、作成した内容に誤りが無ければ、最後にページ右下の**スケジュールを作成**をクリックして、自動起動設定は完了
- 間違いがあれば各項目の**編集**から修正ができます

![最終確認1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/bd38aa45-2adb-8893-d962-729bcfa9967a.png)


![最終確認2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/8875f6d8-5005-f954-3794-6fb7044bc130.png)



## 自動停止設定をする
1.自動起動設定が出来たので、次は自動停止設定をします。
流れとしては、自動起動設定と同じです。

2.**スケジュールの作成**、をクリック
（一覧に、先に作成した自動起動設定のスケジュールが作成されてるのも確認できます）
![自動停止スケジュール作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/62238fd5-8e26-cae4-eab1-12ba664a4fad.png)

3.**スケジュール名**を入力
- 説明はお好みで
- スケジュールグループは**デフォルト**を選択

![スケジュールの作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/9639b375-579c-34fa-7bf5-4260d16a9e54.png)

4. そのままページの下部へ行くと、**スケジュールのパターン**設定になります
- 頻度……**定期的なスケジュール**
- タイムゾーン…… **Asia/Tokyo**
- スケジュールの種類……**rateベースのスケジュール**
- rate式は1週間ごとに作動させたいため、**値は 7**、**単位は days**を選択 
- フレックスタイムウィンドウは**オフ**を選択
    - オフにしないと時間にズレが生じてしまい正確に起動・停止が出来なくなる恐れがあります。

![スケジュールパターン設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/f198a720-0395-5a10-57f5-075167ee7170.png)

　
5.時間枠の設定をします
- **開始日時**を設定（自動停止設定ですが終了日時ではありません）
- 自動起動設定と同じ日付を指定
- 時間は、RDSは起動に時間が掛かるので、**自動で起動させる時間の20分～30分後**で設定すると良いと思います
- **次へ**をクリックします。

![時間枠指定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/62de3beb-456c-d04a-772d-f482c22917e8.png)

　
6.ターゲットの選択で、詳細設定をします。

- ターゲットAPIは**すべてのAPI**
- すべてのAWSのサービスで、**RDS**を検索欄に入力し、絞り込む
- **Amazon RDS**を選択

![ターゲット詳細1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/30a48b6b-09b3-6ca3-0cd8-a1a367021c18.png)
　
 - さらに詳細なRDSサービスが表示されるので、今度は**Stop**を検索欄に入力して絞りこむ
 - **StopDBInstace**を選択

![停止設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/dd040e31-3062-db67-6c37-dc96812186b1.png)

- APIに渡すJSONが表示されるので、DbInstanceIdentifier（DB識別子またはインスタンス名のこと）を入力して次へをクリック

![停止インスタンス指定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/fbc7e4ab-2949-c96a-4ab4-a17a2f43c444.png)

7.最終設定をしていく
- スケジュールの状態は、**有効化**
- スケジュール完了後のアクションは**NONE**にする
    - DELETEにするとスケジュールが削除されてしまうので注意
- 再試行ポリシーとデッドレターキュー
    - EventBridgeのスケジュールが失敗した場合に再試行するかどうか？の設定です
    - 設定はお好みでいいと思います
    - デッドレターキューはなし

![スケジュール最終設定1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/520c6b0e-cf72-6097-0974-c37c6b4ba981.png)


- 暗号化はなし
- 先に作成したアクセス許可のロールを選択して次へ

![ロール選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/8d8fb0a3-552e-63fb-6325-89ab3893e819.png)

　
8.最後に全体のチェックをして、作成した内容に誤りが無ければ、最後にページ右下の**スケジュールを作成**をクリックして、自動停止設定も完了です
- 間違いがあれば各項目の**編集**から修正ができます

![最終確認1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/bd38aa45-2adb-8893-d962-729bcfa9967a.png)


![最終確認2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/8875f6d8-5005-f954-3794-6fb7044bc130.png)



## 動作確認
- 自動起動・停止設定が登録出来たら、正しく動作されるか確認をしてみましょう。
- 現時点から5分後程度先に起動時間を設定、その20分～30分後に停止時間を設定して、インスタンスが自動で動くのが確認出来たら完了です！
　
- だいたい設定時刻ピッタリではなく、5分後くらいにステータスが起動中になります。

![起動中](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/6bc21809-e89e-ba85-e7af-bd0525c433b0.png)
　
- 無事に起動完了しました。

![起動完了](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/44c357db-f18e-8838-1e11-cabdb3f830ca.png)

- 停止時刻になり、停止中なりました。

![停止中](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/61bd9e88-a2d7-aed8-5536-14628055dbfa.png)

- 無事に停止完了です！

![停止完了](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/bc7aef24-ddc5-e3b4-8afc-fb2ac1f2c4a1.png)


- これで自動起動・停止設定が設定通りに動作することを確認出来ました。
- 動作確認後、スケジュールを戻すのを忘れずに。

## さいごに

AWS EventBridgeを使ったRDSインスタンスの自動起動・停止設定は難しい設定が無く、シンプルに設定が出来るので、初心者でも簡単かと思います。
ぜひ、使ってみてください。