RDS自動停止の設定をしてみた

# はじめに
こんにちは。すぎもんです:smiley:
Amazon RDSは稼働時間によって課金されるシステムです。使用しない間はずっと停止しておきたいところですが、AWSの仕様で停止後7日間で自動的に起動されてしまいます。そのため、RDSを使用していない場合でも毎週手動で停止する作業が発生します。また、停止するのを忘れると想定外の課金が発生する可能性があります。

以前投稿した「HULFT10 for Container Servicesの ECS on Fargate 環境構築してみた」
https://qiita.com/sugimon/items/368f3f6746f124c1fa59
こちらでもRDSを利用しており、ナレッジをまとめてみました！

# 今回やること
Amazon EventBridgeでRDSを自動起動／停止するスケジュールを作成します。
今回は、毎日23時の自動停止と毎週月曜日22時40分の自動起動のスケジュールを作成します。

:::note warn
自動停止から7日後に自動起動されると、同時刻の自動停止が間に合わないため、毎週、自動停止時刻の直前で自動起動するスケジュールの作成も必要となります。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5e222fcd-7822-3b20-a3d4-ced1769cbabe.png)

# 実施手順
以下の手順でRDSの自動起動／停止を設定します。
**１．ポリシー作成**
①ポリシーの作成
②サービスを選択
③アクション許可を指定
④確認して作成
⑤ポリシーの作成確認

**２．ロール作成**
①ロールを作成
②信頼されたエンティティを選択
③許可ポリシーを追加
④名前、確認、および作成
⑤ロールの作成確認

**３．停止スケジュール作成**
①スケジュールを作成
②スケジュール名を入力
③スケジュールを指定
④ターゲットの選択
⑤スケジュール完了後のアクション指定
⑥アクセス許可を指定
⑦スケジュールを確認して作成
⑧スケジュールの作成確認

**４．起動スケジュール作成**
①スケジュールを作成
②スケジュール名を入力
③スケジュールを指定
④ターゲットの選択
⑤スケジュール完了後のアクション指定
⑥アクセス許可を指定
⑦スケジュールを確認して作成
⑧スケジュールの作成確認

**５．スケジュールの実行確認**
①イベント履歴の確認
②RDSの自動停止確認
③RDSの自動起動確認


# １．ポリシー作成
**① ポリシーの作成**
AWSマネジメントコンソールのIAM > ポリシーで「ポリシーの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8d5c063d-1644-664b-0b97-22533bcd5a34.png)

**②サービスを選択**
サービスを「RDS」で検索し、「RDS」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9f9a012b-b7a2-92d8-6e90-c0840f467251.png)

**③アクション許可を指定**
アクションを「StopDB」で検索し、「StopDBCluster」にチェックを入れます。

:::note info
DBインスタンスのみ停止する場合は「StopDBInstance」にチェックを入れます。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ac59717f-ec2f-8992-d5d4-60f417f7fad3.png)

アクションを「StartDB」で検索し、「StartDBCluster」にチェックを入れて、「次へ」を押下します。

:::note info
DBインスタンスのみ起動する場合は「StartDBInstance」にチェックを入れます。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/18ea09d8-71ab-4f0d-b0f5-0a641aab82cb.png)

**④確認して作成**
ポリシー名を入力し、許可の内容を確認し、「ポリシーの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1456e68e-e024-e09d-c430-ef0ff281f498.png)


**⑤ポリシーの作成確認**
ポリシーが作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/842f9467-aa2a-6923-6f4e-09235e417d4a.png)

# ２．ロール作成
**①ロールを作成**
AWSマネジメントコンソールのIAM > ロールで「ロールを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5cdce357-25b3-ec3f-e86b-e801e6f67aef.png)

**②信頼されたエンティティを選択**
「カスタム信頼ポリシー」にチェックを入れ、カスタム信頼ポリシーの「Principal」に
「"Service": "scheduler.amazonaws.com"」を入力し、「次へ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/74ba551e-8ae2-ea29-372b-69ac3176ede1.png)

**③許可ポリシーを追加**
許可ポリシーは「[１．ポリシー作成](#１ポリシー作成)」で作成したポリシー名 にチェックを入れ、「次へ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1d9d7f4f-7c7b-ef70-0136-ad587f0efcdb.png)

**④名前、確認、および作成**
「ロール名」を入力し、設定内容を確認して、「ロールを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/229d9786-961a-a17c-cefb-e2619f64e07e.png)

**⑤ロールの作成確認**
ロールが作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/540b6280-4660-27bb-2321-2a6beb9a2ea2.png)


# ３．停止スケジュール作成
**①スケジュールを作成**
AWSマネジメントコンソールのAmazon EventBridge > スケジュールで「スケジュールを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1888d1fb-338f-8524-3815-698773317f59.png)

**②スケジュール名を入力**
スケジュール名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/39743fd1-aa0f-2402-8cc9-a59ce65308da.png)

**③スケジュールを指定**
「定期的なスケジュール」にチェックを入れ、「cron ベースのスケジュール」にチェックを入れます。
cron式でスケジュールを入力し、「次へ」を押下します。

以下は毎日23時のスケジュールを指定する場合の例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d8737455-a085-5d3f-1310-480147ec1a31.png)

:::note warn
cron 式の仕様として日付と曜日を同時に指定するスケジュールは設定できません。日付もしくは曜日に値を指定した場合（*を含む）はもう一方の値に？を設定する必要があります。
:::

**④ターゲットの選択**
「すべてのAPI」にチェックを入れ、AWSのサービスを「RDS」で検索し、「Amazon RDS」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e287269c-8d05-d5cd-9a79-656e3f678716.png)

「StopDB」で検索し、「Amazon RDS StopDBCluster」にチェックを入れます。
DBクラスターID を入力して、「次へ」を押下します。

:::note info
DBインスタンスのみ停止する場合は「Amazon RDS StopDBInstance」にチェックを入れ、DBインスタンスIDを入力します。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/491ea612-c835-eb86-8df0-575075d45656.png)

:::note info
DBクラスターIDの確認方法については以下を参照してください。
:::

RDS > ベータベースでターゲットのDBクラスターを選択し、設定タブのDBクラスターIDを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5cef0256-833d-6883-22ad-a7124964539b.png)

**⑤スケジュール完了後のアクション指定**
スケジュール完了後のアクションを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e0bd298a-552e-f214-b943-639d7861304b.png)

**⑥アクセス許可を指定**
「既存のロールを使用」にチェックを入れ、 「[２．ロール作成](#２ロール作成) 」 で作成したロールを指定して、「次へ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ed67f0ad-151f-5738-06a4-f280506d08ea.png)

**⑦スケジュールの確認と作成**
スケジュールの内容を確認し、「スケジュールを作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/61ed19ac-91c1-c763-029f-6ee101635163.png)

**⑧スケジュールの作成確認**
スケジュールが作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/fd7f83ec-85c2-1ff9-1163-20ccbbcee980.png)

# ４．起動スケジュール作成
**①スケジュールを作成**
AWSマネジメントコンソールのAmazon EventBridge > スケジュールで「スケジュールを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1888d1fb-338f-8524-3815-698773317f59.png)

**②スケジュール名を入力**
スケジュール名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/59a32e3f-1627-9fae-1e89-4eda34bf3595.png)

**③スケジュールを指定**
「定期的なスケジュール」にチェックを入れ、「cron ベースのスケジュール」にチェックを入れます。
cron式でスケジュールを入力し、「次へ」を押下します。

:::note warn
起動処理にかかる時間を考慮し、自動停止時刻までに起動が完了するように起動スケジュールを設定します。
:::

以下は毎週月曜日22時40分のスケジュールを指定する場合の例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d0773439-3439-4243-951f-2bf84fe9d61b.png)

:::note warn
cron 式の仕様として日付と曜日を同時に指定するスケジュールは設定できません。日付もしくは曜日に値を指定した場合（*を含む）はもう一方の値に？を設定する必要があります。
:::

**④ターゲットの選択**
「すべてのAPI」にチェックを入れ、AWSのサービスを「RDS」で検索し、「Amazon RDS」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e287269c-8d05-d5cd-9a79-656e3f678716.png)

「StartDB」で検索し、「Amazon RDS StartDBCluster」にチェックを入れます。
DBクラスターID を入力して、「次へ」を押下します。

:::note info
DBインスタンスのみ起動する場合は「Amazon RDS StartDBInstance」にチェックを入れ、DBインスタンスIDを入力します。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/26df5f3f-0c22-67ea-1094-4ab0e4259ce8.png)

:::note info
DBクラスターIDの確認方法については以下を参照してください。
:::

RDS > ベータベースでターゲットのDBクラスターを選択し、設定タブのDBクラスターIDを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5cef0256-833d-6883-22ad-a7124964539b.png)

**⑤スケジュール完了後のアクション指定**
スケジュール完了後のアクションを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e0bd298a-552e-f214-b943-639d7861304b.png)

**⑥アクセス許可を指定**
「既存のロールを使用」にチェックを入れ、 「[２．ロール作成](#２ロール作成) 」 で作成したロールを指定して、「次へ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b4a340e5-7335-b7ae-e7b7-e351856e0065.png)

**⑦スケジュールの確認と作成**
スケジュールの内容を確認し、「スケジュールを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/30be4b1d-59a0-6e21-386f-3734b481b4cc.png)

**⑧スケジュールの作成確認**
スケジュールが作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6c2e324c-cda8-4bea-96ae-7f2d69db4766.png)

# ５．スケジュールの実行確認
**①イベント履歴の確認**
AWSマネジメントコンソールのCloudTail > イベント履歴で停止スケジュールと起動スケジュールのイベント履歴があることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6bedc877-515c-e240-1d29-55fc98fd0422.png)

:::note info
・[ルックアップ属性]で選択した属性で検索することが可能です。
・確認したいイベントの[イベント名]をクリックすると詳細が表示されます。
・イベント履歴は過去90日間の履歴が確認できます。
:::
**②RDSの自動起動確認**
AWSマネジメントコンソールのRDS > データベースでDBクラスターとDBインスタンスのステータスを確認します。起動スケジュール実行前に「一時的に停止済み」となっていたステータスが、起動スケジュール実行後に「利用可能」に変わることを確認します。

【起動スケジュール実行前】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/23c1e9b4-0267-15b6-baee-c7ac9e6ede1c.png)

【起動スケジュール実行後】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3466d8eb-d8d4-6f51-0cff-d9d21608d170.png)

**③RDSの自動停止確認**
AWSマネジメントコンソールのRDS > データベースでDBクラスターとDBインスタンスのステータスを確認します。停止スケジュール実行前に「利用可能」となっていたステータスが、停止スケジュール実行後に「一時的に停止済み」に変わることを確認します。

【停止スケジュール実行前】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3466d8eb-d8d4-6f51-0cff-d9d21608d170.png)

【停止スケジュール実行後】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/23c1e9b4-0267-15b6-baee-c7ac9e6ede1c.png)

# 最後に
皆さん、いかがでしたでしょうか。
今回は、Amazon EventBridgeのスケジュールを使って、Amazon RDSの自動起動／停止を設定してみました。毎週手動停止している作業の自動化や、RDSの停止し忘れにより無駄な課金が発生しないように、自動起動／停止を是非試してみてください！

このブログでは、今後も様々なTopics記事や接続検証等、皆さんの役に立つような記事を投稿していきたいと思います！
これからも是非チェックいただき、宜しければフォローをお願いします。
最後まで読んでいただきありがとうございました！それでは、また！