CloudWatchLogsの特定の文字列を含むログをSlackに転送する -前編-


slack apiにアクセスしてアプリを作成

botの作成の仕方やslackへのメッセージ投稿の仕方は以下の記事で紹介しています。

Pythonのコードのディレクトリ構造

ディレクトリ構造は以下のようになっています

ディレクトリ構造
sendLogToSlack
├── lambda_function.py
├── postslack.py
└── slack_sdk

slack_sdkのインストール

slack_sdkはlambdaの標準モジュールではないので、
pipでインストールしてからzipでパッケージ化する必要があります。

slack_sdkをパッケージに含める
mkdir sendLogToSlack
cd sendLogToSlack
pip install slack_sdk -t ./ 

lambda_function.py

lambda_function.py
import zlib
import base64
import postslack
import json

def lambda_handler(event, context):
    data = zlib.decompress(base64.b64decode(event['awslogs']['data']), 16+zlib.MAX_WBITS)
    data_json = json.loads(data)
    log_json = json.loads(json.dumps(data_json["logEvents"][0], ensure_ascii=False))
    postslack.SendSlackMessage(str(log_json))

こちらの記事を参考にさせて頂きました。

postslack.py

postslack.py
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

def SendSlackMessage(message):
    client = WebClient(token='your_token') 
    response=client.chat_postMessage(channel='your_channel', text=message)

slack_sdkの使い方に関してはこちらの記事で紹介しています。

パッケージ化

lambdaにアップロードする為にzipコマンドでパッケージ化します。

sendLogToSlack
zip -r sendslack *

lambdaにアップロード

続き

ここまで出来れば残りの作業はもう少しです。
CloudWatchLogsの特定の文字列を含むログをSlackに転送する-後編-に続きます。