【AWS】LambdaでCloudWatchログをデコードしようとして手間取った話
とあるLambda(複数)を監視して、タイムアウトエラーが発生したらslack通知する力技構成を作成中のこと。
※構成の詳細は以下。
slack通知用Lambdaのトリガに、CloudWatch Logsを選択。
対象ログはタイムアウトエラー検出対象となる Lambda のログ。
メトリクスフィルターとして文字列「Task timed out after」を設定。
タイムアウトエラー検出したい Lambda でタイムアウトエラーが起こればslackへ通知される仕組み。
トリガであるCloudWatch Logsのログデータから Lambda 関数名拾おうと思ったら、まずログをデコードしないといけないっぽい。
下記のページを見つけて、これだ!!と思ったのも束の間、Python3とはコードの差分があるみたい。
結局は以下のようにデコード。めでたし、めでたし。
def lambda_handler(event, context): json_decode_data = decode_function(event['awslogs']['data']); print(json_decode_data); #デコードできていることを確認。 logGroup_name = json_decode_data['logGroup'].rsplit("/", 1) lambda_function_name = logGroup_name[1] #ここでLambda関数名を取り出す # CloudWatch Logsデータのデコード処理をする関数 def decode_function(data): # Base64デコードして解凍してデータを取得する decoded_data = base64.b64decode(data) json_data = json.loads(gzip.GzipFile(fileobj=BytesIO(decoded_data)).read()) return json_data
そもそもだけど他によい通知方法あれば知りたいなあ。