今回は自分が触れる機会の多いAWSのサービスを使用して運用の際などで利用できる通知方法の一つをご紹介します。
#使用サービス
- Lambda
- CloudWatch
- Slack
#実装フロー
1.Lambda関数からCloudWatch Logsへログを出力
2.CloudWatch Logsから指定した文字列を検知
3.検知された文字列をトリガーにSlack通知用のLambda関数を発火
4.通知用LambdaでSlackへ文字列を通知
#フロー詳細
実際に上記のフローで実装していきます。
手順1
今回は「test」という文字列でCloudWatch Logsへ出力します。
手順2
文字列検知にCloudWatch Logsのサブスクリプションフィルター(Lambda)を使用していきます。
手順3
通知用Lambda関数とログ形式およびフィルターパターンを設定します
手順4
環境変数「WebhookURL」には通知したいslackのWebhook URLを設定しています。
import json
import os
import urllib.request
import slackweb
def lambda_handler(event, context):
decoded_data = zlib.decompress(
base64.b64decode(event['awslogs']['data']),
16+zlib.MAX_WBITS
)
json_data = json.loads(decoded_data)
print(json_data['logEvents'])
for i in json_data['logEvents']:
test = i['message'] # ログの内容
slack = slackweb.Slack(url=os.environ['WebhookURL'])
slack.notify(text=test)
先ほど設定した文字列を検知してslackに通知されることを確認しました。
#まとめ
上記以外にも通知方法は複数ありますが、なるべく簡潔にまとめていった方が管理しやすいので簡略化できるところはどんどん楽にしていきたいですね。