Amazon RDS のマイナーバージョンアップグレードをSlackに通知する
最終更新日: 2023/12/14
#Slack
やりたいこと
Amazon RDS メンテナンスウィンドウ中ににマイナーバージョンアップグレードが適用されたら Slack に通知したい
低コストで (工数的にも料金的にも)
流れ
RDSイベントサブスクリプション → SNS → Email (SlackのEmail) → Slack
わたしたちのこの使い方なら無料枠でいける想定 (今すでにあるもの以外に追加料金はかからない)
Slack に直接ポストしたい場合は AWS Chatbot を挟めば良いらしい
手順
1. Amazon SNS のトピックをつくる
タイプ: スタンダード
名前: 任意
2. Amazon RDS のイベントサブスクリプションをつくる
ターゲット: 1のトピック
ここで新しい E メールトピックを選ぶと1の SNS トピックと3の SNS サブスクリプションもいっしょに作ることができる。この場合1のステップは不要、3は4の Confirm subscription 後にサブスクリプションフィルターポリシーの編集のみを行う。
ソースタイプ: インスタンス
インスタンス: イベントを拾いたいインスタンスの識別子
イベントカテゴリ: maintenance
ソースタイプ、イベントカテゴリは Amazon RDS のイベントカテゴリとイベントメッセージ を参照
3. Amazon SNS のサブスクリプションをつくる
プロトコル: EMAIL
エンドポイント: ポスト先Slack部屋のEmail
フィルターポリシーのスコープ: メッセージ属性
サブスクリプションフィルターポリシー:
code:json
{
"EventID": [
"RDS-EVENT-0047" // Database instance patched
]
}
メンテナンスウィンドウでマイナーバージョンアップが適用された場合、EventID は RDS-EVENT-0047
試していないが、おそらく手動でマイナーバージョンアップ (「すぐに適用」を選んだ場合) した場合も同じでは
ちなみに、ほかにどんなイベントが同じくRDS-EVENT-0047 なのかはわかっていない
マイナーバージョンアップだけなのか、ほかにもRDS-EVENT-0047になるイベントがあるのか...
4. Amazon SNS のサブスクリプションの確認する
Amazon SNS のサブスクリプション のエンドポイントに指定した EMAIL に Confirmメールがくるので、Confirm subscription する。
→ ステータスが「確認済み」に変わる。
送られてくるメール例
件名: RDS Notification Message
送信元: AWS Notifications <no-reply@sns.amazonaws.com>
本文:
code:text
Event Source : db-instance
Identifier Link: https://console.aws.amazon.com/rds/home?region=ap-northeast-1#dbinstance:id={DB インスタンス ID}
SourceId: {DB インスタンス ID}
Notification time : 2023-12-14 11:17:56.501
Message : Database instance patched
Event ID : http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html#RDS-EVENT-0047
--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.ap-northeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn={SNSサブスクリプションARN}&Endpoint={SNSサブスクリプションエンドポイント}
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
メールが来ない場合は
CloudWatch Metrics でエラー系のメトリクスが出ていないか確認する
SourceType、EventCategories、Event ID が間違えていないか確認する
など
参考ページ
AWS
Amazon SNS
料金: https://aws.amazon.com/jp/sns/pricing/
Email/Email-JSON だと、
無料利用枠: 1,000 件の通知/月
料金: 2.00USD/10 万通知
サブスクリプションフィルターポリシーの書き方
フィルターポリシーの例
文字列値の一致
RDS イベントサブスクリプション
Amazon RDS または Amazon Redshift のメンテナンスウィンドウに関する通知を設定する方法を教えてください。
Amazon RDS のイベントカテゴリとイベントメッセージ
RDS イベントサブスクリプションの以下が一覧されている
ソースタイプ (SourceType)
イベントカテゴリ (EventCategories)
英語版の当ページのMessage が、以下とピッタリ同じなので、SNS サブスクリプションフィルターポリシー を書きたい場合は、EventIDを突き止めるのに良い。
RDS マネジメントコンソール > イベントページの「メッセージ」
AWS CLI > aws > rds > describe-events レスポンスの Message
Amazon RDS イベント通知の概要
Amazon RDS イベント、DB インスタンスイベント等のJSON形式の例が載っている
SNS サブスクリプションフィルターポリシーを書きたいときは、ここを見るとキー (e.g. EventID) がわかって良い
AWS CLI コマンドリファレンス > aws > rds > describe-events
通知したいイベントが、過去に実際に起来ている場合は、describe-events して見ると、以下ががパッとわかるので良い
SourceType (e.g. db-instance)
EventCategories (e.g. maintenance, configuration change, availability)
Message (e.g. Database instance patched, DB instance shutdown)
マネジメントコンソールから見る場合は Amazon RDS イベントの表示
Classmethod さん
アップデート Amazon RDS イベントサブスクリプションを通じた SNS イベントにメッセージ属性が含まれるようになりました
SNS トピックには同じエンドポイントを持つ SNS サブスクリプションを複数関連づけられない
他の方法
AWS Health 起点
【AWS Health】RDSメンテナンスなどのアカウント内イベントをメールに通知してみよう (Classmethodさん)
AWS Health → EventBridge → SNS → Email (SlackのEmail) → Slack
AWS Healthを活用し障害検知しよう (Serverworksさん)
AWS Health → EventBridge → SNS → AWS Chatbot → Slack
EC2 等のメンテナンススケジュールを AWS Chatbot で Slack に通知する (Serverworksさん)
AWS Health → EventBridge → SNS → AWS Chatbot → Slack
EC2やRDSのメンテナンス通知をSlackに連携する (Serverworksさん)
AWS Health → EventBridge (CloudWatch Events) → SNS → SlackのEmail → Slack