본문 바로가기

Ops/AWS

AWS Lambda Code - infra noti

반응형

AWS Lambda Code - infra noti

 

 

 

 

 

# Python 3.7

import boto3
import json
import logging
import os

from base64 import b64decode
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError


# The base-64 encoded, encrypted key (CiphertextBlob) stored in the kmsEncryptedHookUrl environment variable
ENCRYPTED_HOOK_URL = os.environ['kmsEncryptedHookUrl']
# The Slack channel to send a message to stored in the slackChannel environment variable
SLACK_CHANNEL = os.environ['slackChannel']

HOOK_URL = "https://" + boto3.client('kms').decrypt(
    CiphertextBlob=b64decode(ENCRYPTED_HOOK_URL),
    EncryptionContext={'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}
)['Plaintext'].decode('utf-8')

logger = logging.getLogger()
logger.setLevel(logging.INFO)


def lambda_handler(event, context):
    logger.info("Event: " + str(event))
    message = json.loads(event['Records'][0]['Sns']['Message'])
    logger.info("Message: " + str(message))

    if 'AlarmName' in message :
        alarm_name = message['AlarmName']
        #old_state = message['OldStateValue']
        new_state = message['NewStateValue']
        reason = message['NewStateReason']
        color = '#00E200'
        if new_state == 'ALARM':
            color = '#FF0000'
        slack_message = {
            'channel': SLACK_CHANNEL,
            'pretext': "%s state - %s" %(alarm_name, new_state),
            'color': color,
            'text': "%s state is now %s: %s" % (alarm_name, new_state, reason)
        }
    else :
        detail_type = message['detail-type']
        service = message['source']
        resource = message['resources']
        description = message['detail']['Description']
        #status_code = message['detail']['StatusCode']
        color = '#00E200'
        slack_message = {
            'channel': SLACK_CHANNEL,
            'pretext': "%s state - %s" %(service, detail_type),
            'text': "resource : %s, \ndescription : %s" % (resource, description)
        }

    req = Request(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)

 

 

 


by mkdir-chandler


 

 

 

 

 

728x90
반응형