1. はじめに
本記事では、AWSのCloudWatch Logsに収集されたログからエラーメッセージを検知し、その内容をメールで通知する方法について説明します。具体的には、AWS LambdaとAmazon SNSを組み合わせることで、エラーメッセージのメール通知を実現します。
2. 事前準備
- AWSアカウントを持っていること
- Amazon SNSのトピックを作成し、メールアドレスをサブスクライバとして追加しておくこと
3. Lambda関数の実装
まず、以下のコードを参考にして、Lambda関数を実装します。
import base64
import gzip
import json
import boto3
# Amazon SNS サービスのクライアントを初期化します
sns_client = boto3.client('sns')
# あらかじめ作成した SNS トピックのARNを指定します
SNS_TOPIC_ARN = "arn:aws:sns:region:account-id:topicname"
def lambda_handler(event, context):
# CloudWatch Logsのイベントデータはbase64エンコードされているので、デコードします
decoded_data = base64.b64decode(event['awslogs']['data'])
# デコードしたデータはgzip圧縮されているので、解凍します
uncompressed_data = gzip.decompress(decoded_data)
# 解凍したデータはJSON形式なので、Pythonの辞書として読み込みます
json_data = json.loads(uncompressed_data)
# logEventsにはログのイベントのリストが含まれています。ここでは最初のメッセージを取得します
message = json_data['logEvents'][0]['message']
# エラーメッセージを検知した場合、SNSトピックにメッセージを発行します
if "ERROR" in message:
publish_to_sns(message)
return message
def publish_to_sns(content):
# SNSトピックにメッセージを発行するための関数です
sns_client.publish(
TopicArn=SNS_TOPIC_ARN, # 送信先のSNSトピック
Message=content, # 送信するメッセージ内容
Subject='エラー通知' # メールの件名
)
4. Lambdaの実行ロールの設定
このLambda関数を動作させるためには、適切なIAMロールの権限が必要です。Lambdaの実行ロールに、以下の権限を持つポリシーをアタッチしてください。
- CloudWatch Logs の読み取り権限
- SNS トピックへのメッセージ発行権限
5. まとめ
本記事では、AWS LambdaとAmazon SNSを利用して、CloudWatch Logsのエラーメッセージを検知し、メールで通知する方法を紹介しました。適切な設定とコードの実装により、システムのエラーをリアルタイムで把握することが可能となります。
コメント