前回 Aurora のスロークエリを Slack に通知できるようにしました。
今回は Failover(フェイルオーバー)などの DB クラスターで発生したイベントを Slack に通知できるようにしてみたいと思います。
Webhook URL の発行
前回 Slack の Webhook URL を用意した時と同様に Slack の Incoming Webhooks のページから Webhook URL を発行してください。
この後に作成する Lambda で Slack の Webhook URL を使用します。
IAM ロールの作成
Lambda に設定する IAM ロールを作成します。
- ロール名:rds-event-to-slack-role
- このロールを使用するサービスを選択:Lambda
- ポリシー:AWSLambdaBasicExecutionRole
として作成します。
Lambda の作成
一から作成を選択し、
- 名前:rds-event-to-slack
- ランタイム:Python 3.7
- ロール:既存のロールを選択
- 既存のロール:rds-event-to-slack-role
として作成します。
関数コードはこちらです。
import os import json import logging from datetime import datetime, timedelta from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError Slack_Webhook_URL = os.environ['SLACK_WEBHOOK_URL'] logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): message = json.loads(event['Records'][0]['Sns']['Message']) slack_message = { 'text': '*New AWS RDS Events* in %s' % (message['Source ID']), 'attachments': [ { 'color': '#36464f', 'title': message['Source ID'], 'title_link': message['Identifier Link'], 'text': message['Event Message'], 'footer': 'Amazon RDS', 'ts': datetime.strptime(message['Event Time'][:-4], '%Y-%m-%d %H:%M:%S').timestamp() } ] } req = Request(Slack_Webhook_URL, json.dumps(slack_message).encode('utf-8')) try: response = urlopen(req) response.read() logger.info('Message posted to %s', Slack_Webhook_URL) except HTTPError as e: logger.error('Request failed: %d %s', e.code, e.reason) except URLError as e: logger.error('Server connection failed: %s', e.reason)
環境変数にはキーを SLACK_WEBHOOK_URL にし、値には先ほど発行した Slack の Webhook URL を設定します。
これで Lambda の作成は完了です。
トピックの作成
Simple Notification Service(SNS)に移動し、トピックの作成を選択し、
- トピック名:rds-event-to-slack-topic
で作成します。
イベントサブスクリプションの作成
RDS の画面に戻り、イベントサブスクリプションに移動し、
- 名前:rds-event-to-slack-subscription
- 通知の送信先:ARN
- ARN:rds-event-to-slack-topic
- ソースタイプ:DB クラスター
- Db クラスター を含める:すべての db クラスター
- 含まれるイベントのカテゴリ:すべてのイベントカテゴリ
でイベントサブスクリプションを作成します。
『Db クラスター を含める』と『含まれるイベントのカテゴリ』の項目で対象の DB クラスターやイベントを選択できますので、絞り込みたい場合はこちらで適当なものを選択してください。
私の場合はイベントサブスクリプションのステータスが作成中からアクティブになるまでは 3 分ほどかかりました。
サブスクリプションの作成
SNS の画面に戻り、下の画像のように先ほど作成したトピックの ARN の部分のリンクを選択し、トピックの詳細に移動します。
移動したらサブスクリプションの作成を選択し、
としてサブスクリプションを作成します。
作成が完了すると下の画像のように作成したサブスクリプションが確認できるかと思います。
動作確認
ブラウザからフェイルオーバーさせることができるので、実際にフェイルオーバーさせて Slack に通知されるか確認してみます。
RDS のインスタンス一覧に移動し、フェイルオーバーさせたい DB クラスターに所属するインスタンスを選択し、インスタンスの操作からフェイルオーバーを選択します。
実際にイベントが発行されているかどうかは画面左側のイベントのリンクからイベント一覧を表示することで確認できます。
Slack に通知されるまでは 3 分ほどタイムラグがあるので、少し待ちましょう。
これで Aurora で発生した DB クラスターのイベントを Slack に通知できるようになりました!
- 作者: 株式会社日本レジストリサービス(JPRS)渡邉結衣、佐藤新太、藤原和典,森下泰宏
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/11/22
- メディア: 単行本
- この商品を含むブログを見る
Amazon Web Services エンタープライズ基盤設計の基本
- 作者: 堀内康弘,三浦美緒
- 出版社/メーカー: 日経BP社
- 発売日: 2018/10/04
- メディア: 単行本
- この商品を含むブログを見る