【5分で簡単!】Amazon EventBridge SchedulerでRDSの自動定期停止を実装してみた

Amazon EventBridge SchedulerでRDSの自動定期停止を試してみました!5分で簡単に実装できるので、ぜひ試してみて下さい!
2022.11.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

あ、また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)でした!