Amazon EventBridge Schedulerを使ったRDSの自動停止を試してみた

# 概要
RDSには最大7日間までしか停止することができないという仕様があります。
検証用の環境では必要なタイミングだけRDSを起動して、それ以外は停止させておきたいという場合があると思います。
そこで、RDSが7日ごとに自動起動されるたびにAmazon EventBridge Schedulerを使って自動的に停止させて、7日間ごとに手動で停止させずに済むようにしてみようと思います。

# 手順
### IAMロールの作成
事前にRDSを停止するためのIAMロールを作成しておきます。
IAMのコンソールからロールに移動し、「ロールを作成」をクリックします。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/bcd9056e-fa1e-a741-1788-488819656336.png)
エンティティタイプは「カスタム信頼ポリシー」を選択します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/f2b2245f-0ca5-e2b4-6071-20989825cdd8.png)
以下を入力して次に進みます。
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/6a2f0e1d-904e-7e55-77d1-7df1ed1d5834.png)


### IAMポリシーの作成
ここでロールに付与するポリシーを作成する必要があるため、
別のウィンドウでIAMのコンソールからポリシーに移動し、「ポリシーを作成」をクリックします。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/dc714e4c-942d-97d1-7636-5b4f4cc5ea1b.png)

検索欄にRDSと入力し、出てきた「RDS」をクリックします。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/e441e24d-d774-b482-5eef-aeff14a32893.png)

検索欄にstopと入力し、出てきた「StopDBInstance」にチェックを入れます。
リソースは今回は検証のため「すべてのリソース」を選択しておきます。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/adb9bdfb-c3d6-d5cf-c829-70013ee9be70.png)

次に進み、ポリシー名を入力して作成完了です。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/da98e34f-5c16-68ed-cf58-167c8eebcdfe.png)

先ほどのIAMロールの作成画面に戻り、作成したポリシーを選択します。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/b1922f31-ddb7-405f-3125-f950f617705d.png)


名前を入力し、ロールを作成します。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/bd9365b6-c95f-8d8a-f590-4b488520153b.png)


### EventBridgeの設定
EventBridgeのコンソール画面に移動し、「EventBridgeスケジュール」を選択し、「スケジュールを作成」をクリックします。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/0b2aac2d-f4d4-1cf6-50c8-3f792ca1616f.png)

スケジュールの設定画面に移動するので、スケジュール名を入力します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/3897ac15-6c00-ed65-f541-63d81ec0da6c.png)

次にスケジュールを設定します。
頻度は「定期的なスケジュール」、スケジュールの種類は「rateベースのスケジュール」を選択します。
ぴったり7日ごとにしてしまうと、RDSが自動的に起動する前にEventBridgeが起動してしまう可能性があるため、7日 + 猶予の1時間を足した時間をrate式に設定します。
フレックスタイムウィンドウはオフに設定しておきます。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/f241e341-7b6a-db5c-a67b-d911ce650a7a.png)

時間枠にはRDSの停止を開始したい日時を入力しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/10769037-a86f-58c4-f325-500582facead.png)

次にターゲットの選択を行います。
検索欄に「RDS」を入力し、出てきたAmazon RDSをクリックします。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/d80941de-4fe3-d4ec-94f9-f03fd96628cc.png)

次に検索欄に「stop」と入力すると「StopDBInstance」という項目が出てくるのでクリックします。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/fe763d7f-5680-e74d-7bfb-9252d11a74a6.png)

するとJsonの入力欄が現れるので、停止したいRDSの名前を入力します。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/46c72068-77f8-99ce-8857-532516bba653.png)

次のオプションは今回は変更せずにいきます。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/85201e26-487e-99aa-1de4-cf517a6a3337.png)

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/4bcda882-3373-93ea-eb13-9ed5046a16fd.png)

ロールに先ほど作成したロールを選択し、次に進みます。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/ad5e445e-b1ad-15cd-2c7e-da3959fc0031.png)

内容を確認し、「スケジュールを作成」をクリックして作成完了です。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/3ddc9cb4-3074-5e40-046b-bae30a123eec.png)

# 動作確認
設定した時間にRDSが停止するか確認します。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/a193a9ee-0362-3432-24c8-0b47cb6d670e.png)

設定した時間を過ぎるとステータスが「停止中」となりました。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/6a965f45-5421-699a-eaef-6dcca608f17c.png)

その後、「一時的に停止済み」となることが確認できました。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552698/4cf8823d-bf8d-bd0f-5fd3-94937bf0ef20.png)

# 終わりに
Amazon EventBridge Schedulerを使ってRDSを自動的に停止させることができました。
スケジュールをあらかじめ作っておけば、停止していたRDSが自動的に起動されてしまい
いつの間にか課金されてしまっていたということを防げるのではないかと思います。

# 参考にさせていただいた記事

https://dev.classmethod.jp/articles/amazon-eventbridge-scheduler-rds-stop/

https://blog.denet.co.jp/rds_stop_plz/