【AWS】RDSを自動停止・自動起動させる方法まとめ

# はじめに
AWSのコスト、特にRDSはかなりしっかりコストがかかるシステムですよね。
優秀なシステムが故なのですが、少しでも節約ができるように本日は備忘録としてRDSを自動停止、起動するための手順を記事に残しておこうと思います。

# ①IAMの作成
今回EventBridgeを使用して日常的に停止と起動を繰り返すように調整します。
その為の準備としてまずはIAMロールの新規作成を行います。

![スクリーンショット 2023-04-09 13.43.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/b6b55fc8-1699-bfcf-c539-208660130539.png)

`IAM > ロール`から画面右上のロールを作成を選択します。

するとエンティティの選択画面が表示されますので、EventBridge Schedulerから実行できるよう`カスタム信頼ポリシー`を選択します。
カスタム管理ポリシーでは、`scheduler.amazonaws.com`を許可します。

![スクリーンショット 2023-04-09 19.55.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/f5810d21-5efa-0627-2b7c-731ed0e805ff.png)


```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

上記を設定した後、次に進むとポリシーの選択画面が表示されます。
ポリシーは新規作成する必要があるため、画面右上にある`ポリシーの作成`を選択します。

![スクリーンショット 2023-04-09 13.47.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/4bb99844-0502-a8dd-745b-558dacbb5e29.png)

ポリシーの内容は起動と停止になりますので、以下を設定する必要があります。

StartDBInstance
StopDBInstance

![スクリーンショット 2023-04-09 13.50.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/dc5d7fcd-2494-f75c-0a5e-f1d59d63ed80.png)

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "rds:StopDBInstance",
                "rds:StartDBInstance"
            ],
            "Resource": "*"
        }
    ]
}
```
上記を設定し次へ進みます。
タグは特に設定せずで大丈夫です、必要であれば調整し次へ進みます。

以下入力欄にポリシー名と説明を設定しポリシーを作成します。

![スクリーンショット 2023-04-09 13.54.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/fa5c5362-1a65-5441-2954-afbe1fbc2e3d.png)

これでポリシーの作成は以上です。
先ほどのIAMロール作成画面に戻り、作成したポリシーを追加します。

:::note info
※IAM画面へ戻った後も作成したはずのポリシーが表示されないようでしたら、IAMロールをリフレッシュしてみてください。
:::

作成したポリシーを付与したら最後に名称と説明を任意の内容で設定し作成して終了です。

![スクリーンショット 2023-04-09 13.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/4d5b71f9-80e5-b6e3-502d-5fbf0081a5aa.png)

# ②EventBridgeSchedulerの設定
IAMを作成したら、次は定期実行されるSchedulerを設定します。

:::note warn
注意点
DBの起動、停止それぞれでSchedulerの設定が必要です。
ほぼ同じ手順での登録なので、片方登録したらもう片方の設定を忘れずお願いします。
:::

![スクリーンショット 2023-04-09 13.58.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/9d78e444-4dd8-21a0-d889-81d8e23888c5.png)

EventBridgeを開いたら画面左のメニューから、`スケジュール`を選択し、画面右下の`スケジュールを作成`を選択。

すると作成画面が表示されるので、スケジュール名、説明は任意の内容を入力。

![スクリーンショット 2023-04-09 14.02.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/50e2824f-e92b-7051-25e1-7b378054fdcc.png)

次にスケジュールのパターンを設定します。
スケジュールの種類は定期的なスケジュールのcronベーススケジュールを選択します。
cornの時刻の設定方法に関しては、以下を参考にしてみてください。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-cloudwatchevents-expressions.html

フレックスタイムウィンドウ（処理時刻に余裕を持たせるか）はオフにしておきます。

![スクリーンショット 2023-04-09 14.05.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/ea307c44-2358-e09d-1617-633635a2e7b8.png)

時間枠では、タイムゾーンと開始日時、終了日時を設定できます。
タイムゾーンは`（UTC + 09:00） Asia/Tokyo`にします。
開始時刻や終了日時は特に設定する必要はありません、未設定で大丈夫です。

![スクリーンショット 2023-04-09 14.07.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/0f109748-24fc-3406-edc3-8bed9c35c0b5.png)

時刻関連の設定が終わり、次に進むとターゲットの詳細を設定する必要が出てきます。
今回はRDSの自動停止、起動なので、全てのAPIを選択し、入力欄にRDSと入力します。
３つが検索結果に表示されるはずなので、赤枠のものを選択します。

するとRDSに紐づく選択しが表示されるので、起動に関する設定であれば`Start`と、停止に関する設定であれば`Stop`と検索します。

Startの場合：StartDBInstanceを選択
![スクリーンショット 2023-04-09 19.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/b7ff4a90-b259-4d26-6bac-c424e6966f9d.png)

Stopの場合：StopDBInstanceを選択
![スクリーンショット 2023-04-09 19.40.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/6f491d96-a3cc-7480-5b76-64c58b927a39.png)

それぞれ適切なものを選択し、以下に対象のDBインスタンスIDを指定してください。

![スクリーンショット 2023-04-09 19.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/d5dacfc6-c164-f478-6480-1bbe283b5a78.png)

DBインスタンスIDの設定を終えたら次に進みます。
次に進むと`スケジュールの状態`、`再試行ポリシーとデッドレターキュー（DLQ）`、`暗号化`という項目がありますが、こちらに関しては変更不要です。
以下の`既存の役割を選択`だけ最初の手順で作成したロールを指定してください。

![スクリーンショット 2023-04-09 19.48.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/626c717a-3772-6c13-37a8-82e863970fc7.png)

ロールの選択を終えたら次へ進み、設定は以上となります。

# さいごに
RDS、中々コストかかりますよね。
AWSLifeの方もこちらの方法を推奨されていたので、お困りの方はぜひご活用ください。