Amazon RDS のマイナーバージョンアップグレードをSlackに通知する
最終更新日: 2023/12/14
やりたいこと
Amazon RDS メンテナンスウィンドウ中ににマイナーバージョンアップグレードが適用されたら Slack に通知したい 低コストで (工数的にも料金的にも)
流れ
RDSイベントサブスクリプション → SNS → Email (SlackのEmail) → Slack わたしたちのこの使い方なら無料枠でいける想定 (今すでにあるもの以外に追加料金はかからない)
Slack に直接ポストしたい場合は AWS Chatbot を挟めば良いらしい
手順
タイプ: スタンダード
名前: 任意
ターゲット: 1のトピック
ここで新しい E メールトピックを選ぶと1の SNS トピックと3の SNS サブスクリプションもいっしょに作ることができる。この場合1のステップは不要、3は4の Confirm subscription 後にサブスクリプションフィルターポリシーの編集のみを行う。
ソースタイプ: インスタンス
インスタンス: イベントを拾いたいインスタンスの識別子
イベントカテゴリ: maintenance
プロトコル: EMAIL
エンドポイント: ポスト先Slack部屋のEmail
フィルターポリシーのスコープ: メッセージ属性
サブスクリプションフィルターポリシー:
code:json
{
"EventID": [
"RDS-EVENT-0047" // Database instance patched
]
}
メンテナンスウィンドウでマイナーバージョンアップが適用された場合、EventID は RDS-EVENT-0047
試していないが、おそらく手動でマイナーバージョンアップ (「すぐに適用」を選んだ場合) した場合も同じでは
ちなみに、ほかにどんなイベントが同じくRDS-EVENT-0047 なのかはわかっていない
マイナーバージョンアップだけなのか、ほかにもRDS-EVENT-0047になるイベントがあるのか...
Amazon SNS のサブスクリプション のエンドポイントに指定した EMAIL に Confirmメールがくるので、Confirm subscription する。 → ステータスが「確認済み」に変わる。
送られてくるメール例
件名: RDS Notification Message
送信元: AWS Notifications <no-reply@sns.amazonaws.com>
本文:
code:text
Event Source : db-instance
SourceId: {DB インスタンス ID}
Notification time : 2023-12-14 11:17:56.501
Message : Database instance patched
--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
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
Email/Email-JSON だと、
無料利用枠: 1,000 件の通知/月
料金: 2.00USD/10 万通知
サブスクリプションフィルターポリシーの書き方
RDS イベントサブスクリプション
RDS イベントサブスクリプションの以下が一覧されている
ソースタイプ (SourceType)
イベントカテゴリ (EventCategories)
英語版の当ページのMessage が、以下とピッタリ同じなので、SNS サブスクリプションフィルターポリシー を書きたい場合は、EventIDを突き止めるのに良い。
Amazon RDS イベント、DB インスタンスイベント等のJSON形式の例が載っている
SNS サブスクリプションフィルターポリシーを書きたいときは、ここを見るとキー (e.g. EventID) がわかって良い
通知したいイベントが、過去に実際に起来ている場合は、describe-events して見ると、以下ががパッとわかるので良い
SourceType (e.g. db-instance)
EventCategories (e.g. maintenance, configuration change, availability)
Message (e.g. Database instance patched, DB instance shutdown)
Classmethod さん
他の方法
AWS Health 起点
AWS Health → EventBridge → SNS → Email (SlackのEmail) → Slack
AWS Health → EventBridge → SNS → AWS Chatbot → Slack
AWS Health → EventBridge → SNS → AWS Chatbot → Slack
AWS Health → EventBridge (CloudWatch Events) → SNS → SlackのEmail → Slack