![【SSM・Lambda不要】Amazon EventBridge SchedulerでAuroraの自動停止を実装してみた](https://devio2023-media.developers.io/wp-content/uploads/2022/08/amazon-eventbridge.png)
【SSM・Lambda不要】Amazon EventBridge SchedulerでAuroraの自動停止を実装してみた
こんにちは。AWS事業本部コンサルティング部に所属している今泉(@bun76235104)です。
先日Amazon EventBridge SchedulerによるCloudFrontのキャッシュクリアを自動化するしくみを実装してみました。
Amazon EventBridge Schedulerはスケジュール実行に特化した機能を提供してくれるもので、さまざまなサービスのAPIと連携しています。
使い道はいろいろと考えられますが、これまでLambdaを介して実行していた一部のしくみを以下のように代替可能です。
- 従来のEC2停止の自動化イメージ
- ※ 以下処理の場合Lambda以外でもSSMによる自動化なども可能です
- EventBrdige SchedulerによるAPI実行のイメージ
弊社でもさまざまな遊び方有用な使い道が考えられています。
その中で比較的ランニングコストが気になるRDSのDBインスタンスの自動停止についても実装されています。
今回は以下のようにAmazon Aurora DBのクラスタも自動で停止できるか試してみました!
実装方法
下準備: Auroraクラスタの作成
以下のようにAuroraのDBクラスタを作成しています。
今回はMySQL互換としていますが、PostgreSQLでも同様の手順で実装できるかと思います。
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のページから、ナビゲーションペインの「スケジュール」をクリックし、「スケジュールを作成」をクリックします。
次にスケジュール名と説明を入力していきます。
今回スケジュールグループはデフォルトのまま、名前を AuroraStopDaily
としました。
次にcron式でスケジュールを設定します。
今回は以下のように毎日17時に設定しています。
0 17 * * ? *
cron式の書き方がわからない場合は、以下ページを参照してください。
次にタイムゾーンを設定します。
今回は日本時間を指定するため (UTC + 09:00) Asia/Tokyo
と設定し、「次へ」をクリックします。
次に呼び出すAPIを選択していきます。
以下のように「すべてのAPI」から「RDS」のサービスを選択します。
次に StopDBCluster
のAPIを選択します。
APIに渡すパラメータを指定します。
今回下準備で作成したDBクラスタのidを指定し、「次へ」をクリックします。
{ "DbClusterIdentifier": "test-auto-stop" }
「スケジュールの状態」・「再試行ポリシーとデッドレターキュー (DLQ)」・「暗号化」は特に設定不要であるため、以下のようにデフォルト値のまま進みます。
次に作成していたIAMロールを設定して、「次へ」をクリックします。
最後に「スケジュールの確認と作成」画面が表示されるため、問題なければ「スケジュールを作成」をクリックします。
確認
無事にEventBridge Schedulerを作成できたため、DBクラスタが停止されるか見守ります。
時間になったら、無事停止しました!
最後に
さまざまな使い方が考案されていくEventBridge Schedulerの一例でAuroraの自動停止を組んでみました。
以下の記事を参考にするだけで、とても簡単に実装できました。
開発環境のコスト削減などに役立てれば幸いです。
それにしてもEventBridge Schedulerでさまざまなオペレーションを自動化できそうですね。
非常に面白くて便利なので皆さんもぜひいろいろと試してみてください!