Amazon RDSには、データベースや周辺環境の状態変更に応じてさまざまなイベントが生成されます。
例えば、データベースインスタンスの削除は「RDS-EVENT-0003」、停止は「RDS-EVENT-0087」といったイベントコードで記録され、これにより環境の変化を確認することが可能です。
これらのイベントは、RDSの「イベントサブスクリプション」機能を使用してAmazon SNSを介し、ユーザーに通知することができます。
しかし、この機能には制約があり、特定のイベントだけを選んで通知することができません。イベントカテゴリごとにしか設定ができないため、通知が不要なイベントまで一緒に含まれてしまいます。
こうした制限を解決する方法として、Amazon EventBridgeを利用すれば、特定のイベントをピンポイントで検知して通知することができます。
今回は、Amazon RDSの特定イベントをAmazon EventBridgeで検知し、Amazon SNSを利用して通知する方法を紹介します。
RDSの個別イベントを通知
Amazon RDSのイベントには、メンテナンス、エラー、設定変更など多岐にわたる種類があります。多くの場面で便利なイベントサブスクリプション機能ですが、イベントの種類が多いと、不要な通知が増えてしまうケースもあります。
Amazon EventBridgeを使えば、特定のイベントコードに基づいてトリガーを設定し、不要な通知を減らすことができます。
■前提
以下の準備ができていることが前提となります。
- RDSデータベース作成済み:RDSインスタンスを既に作成していること。
- SNSトピック・サブスクリプション設定済み:通知先となるAmazon SNSトピックと、メールやSMSなどのサブスクリプションが設定されていること。
また、今回検知するイベントは以下の二つです。
イベントID | ソースタイプ | カテゴリ | メッセージ |
---|---|---|---|
RDS-EVENT-0172 | RDS DB Cluster Event | 通知 | クラスターの名前が name から name に変更されました。 |
RDS-EVENT-0087 | RDS DB Instance Event | 通知 | DB インスタンスが停止しました。 |
■手順
●EventBridgeルール作成
まず、EventBridgeのルールを作成して特定のRDSイベントを検知できるようにします。
EventBridgeコンソールにアクセスし、「ルールの作成」を選択します。
設定値は以下の通りです。
項目 | 設定値 |
---|---|
名前 | 任意 |
説明 – オプション | 任意 |
イベントバス | default |
ルールタイプ | イベントパターンを持つルール |
↓
↓
イベントソースとして「AWS イベントまたは EventBridge パートナーイベント」を選択し、ターゲットイベントとして検知したい特定のイベントコードを指定します。
設定値は以下の通りです。
項目 | 設定値 |
---|---|
イベントソース | AWS イベントまたは EventBridge パートナーイベント |
メソッド | カスタムパターン (JSON エディタ) |
イベントパターン | 下記のJSONを参照 |
【イベントパターンJSON】
{
"source": ["aws.rds"],
"detail-type": ["RDS DB Cluster Event", "RDS DB Instance Event"],
"detail": {
"EventID": ["RDS-EVENT-0172", "RDS-EVENT-0087"]
}
}
↓
ターゲット設定として、Amazon SNSを選択し、事前に作成したSNSトピックを指定します。
設定値は以下の通りです。
項目 | 設定値 |
---|---|
ターゲットタイプ | AWS のサービス |
ターゲットを選択 | SNS トピック |
トピック | 任意 |
↓ルールの設定内容を確認し、作成を完了します。
↓
↓
EventBridgeルールの作成は以上です。
●動作確認
次に、設定したEventBridgeルールが正しく動作しているかを確認します。
RDSインスタンスに対し、指定したイベントが発生する操作(DBクラスター識別子の変更とインスタンスの停止)を実行します。
まずは、"DBクラスター識別子の変更"の検知を確認します。
↓用意してあるデータベースの名前を変更してみましょう。
↓一文字変えてみます。
↓
↓変更後、イベントを見ると、名前が変わったというイベントが発生しています。
↓メールを確認すると、以下の内容のメールが届きました。
【メール抜粋】
{"version":"0","id":"8f4dea01-6c34-dff4-b101-76bd54c90972","detail-type":"RDS DB Cluster Event","source":"aws.rds","account":"xxxxxxxxxxxx","time":"2024-10-26T03:47:36Z","region":"ap-southeast-1","resources":["arn:aws:rds:ap-southeast-1:xxxxxxxxxxxx:cluster:saitou-handson-database-2"],"detail":{"EventCategories":["notification"],"SourceType":"CLUSTER","SourceArn":"arn:aws:rds:ap-southeast-1:xxxxxxxxxxxx:cluster:saitou-handson-database-2","Date":"2024-10-26T03:47:36.512Z","Message":"Renamed cluster from saitou-handson-database-1 to saitou-handson-database-2.","SourceIdentifier":"saitou-handson-database-2","EventID":"RDS-EVENT-0172","Tags":{"User":"saitou"}}}
--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.ap-southeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:ap-southeast-1:xxxxxxxxxxxx:saito-handson-topic:b0812009-7178-4c47-b1f8-8c718399af99&Endpoint=xxxxxxxxxxxx@xxx.co.jp
Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support
"DBクラスター識別子の変更"イベントを検知し、通知を受け取ることができました。
つぎに、"インスタンスの停止"の検知を確認してみます。
↓データベースを停止してみます。
↓
↓
↓変更後、イベントを見ると、停止したというイベントが発生しています。
↓メールを確認すると、以下の内容のメールが届きました。
【メール抜粋】
{"version":"0","id":"5c196c3d-3f14-2609-e0ce-5e1643b7a3dc","detail-type":"RDS DB Instance Event","source":"aws.rds","account":"xxxxxxxxxxxx","time":"2024-10-26T04:03:46Z","region":"ap-southeast-1","resources":["arn:aws:rds:ap-southeast-1:xxxxxxxxxxxx:db:saitou-handson-database-1-instance-1"],"detail":{"EventCategories":["notification"],"SourceType":"DB_INSTANCE","SourceArn":"arn:aws:rds:ap-southeast-1:xxxxxxxxxxxx:db:saitou-handson-database-1-instance-1","Date":"2024-10-26T04:03:46.521Z","Message":"DB instance stopped","SourceIdentifier":"saitou-handson-database-1-instance-1","EventID":"RDS-EVENT-0087"}}
--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.ap-southeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:ap-southeast-1:xxxxxxxxxxxx:saito-handson-topic:b0812009-7178-4c47-b1f8-8c718399af99&Endpoint=xxxxxxxxxxxx@xxx.co.jp
Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support
"インスタンスの停止"イベントを検知し、通知を受け取ることができました。
動作確認は以上です。
まとめ
Amazon RDSのイベントサブスクリプションは、RDSイベントの発生をユーザーに知らせる便利な機能です。
しかし、カテゴリ単位でしか通知の設定ができないため、必要のないイベントも含まれてしまう場合があります。
特定のイベントのみ通知したい場合は、Amazon EventBridgeを活用して、特定のイベントコードを検知して通知を行う方法が効果的です。また、EventBridgeを利用することで、イベントだけでなく、特定のリージョンやリソースに限定した通知設定も可能となり、通知システムを柔軟にカスタマイズすることができます。
これを機に、システムに応じた最適な通知管理を取り入れてみましょう。
参考リンク:RDSイベント一覧-AWS公式ドキュメント
↓ほかの協栄情報メンバーもAmazon RDSについての記事を公開しています。ぜひ参考にしてみてください。
■“Amazon RDS for SQL Server”のクロスリージョンリードレプリカを作成・昇格してみた(齊藤弘樹)
■RDSのMySQL5.7標準サポート終了に伴う8.0へのアップグレードについて(ito.d)
■AWS RDS for Oracleメモリー不足際の解決案(dapeng)