AWS RDSの自動再起動をEventBridgeで検知しStep Functionsで抑制する

2024/10/18に公開

AWS RDSインスタンスやクラスターは、一度停止しても7日後に自動的に再起動されます。特定の環境では、この自動再起動を防ぎたい場合があります。特に、一部のデータベースのみを停止したい場合に、この制御が役立ちます。

この記事では、EventBridgeとStep Functionsを使用して、特定のタグが付いたRDSインスタンスやクラスターが自動再起動された際に、再度停止する仕組みを構築した方法を紹介します。

構成の特徴

1. EventBridgeによる検知

RDSインスタンスやクラスターが自動再起動された際、EventBridgeがそのイベントをキャッチします。

2. Step Functionsでの停止制御

イベントを検知すると、Step Functionsが実行され、再起動されたRDSインスタンスやクラスターの停止処理が行われます。

3. 特定のタグによる制御

検知されたRDSインスタンスやクラスターに特定のタグがある場合のみ停止します。タグがない場合は、再起動後も起動されたままです。この仕組みによって、すべてのRDSインスタンスではなく、指定したデータベースのみを抑制できます。

4. APIの結果確認とスリープの考慮

describe-db-instances または describe-db-clusters APIを使って、タグの有無やデータベースのステータスを判定しています。しかし、EventBridgeでの検知直後に describe APIを実行すると、ステータスが「停止中」のままの場合があります。これを防ぐため、処理実行前に一時的にスリープ(Wait)を挟むことで、正しいステータスに基づいた制御を行います。

ステートマシンの図

以下は、Step Functionsのステートマシンのグラフビューです。
(クラスターが再起動した際のグラフビュー)


今後の追加機能

現在、メール通知やSlack通知の機能追加も検討中です。これにより、再起動や停止処理が発生した際に、即座に通知を受け取れるようになる予定です。


公開しているリソースについて

このコンストラクタスタックは、以下で公開しています。詳細なコードや利用方法は、こちらからご確認いただけます。
https://constructs.dev/packages/@gammarers/aws-rds-database-auto-running-protection-stack


このように、特定の条件下で自動的に再起動を抑制できるため、必要なRDSインスタンスのみを柔軟に管理することができます。さらに、通知機能などの追加を通して、運用面での安心感も高める予定です。


Let's happy coding

Discussion