import base64 import gzip import json import os from io import BytesIO import boto3 sns_client = boto3.client('sns') def lambda_handler(event, context): awslogs_dict = event.get('awslogs') base64_data = awslogs_dict.get('data') try: decoded_gzip_data = base64.b64decode(base64_data) except Exception as e: raise e log_event_str = gzip.GzipFile(fileobj=BytesIO(decoded_gzip_data)).read() log_event = json.loads(log_event_str) # SNSのSubjectパラメータは100文字までという制限があるため、100文字に切り出す subject = f'Detect Error(or Warning) in {log_event.get("logGroup")}' subject = subject[:97] + '...' if len(subject) > 100 else subject publish_message = { 'Subject': subject, 'Message': '\n'.join([log.get('message') for log in log_event.get('logEvents')]), 'TopicArn': os.environ.get('SNS_TOPIC_ARN') } print(publish_message) sns_client.publish(**publish_message)