CloudWatchアラームをLINEに投げてみた
AWS CloudWatchアラームをLINE Notifyを使用して、LINEに通知できる仕組みを構築してみました
使用ツール
今回活躍してくれるツールはこの二つです
・LINE Notify
・AWS Lambda
手順
①LINE Notifyの設定
1.https://notify-bot.line.me/ja/にアクセス、自分のLINEアカウントを使ってログインしてマイベージへGO!
2.トークンを発行するをクリック
3.トークン名、通知を送信するトークルームを指定し、発行するをクリック
グループにだって通知できちゃいます!
4.表示されたトークンを φ(・ω・ )かきかき
5.自分のLINEにトークン発行しましたとかなんとかっていう通知が届くはず
LINE Notifyを友達登録する必要あるかも
この記事を書いたのが一回検証し終えた後だったので、忘れました(笑)
②SNSの設定
1.SNSコンソールの左ペインにあるTopicsをクリックし、Create new topicをクリック
2.Topic nameに適当な名前を入力し、Create topicをクリック
③CloudWatchの設定
1.CloudWatchコンソールの左ペインにあるアラームをクリックし、アラームの作成をクリック
2.好きなメトリクスを選択し、次へをクリック
ここではテスト用に作成したカスタムメトリクスを選択します
3.アクションの通知の送信先に②で作成したTopicsを指定
名前や判定条件はお好みで
④Lambdaの設定
Lambda関数作成のときって
・Lambdaのコンソールで直接コードを記述
・コードをローカル端末からアップロード
・コードをS3からアップロード
この三つがあるんですが、コードで外部モジュールを使っている場合はそれごとアップロードする必要があるので、↑の下二つの方法どちらかでする必要があります
今回私はPythonでコード書いているんですが、そのコードの中でHTTP POSTをするのにrequestsという外部モジュールを使っていた為、アップロードの方法を取ってます
④の手順は結構色々やり方あると思うので、私が紹介する手順はその中の一つになると思います
1.EC2上のLinuxサーバにログイン
2.作業用ディレクトリの作成
mkdir line_alarm
3.作業ディレクトリに移動
cd line_alarm
4.ライブラリのインストール
tオプションをつけることで、ライブラリのインストール場所を指定
今回はカレントディレクトリ(line_alarm)にインストール
pip install requests -t .
5.Lambda関数の作成
ファイル名は lambda_function.py
関数名は lambda_handler
ファイル名と関数名は後で使用するのでφ(・ω・ )かきかき
別にファイル名と関数名が、これでないといけない理由はないけど、Lambadaの設定する際に、ハンドラっていう項目の初期値と一致するから
この方が楽かも
vi lambda_function.py
#coding:UTF-8
import requests
def lambda_handler(event, context):
url = "https://notify-api.line.me/api/notify"
token = "CH9wwDm7N6zt2WooZoorKccgMT06rkdYbLVbduXCJ2D"
message = "test"
stickerPackageId = 2
stickerId = 144
headers = {"Authorization": "Bearer " + token}
payload = {"message" : message , "stickerPackageId" : stickerPackageId, "stickerId" :stickerId}
r = requests.post(url, headers = headers, data = payload)
変数補足
・url
→このままでオネシャス
・token
→①でメモったやつを代入
・message
→LINEで通知したいメッセージを代入
・stickerPackageId&stickerId
→LINEで通知したいスタンプを指定する番号を代入
番号はhttps://devdocs.line.me/files/sticker_list.pdfを参照
ちなみにstickerPackageId = 2 stickerId = 144だと↓のスタンプになる
6.zipで圧縮
zip コマンドを使ってline_alarm内のすべてのファイルを圧縮する
そう麻呂が大好きなzipです
zip -r LINE_Alarm.zip *
7.zipファイルをS3にアップロード
AWS CLIを使ってアップロードを行うんですが、CLIの設定は省きます(´・ω・`)
8.Lambdaコンソールの左ペインの関数をクリックし、Lambda関数の作成をクリック
9.Blank Functionを選択
10.トリガーをSNS、SNSトピックを②で作ったやつを指定、トリガーの有効化にチェックを入れ、次へをクリック
11.名前を適当に入力、ランタイムをPython 3.6にし、コードエントリタイプでアップロード方法を指定
なんか今回S3からのアップロードが上手く行かなかったので、ローカルからアップロードしました(笑)
12.ハンドラはデフォルトで、ロールをテンプレートから新しいロールを作成、ロール名を適当に入力し、次へをクリック
ちなみに④-5で作成した関数名とファイル名をハンドラと一致させる必要あります
13.関数の作成をクリック
⑤アラートテスト
1.Lambdaコンソールの左ペインの関数をクリックし、④で作成した関数を選択し、アクション→関数のテストをクリック
2.サンプルイベントテンプレートをSNSにし、保存してテストをクリック
コードが正しければ、自分のLINEに通知が届きます
3.③で作ったアラートが警告状態になった時に正常にLINEに通知されるか確認
このアラートで使っているカスタムメトリクスは既に作ってあったスクリプトを何回か叩くと、警告状態になるようにしてあります
アラートの状態が現在はデータ不足の状態
この状態ではLINEに通知は飛びません
スクリプト実行
アラートの状態が警告に変わったと同時にLINEに通知が届きました
検証結果
LINE Notifyは簡単にLINEに通知を送れるサービスですね
今回はCloudWatchのアラートを飛ばしましたが、いくらでも応用できそうですね
ちなみに私は、AWSの利用料金閾値オーバで通知が飛ぶようにしています
通知の内容に芸がないのは許してください
しかも通知内容に誤字あるし(笑)