今回の課題
AWSのDMSが停止してしまった時に、
Slackにアラート通知を飛ばすシステムの構築を行うことにした。
AWSのLambdaとEventBridgeを使用した。
実装手順
以下の手順で、DMSが停止してしまったときにSlackに通知が飛ぶように実装した。
1)Lambda関数を作成
1)-1.Slackに通知を飛ばすコードを作成する
import json
import requests
import os
def send_slack_alert(type, title, text):
alert_channel = "[アラートを飛ばしたいSlackチャンネルのURLの末尾の10桁の文字列]"
mention_text = ""
alert_color = "#F30100"
WEB_HOOK_URL = "https://hooks.slack.com/services/*******************"
requests.post(WEB_HOOK_URL, data=json.dumps({
"channel": alert_channel,
"text" : mention_text,
"attachments": [{
"color": alert_color,
"text": text
}]
}))
def lambda_handler(event, context):
type = 'error'
title = 'DMSが停止した時のアラート'
text = 'DMSが停止しました。'
send_slack_alert(type, title, text)
return {
'statusCode': 200,
'body': json.dumps(target + 'stopped')
}
1)-2.EventBridgeのイベントを読み込む権限を与える
上記のLambda関数を作成すると、 [Lambda関数名]-role-********
というロールが同時に作成される。
そちらのロールに、 AmazonEventBridgeReadOnlyAccess
というポリシーを持たせる。
2)Eventbridgeでルールを作成する。
2)-1.ルールの詳細を定義
以下のページでルールの名前や説明を入力する。
ルールタイプは、イベントパターンを持つルールを選択する。
2)-2.イベントパターンを作成
次に進むと以下のようなページに飛ぶ。
ここで、DMSが停止するというイベントが発生した時に、
そのイベントを検知してくれる、イベントパターンを設定する。
イベントパターン作成の手順
上記のページで以下の手順で設定を行えば、
DMSが停止した時に検知イベントを検知するイベントパターンを設定することができる。
- 作成のメソッドをカスタムパターン(JSON エディタ) に指定する。
- 次にイベントパターンに、以下をペーストする。
{
"source": ["aws.dms"],
"detail-type": ["DMS Replication Task State Change"],
"region": ["ap-northeast-1"],
"detail": {
"eventType": ["REPLICATION_TASK_STOPPED"],
"category": ["StateChange"]
}
}
※サンプルイベントという項目で、検知したいイベントタイプを指定して、意図しているイベントを検知できているかテストをすることも可能です。
2)-3.ターゲットを指定する
次に進むと以下のような画面に遷移する。
機能という項目に、1)
で作成したLambdaの名前を選択してターゲットに指定する。
これによって、Slackにアラートを送るためのLambda関数のトリガーに、EventBridgeのルールが設定される。
DMSが停止した際に発生するREPLICATION_TASK_STOPPED
というイベントをeventBridgeのルールが検知するようになる。
あとは確認画面まで進み、ルールの作成をクリックすることで、DMS監視システムの構築が完了する。
まとめ
DMSのREPLICATION_TASK_STOPPED
というイベントを検知するEventBridgeのルールを作成して、
そちらをトリガーにLambdaが実行されるようにすることで、DMSが停止した時にSlackに通知が飛ぶようなシステムを構築することができた。
AWS EventBridgeでは、他にも色々なイベントパターンを検知することができそうなので、AWSの様々なリソースの動きを監視するのに便利そうだなと感じた。