import json, requests, os, boto3 def lambda_handler(event, context): if 'Records' in event: for record in event['Records']: if record['EventSource'] == "aws:sns": if "Message" in record['Sns']: message = json.loads(record['Sns']['Message']) if "NewStateValue" in message: print(message) is_important = "HighPriority" in message["AlarmName"] and (message["NewStateValue"] != "OK") send_message(message["NewStateReason"], "AWS Billing Alert", is_important) else: send_message(message, record['Sns']['Subject']) #------------------- # Messaging Methods #------------------- def send_discord_message(message, name = None, high_priority = False): if high_priority: send_discord_message("@everyone \n**HIGH PRIORITY:** " + message, name) return if "discordWebhook" in os.environ and os.environ["discordWebhook"] != "": r = requests.post(os.environ['discordWebhook'], data={'content': message, 'username': name}) print("Sent to Discord: " + message) else: print("Discord webhook not setup. Skipping...") def send_sns_message(message, name = "Billing Alert", high_priority = False): if high_priority: send_sns_message(message, "HIGH PRIORITY: " + name) return if 'snsTopic' in os.environ and os.environ["snsTopic"] != "": boto3.client('sns').publish( TargetArn=os.environ['snsTopic'], Message=json.dumps({'default':message, 'sms' : name +"\n---\n" + message}), Subject=name, MessageStructure='json' ) print("Published to SNS: " + message) else: print("SNS not setup. Skipping...") def send_slack_message(message, name = None, high_priority = False): if high_priority: send_slack_message(" \n*HIGH PRIORITY:* " + message, name) return if "slackWebhook" in os.environ and os.environ["slackWebhook"] != "": r = requests.post(os.environ['slackWebhook'], data=json.dumps({'text': message, 'username' : name}), headers={'Content-Type' : 'application/json'}) print("Sent to Slack: " + message) else: print("Slack webhook not setup. Skipping...") #Function sends message to every messaging method def send_message(message, name = None, high_priority = False): send_discord_message(message, name, high_priority) send_slack_message(message, name, high_priority) send_sns_message(message, name, high_priority) # os.environ['snsTopic'] = "arn:aws:sns:us-east-1:959431236163:BillingDev" # os.environ['slackWebhook'] = "https://hooks.slack.com/services/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" # os.environ['discordWebhook'] = "https://discordapp.com/api/webhooks/597128213373648900/Ys4iB0MCeJiwne_KSJIE_Q8geZluKsFYzQQ02GJIMp2fGka1-tx47ZmH0aTxbGVz6fJ6" # send_message("Test", "AWS Billing", True)