【SSM・Lambda不要】Amazon EventBridge SchedulerでAuroraの自動停止を実装してみた

Amazon EventBridge SchedulerでAurora自動停止を実装してみました。 同僚のRDS停止を参考にするだけで、ものの5分で実装できました。
2022.11.21

こんにちは。AWS事業本部コンサルティング部に所属している今泉(@bun76235104)です。

先日Amazon EventBridge SchedulerによるCloudFrontのキャッシュクリアを自動化するしくみを実装してみました。

Amazon EventBridge Schedulerはスケジュール実行に特化した機能を提供してくれるもので、さまざまなサービスのAPIと連携しています。

使い道はいろいろと考えられますが、これまでLambdaを介して実行していた一部のしくみを以下のように代替可能です。

  • 従来のEC2停止の自動化イメージ
    • ※ 以下処理の場合Lambda以外でもSSMによる自動化なども可能です

20221119_old_image

  • EventBrdige SchedulerによるAPI実行のイメージ

20221119_scheduler_image

弊社でもさまざまな遊び方有用な使い道が考えられています。

その中で比較的ランニングコストが気になるRDSのDBインスタンスの自動停止についても実装されています。

今回は以下のようにAmazon Aurora DBのクラスタも自動で停止できるか試してみました!

20221119_scheduler_aurora_architecture

実装方法

下準備: Auroraクラスタの作成

以下のようにAuroraのDBクラスタを作成しています。

今回はMySQL互換としていますが、PostgreSQLでも同様の手順で実装できるかと思います。

20221119_prepare_aurora_cluster

IAMロール作成

次にAmazon EventBridge SchedulerからAuroraクラスタを停止するためのIAMロールを作成します。

【5分で簡単!】Amazon EventBridge SchedulerでRDSの自動定期停止を実装してみたのIAMロールの手順と同様です。

信頼ポリシーは上記事と同様、以下のように設定します。

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

IAMポリシーはAuroraのDBクラスタを停止できるように、以下のように設定しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "rds:StopDBCluster",
            "Resource": "arn:aws:rds:ap-northeast-1:${アカウントID}:cluster:${DBクラスタID}"
        }
    ]
}

Resourceブロックでは、下準備で作成したDBクラスタのみに絞った権限を渡していますが、ただ試すだけの場合は以下のように*と指定しても問題ないと思います。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0", "Effect": "Allow",
            "Action": "rds:StopDBCluster",
            "Resource": "*"
        }
    ]
}

EventBridge Schedulerの設定

次に、EventBridge Schedulerで定期的なイベント実行をスケジュールします。

EventBridgeのページから、ナビゲーションペインの「スケジュール」をクリックし、「スケジュールを作成」をクリックします。

20221119_eventbridge_scheduler_create

次にスケジュール名と説明を入力していきます。

今回スケジュールグループはデフォルトのまま、名前を AuroraStopDaily としました。

20221119_stop_cluster_schedule1

次にcron式でスケジュールを設定します。

20221119_stop_cluster_schedule2

今回は以下のように毎日17時に設定しています。

0 17 * * ? *

cron式の書き方がわからない場合は、以下ページを参照してください。

次にタイムゾーンを設定します。

今回は日本時間を指定するため (UTC + 09:00) Asia/Tokyo と設定し、「次へ」をクリックします。

20221119_stop_cluster_schedule3

次に呼び出すAPIを選択していきます。

以下のように「すべてのAPI」から「RDS」のサービスを選択します。

20221119_stop_cluster_select_api1

次に StopDBCluster のAPIを選択します。

20221119_stop_cluster_select_api2

APIに渡すパラメータを指定します。

20221119_stop_cluster_parameter

今回下準備で作成したDBクラスタのidを指定し、「次へ」をクリックします。

{
  "DbClusterIdentifier": "test-auto-stop"
}

「スケジュールの状態」・「再試行ポリシーとデッドレターキュー (DLQ)」・「暗号化」は特に設定不要であるため、以下のようにデフォルト値のまま進みます。

20221119_stop_cluster_enable_scudhuler

次に作成していたIAMロールを設定して、「次へ」をクリックします。

20221119_stop_cluster_select_iam_role

最後に「スケジュールの確認と作成」画面が表示されるため、問題なければ「スケジュールを作成」をクリックします。

確認

無事にEventBridge Schedulerを作成できたため、DBクラスタが停止されるか見守ります。

20221119_stop_cluster_before_stop

時間になったら、無事停止しました!

20221119_stop_cluster_after_stop

最後に

さまざまな使い方が考案されていくEventBridge Schedulerの一例でAuroraの自動停止を組んでみました。

以下の記事を参考にするだけで、とても簡単に実装できました。

開発環境のコスト削減などに役立てれば幸いです。

それにしてもEventBridge Schedulerでさまざまなオペレーションを自動化できそうですね。

非常に面白くて便利なので皆さんもぜひいろいろと試してみてください!