"""Lambda data-alarm-slack function module.""" from __future__ import print_function import json import logging import urllib import config from urllib.request import urlopen from urllib.error import HTTPError from urllib.error import URLError logger = logging.getLogger() logger.setLevel(logging.INFO) def handler(event, context): """Lambda entry point.""" logger.info('Event: ' + str(event)) for record in event['Records']: message = record['Sns']['Message'] logger.info('Message: ' + str(message)) alarm_name = message['AlarmName'] new_state = message['NewStateValue'] reason = message['NewStateReason'] slack_message = { 'channel': config.SLACK_CHANNEL, 'text': '%s state is now %s: %s' % (alarm_name, new_state, reason) } req = urllib.request.Request(config.HOOK_URL, json.dumps(slack_message) .encode('utf-8')) try: response = urlopen(req) response.read() logger.info('Message posted to %s', slack_message['channel']) except HTTPError as e: logger.error('Request failed: %d %s', e.code, e.reason) except URLError as e: logger.error('Server connection failed: %s', e.reason) return {'status': 'OK'}