はじめに
こんにちは。すぎもんです
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分の自動起動のスケジュールを作成します。
自動停止から7日後に自動起動されると、同時刻の自動停止が間に合わないため、毎週、自動停止時刻の直前で自動起動するスケジュールの作成も必要となります。
実施手順
以下の手順でRDSの自動起動/停止を設定します。
1.ポリシー作成
①ポリシーの作成
②サービスを選択
③アクション許可を指定
④確認して作成
⑤ポリシーの作成確認
2.ロール作成
①ロールを作成
②信頼されたエンティティを選択
③許可ポリシーを追加
④名前、確認、および作成
⑤ロールの作成確認
3.停止スケジュール作成
①スケジュールを作成
②スケジュール名を入力
③スケジュールを指定
④ターゲットの選択
⑤スケジュール完了後のアクション指定
⑥アクセス許可を指定
⑦スケジュールを確認して作成
⑧スケジュールの作成確認
4.起動スケジュール作成
①スケジュールを作成
②スケジュール名を入力
③スケジュールを指定
④ターゲットの選択
⑤スケジュール完了後のアクション指定
⑥アクセス許可を指定
⑦スケジュールを確認して作成
⑧スケジュールの作成確認
5.スケジュールの実行確認
①イベント履歴の確認
②RDSの自動停止確認
③RDSの自動起動確認
1.ポリシー作成
① ポリシーの作成
AWSマネジメントコンソールのIAM > ポリシーで「ポリシーの作成」を押下します。
②サービスを選択
サービスを「RDS」で検索し、「RDS」を選択します。
③アクション許可を指定
アクションを「StopDB」で検索し、「StopDBCluster」にチェックを入れます。
DBインスタンスのみ停止する場合は「StopDBInstance」にチェックを入れます。
アクションを「StartDB」で検索し、「StartDBCluster」にチェックを入れて、「次へ」を押下します。
DBインスタンスのみ起動する場合は「StartDBInstance」にチェックを入れます。
④確認して作成
ポリシー名を入力し、許可の内容を確認し、「ポリシーの作成」を押下します。
⑤ポリシーの作成確認
ポリシーが作成されたことを確認します。
2.ロール作成
①ロールを作成
AWSマネジメントコンソールのIAM > ロールで「ロールを作成」を押下します。
②信頼されたエンティティを選択
「カスタム信頼ポリシー」にチェックを入れ、カスタム信頼ポリシーの「Principal」に
「"Service": "scheduler.amazonaws.com"」を入力し、「次へ」を押下します。
③許可ポリシーを追加
許可ポリシーは「1.ポリシー作成」で作成したポリシー名 にチェックを入れ、「次へ」を押下します。
④名前、確認、および作成
「ロール名」を入力し、設定内容を確認して、「ロールを作成」を押下します。
3.停止スケジュール作成
①スケジュールを作成
AWSマネジメントコンソールのAmazon EventBridge > スケジュールで「スケジュールを作成」を押下します。
③スケジュールを指定
「定期的なスケジュール」にチェックを入れ、「cron ベースのスケジュール」にチェックを入れます。
cron式でスケジュールを入力し、「次へ」を押下します。
cron 式の仕様として日付と曜日を同時に指定するスケジュールは設定できません。日付もしくは曜日に値を指定した場合(*を含む)はもう一方の値に?を設定する必要があります。
④ターゲットの選択
「すべてのAPI」にチェックを入れ、AWSのサービスを「RDS」で検索し、「Amazon RDS」をクリックします。
「StopDB」で検索し、「Amazon RDS StopDBCluster」にチェックを入れます。
DBクラスターID を入力して、「次へ」を押下します。
DBインスタンスのみ停止する場合は「Amazon RDS StopDBInstance」にチェックを入れ、DBインスタンスIDを入力します。
DBクラスターIDの確認方法については以下を参照してください。
RDS > ベータベースでターゲットのDBクラスターを選択し、設定タブのDBクラスターIDを確認します。
⑤スケジュール完了後のアクション指定
スケジュール完了後のアクションを指定します。
⑥アクセス許可を指定
「既存のロールを使用」にチェックを入れ、 「2.ロール作成 」 で作成したロールを指定して、「次へ」を押下します。
⑦スケジュールの確認と作成
スケジュールの内容を確認し、「スケジュールを作成」を押下します。
⑧スケジュールの作成確認
スケジュールが作成されたことを確認します。
4.起動スケジュール作成
①スケジュールを作成
AWSマネジメントコンソールのAmazon EventBridge > スケジュールで「スケジュールを作成」を押下します。
③スケジュールを指定
「定期的なスケジュール」にチェックを入れ、「cron ベースのスケジュール」にチェックを入れます。
cron式でスケジュールを入力し、「次へ」を押下します。
起動処理にかかる時間を考慮し、自動停止時刻までに起動が完了するように起動スケジュールを設定します。
以下は毎週月曜日22時40分のスケジュールを指定する場合の例です。
cron 式の仕様として日付と曜日を同時に指定するスケジュールは設定できません。日付もしくは曜日に値を指定した場合(*を含む)はもう一方の値に?を設定する必要があります。
④ターゲットの選択
「すべてのAPI」にチェックを入れ、AWSのサービスを「RDS」で検索し、「Amazon RDS」をクリックします。
「StartDB」で検索し、「Amazon RDS StartDBCluster」にチェックを入れます。
DBクラスターID を入力して、「次へ」を押下します。
DBインスタンスのみ起動する場合は「Amazon RDS StartDBInstance」にチェックを入れ、DBインスタンスIDを入力します。
DBクラスターIDの確認方法については以下を参照してください。
RDS > ベータベースでターゲットのDBクラスターを選択し、設定タブのDBクラスターIDを確認します。
⑤スケジュール完了後のアクション指定
スケジュール完了後のアクションを指定します。
⑥アクセス許可を指定
「既存のロールを使用」にチェックを入れ、 「2.ロール作成 」 で作成したロールを指定して、「次へ」を押下します。
⑦スケジュールの確認と作成
スケジュールの内容を確認し、「スケジュールを作成」を押下します。
⑧スケジュールの作成確認
スケジュールが作成されたことを確認します。
5.スケジュールの実行確認
①イベント履歴の確認
AWSマネジメントコンソールのCloudTail > イベント履歴で停止スケジュールと起動スケジュールのイベント履歴があることを確認します。
・[ルックアップ属性]で選択した属性で検索することが可能です。
・確認したいイベントの[イベント名]をクリックすると詳細が表示されます。
・イベント履歴は過去90日間の履歴が確認できます。
②RDSの自動起動確認
AWSマネジメントコンソールのRDS > データベースでDBクラスターとDBインスタンスのステータスを確認します。起動スケジュール実行前に「一時的に停止済み」となっていたステータスが、起動スケジュール実行後に「利用可能」に変わることを確認します。
③RDSの自動停止確認
AWSマネジメントコンソールのRDS > データベースでDBクラスターとDBインスタンスのステータスを確認します。停止スケジュール実行前に「利用可能」となっていたステータスが、停止スケジュール実行後に「一時的に停止済み」に変わることを確認します。
最後に
皆さん、いかがでしたでしょうか。
今回は、Amazon EventBridgeのスケジュールを使って、Amazon RDSの自動起動/停止を設定してみました。毎週手動停止している作業の自動化や、RDSの停止し忘れにより無駄な課金が発生しないように、自動起動/停止を是非試してみてください!
このブログでは、今後も様々なTopics記事や接続検証等、皆さんの役に立つような記事を投稿していきたいと思います!
これからも是非チェックいただき、宜しければフォローをお願いします。
最後まで読んでいただきありがとうございました!それでは、また!