AWS RDSの自動再起動をEventBridgeで検知しStep Functionsで抑制する
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通知の機能追加も検討中です。これにより、再起動や停止処理が発生した際に、即座に通知を受け取れるようになる予定です。
公開しているリソースについて
このコンストラクタスタックは、以下で公開しています。詳細なコードや利用方法は、こちらからご確認いただけます。
このように、特定の条件下で自動的に再起動を抑制できるため、必要なRDSインスタンスのみを柔軟に管理することができます。さらに、通知機能などの追加を通して、運用面での安心感も高める予定です。
Let's happy coding
Discussion