「CloudWatch」でEC2を監視しアラームが発生すれば「Slack」に通知方法について学習をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。
事前にやっておくこと
・Slackのアカウントを作成
・通知する「チャンネル」を作成
学習内容
対象のEC2インスタンスを「CloudWatch」で監視し、「Lambda関数」でアラームが発生すればSlackにアラームが発生したことを通知します。
Lambda関数の作成
検索で「Lambda」>「関数の作成」をクリック
一から作成
関数名:任意の名前
ランタイム:Python3.8
アーキテクチャ:x86_64
上記を設定し作成。
作成後、作成した「Lambda関数」の詳細に入り「コードタブ」の「pyファイル」に以下の記載しました。
import urllib3
import json
http = urllib3.PoolManager()
def lambda_handler(event, context):
url = "【SlackのWebhook URL】"
msg = {
"channel": "【#作成したチャンネル名】",
"username": "WEBHOOK_USERNAME",
"text": event["Records"][0]["Sns"]["Message"],
"icon_emoji": "",
}
encoded_msg = json.dumps(msg).encode("utf-8")
resp = http.request("POST", url, body=encoded_msg)
print(
{
"message": event["Records"][0]["Sns"]["Message"],
"status_code": resp.status,
"response": resp.data,
}
)
コードを入れ込み・【】内の変更を行い「deploy」で保存
上記の記載のコードはこちらを参考にしました。
「Webhook URL」の発行に関しては割愛させていただきますのでご自身で検索お願いします。
テストアラームが通知されるか確認
「Test」をクリックし以下を設定
イベント名:任意の名前
テンプレート-オプション:sns-notification
設定後に「Test」をクリックしSlackに通知されている事を確認します。
example message
のテキストでSlackに通知が来ていることが確認できました。
SNS作成
検索でSNSに入り、「トピック」>「トピックの作成」をクリックし以下を設定し作成します。
タイプ:スタンダード
名前:任意の名前
表示名:任意の名前
上記設定後、作成します。
作成した「トピック詳細」に入り「サブスクリプション」>「サブスクリプションの作成」をクリックし以下を設定します。
プロトコル:Lambda
エンドポイント:関数のARN
→検索で「Lambda」に入り「関数」> 先程作成した「Lambda関数詳細」の「関数の概要」の右に表示してある「関数のARN」をコピーします。
作成しステータスが「確認済み」になっていれば「トピックの作成(1)」完了です。
CloudWatchのアラームの作成
検索で「Cloudwatch」に入り「アラーム」>「アラームの作成」をクリックし以下を設定します。
メトリクス:対象のインスタンスのお好みのメトリクスを設定
条件:
→しきい値の種類:静的
→CPUUtilization が次の時...:以上
→... よりも:0
通知:
→アラーム状態トリガー:OK
→既存のSNSトピックを選択:作成したトピック(1)
通知の追加:
→アラーム状態トリガー:アラーム状態
→既存のSNSトピックを選択:作成したトピック(1)
アラーム名:任意の名前(通知で分かりやすいように今回は「test-error-alarm」)
上記の設定が完了しましたら「アラームの作成」で完了です。
「作成したアラーム」の「状態」が「アラーム状態」になっていることを確認した後Slackを確認します。
{"AlarmName":"test-error-alarm","AlarmDescription":....以下省略
「Slack」に上記のアラームの通知が確認されましたので今回の学習は完了になります。
さいごに
EC2インスタンスを「CloudWatch」で監視し、「Lambda関数」でアラームが発生すればSlackにアラームが発生したことを通知を設定することにより、常にインスタンスを監視する手間が省け他の業務などに注力できますので活用すると時間・手間効率が良いとても便利な機能と思いました。
Slackの他にも「チャットワーク」,「Microsoft Teams」などのほかのアプリケーションの通知の設定もございますので色々活用の幅が広がると感じました。
「Lambda関数」に記述したコードを変更することにより通知される内容も変更できますので変数も勉強したいと思います。
アラーム通知以外にも「Lambdaで何かをする」機能は他にもできますのでもっとLambdaを学習をし活用したいと思います。
「Lambda」はコードの実行されたときに起動するものなので、継続で起動している料金とは異なり「使用した分の料金が発生」ですのでコスト的にも良いと思いました。
Lambdaの料金についてはこちらを参考にしてください。
最後まで読んでいただいた方、ありがとうございました。