【5分で簡単!】Amazon EventBridge SchedulerでRDSの自動定期停止を実装してみた
あ、またRDS停止し忘れた…。
こんにちは!AWS事業本部のおつまみです。
皆さん、検証用に立てたRDSを停止し忘れた経験はありますか?私は何度もあります。
RDSは料金が比較的高いため、停止し忘れると辛いですよね。
ユーザーガイドにも記載されている通りRDSは一度停止しても、7日後に自動的に起動されてしまいます。
DB インスタンスは最大 7 日間停止できます。7 日後に DB インスタンスを手動で起動しなかった場合、DB インスタンスは自動的に起動されます。これにより、必要なメンテナンスの更新が遅延することはありません。
これまではLambdaとEventBridgeルールを組み合わせて、停止処理を実装する必要がありました。
実装方法はこちらのAWS公式サイトより紹介されています。
しかし、先日リリースされたAWSの新機能「Amazon EventBridge Scheduler」を使えば、コンソールでぽちぽちするだけでRDSを定期的に自動停止することができるようになりました!
これは便利!と思ったので、早速やってみたいと思います。
Amazon EventBridge Schedulerの詳細については、ぜひこちらのブログをご確認下さい。
構成図
こちらが今回の構成図です。シンプルで良きです。
実装方法
(下準備)
まずは検証用として、対象のRDSを事前に起動させておきます。データベース名は「database-1」としておきます。
1.実行用のIAMロール作成
IAMサービスより[ロールの作成]をクリックします。
まずは信頼されたエンティティを選択します。
EventBridge Schedulerから実行できるようカスタム信頼ポリシーを選択します。
カスタム管理ポリシーのPrincipalでは、scheduler.amazonaws.com
を許可します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
次に付与するポリシーを設定します。[ポリシーを作成]をクリックします。(一旦IAMロールの設定画面から離れます。)
今回はRDSの停止のみを実行するため、以下のように設定を行いました。
- サービス:RDS
- Action:StopDBInstance
- リソース:すべてのリソース
・ビジュアルエディタ画面
・JSON画面
{ "Version": "2012-10-17", "Statement": [ { "Sid": "rdsstop", "Effect": "Allow", "Action": "rds:StopDBInstance", "Resource": "*" } ] }
次に任意のポリシー名を設定します。今回は「RDSStopPolicy」にしました。
先ほどのIAMロール作成画面に戻り、作成した「RDSStopPolicy」を追加します。
最後に任意のロール名を設定します。今回は「EventScheduler-RDSStopRole」にしました。
2.EventBridge Schedulerの設定
ここから本題のEventBridge Schedulerの設定になります。
EventBridgeのページから、ナビゲーションペインの[スケジュール]をクリックし、[スケジュールを作成]をクリックします。
まずは任意のスケジュール名を入力します。
今回は日次で定期停止するように設定するため、「RDSStop-everyday」にしました。
次にスケジュールのパターンを設定します。
今回は定期的なスケジュール
のcronベースのスケジュール
を選択します。
時刻は直近で動きそうな時刻を設定しました。
cronの設定については、こちらのユーザーガイドをご確認ください。
フレックスタイムウィンドウ(処理時刻に余裕を持たせるか)はオフにしておきます。
時間枠では、タイムゾーンと開始日時、終了日時を設定できます。
タイムゾーンは(UTC + 09:00) Asia/Tokyo
にします。
開始時刻や終了日時は今回検証で設定する必要は無いため、未設定にします。
次にターゲットの選択をします。
[すべてのAPI]を選択し、[Amazon RDS]を選択します。
今回はRDSの停止処理のため、呼び出すAPIとして[StopDBInstances]を選択します。
ターゲットの入力欄では、DBインスタンスID「database-1」を入力します。
最後に設定を行います。
スケジュールの状態、再試行ポリシーとデッドレターキュー(DLQ)は今回変更不要です。
暗号化も今回変更不要です。
アクセス許可は事前に作成したIAMロールを指定します。
最後に内容を確認し、スケジュールを作成します。
これでスケジュールが作成されました。
動作確認
設定したスケジュールで、下準備として用意したRDSが停止されるか見守ります。
無事、設定した時刻になると起動中→停止中→一時的に停止済みとなりました!
これで検証用のRDSインスタンスを立てた際に一緒にスケジュールを設定をすれば、過剰請求を防げますね。
最後に
今回はAmazon EventBridge SchedulerでRDSの自動定期停止を実装してみました。
EventBridge Scheduler便利すぎますね!
たくさんの可能性が秘めているサービスで今後たくさん活躍しそうです!
最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。
以上、おつまみ(@AWS11077)でした!