반응형
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
반응형
'Ops > AWS' 카테고리의 다른 글
AWS Lambda to Slack (basic) - IAM role 생성 (0) | 2023.12.04 |
---|---|
AWS Lambda to Slack - process 요약 (이론) (0) | 2023.12.03 |
AWS Lambda Code - firehose peer (0) | 2023.12.01 |
AWS Lambda Code - 403 rewrite request (0) | 2023.11.30 |
AWS Lambda Code - 특정 region 요청 redirect (0) | 2023.11.29 |