Merge pull request #142 feature-NEWDWH2021-659 into develop
This commit is contained in:
commit
5011e5b4bb
@ -1,37 +0,0 @@
|
||||
"use-strict";
|
||||
|
||||
const request = require("request-promise");
|
||||
exports.handler = (event, context, callback) => {
|
||||
const attaches = event.Records.map(evt => {
|
||||
return {
|
||||
"fallback":`Notification from mbj-newdwh2021 AWS: ${evt.EventSubscriptionArn}`,
|
||||
"pretext":`Notification from mbj-newdwh2021 AWS: ${evt.EventSubscriptionArn}`,
|
||||
"color":"#0000D0",
|
||||
"fields":[
|
||||
{
|
||||
"title": `${evt.Sns.Subject}`,
|
||||
"value": `${evt.Sns.Timestamp}: ${evt.Sns.Message} (MessageId: ${evt.Sns.MessageId})`,
|
||||
"short": false
|
||||
}
|
||||
]
|
||||
};
|
||||
});
|
||||
request({
|
||||
method: "POST",
|
||||
url: process.env.webhookurl,
|
||||
body: {
|
||||
attachments: attaches
|
||||
|
||||
},
|
||||
json: true
|
||||
}).then((body => {
|
||||
callback(null, `Request succeed. ${body}`);
|
||||
})).catch((err) => {
|
||||
callback("failed to request to slack.", {
|
||||
result: "ERROR",
|
||||
event: event,
|
||||
cause: `request failed. ${err}.`
|
||||
});
|
||||
})
|
||||
|
||||
};
|
||||
Binary file not shown.
@ -1,15 +0,0 @@
|
||||
{
|
||||
"name": "mbj-newdwh2021-staging-noticetoslack",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"request": "^2.88.2",
|
||||
"request-promise": "^4.2.6"
|
||||
}
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
const zlib = require("zlib");
|
||||
const aws = require("aws-sdk");
|
||||
const sns = new aws.SNS({
|
||||
apiVersion: "2010-03-31",
|
||||
region: 'ap-northeast-1'
|
||||
});
|
||||
|
||||
exports.handler = function(input, context) {
|
||||
var payload = new Buffer.from(input.awslogs.data, 'base64');
|
||||
zlib.gunzip(payload, function(e, result) {
|
||||
if (e) {
|
||||
context.fail(e);
|
||||
} else {
|
||||
result = JSON.parse(result.toString('UTF-8'));
|
||||
const publishMessage = {
|
||||
Subject: `Detect Error(or Warning) in ${result.logGroup}`,
|
||||
Message: result.logEvents.map((l) => l.message).join('\n'),
|
||||
TopicArn: process.env.topicArn
|
||||
};
|
||||
console.log(publishMessage);
|
||||
|
||||
sns.publish(publishMessage, (err, data) => {
|
||||
console.log(err, data);
|
||||
if(err){
|
||||
context.fail(err);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
Binary file not shown.
@ -1,15 +0,0 @@
|
||||
{
|
||||
"name": "mbj-newdwh2021-staging-publishfromlog",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"aws-sdk": "^2.1011.0",
|
||||
"zlib": "^1.0.5"
|
||||
}
|
||||
}
|
||||
49
lambda/notice-to-slack/notice_to_slack.py
Normal file
49
lambda/notice-to-slack/notice_to_slack.py
Normal file
@ -0,0 +1,49 @@
|
||||
import json
|
||||
import os
|
||||
import urllib.request as request
|
||||
|
||||
|
||||
def make_attaches(event):
|
||||
"""Slackのリクエストボディ attachmentsを作成する"""
|
||||
attachments = []
|
||||
for evt in event.get('Records'):
|
||||
sns_event = evt.get('Sns')
|
||||
event_subscription_arn = evt.get('EventSubscriptionArn')
|
||||
subject = sns_event.get('Subject', 'AWS Notification Message')
|
||||
sns_timestamp = sns_event.get('Timestamp')
|
||||
message = sns_event.get('Message')
|
||||
message_id = sns_event.get('MessageId')
|
||||
|
||||
attachments.append({
|
||||
"fallback": f"Notification from mbj-newdwh2021 AWS: {event_subscription_arn}",
|
||||
"pretext": f"Notification from mbj-newdwh2021 AWS: {event_subscription_arn}",
|
||||
"color":"#0000D0",
|
||||
"fields":[
|
||||
{
|
||||
"title": f"{subject}",
|
||||
"value": f"{sns_timestamp}: {message} (MessageId: {message_id})",
|
||||
"short": False
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
return attachments
|
||||
|
||||
|
||||
def lambda_handler(event, context):
|
||||
attachments = make_attaches(event)
|
||||
request_url = os.environ.get('SLACK_WEBHOOK_URL')
|
||||
payload = {
|
||||
'attachments': attachments
|
||||
}
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
print(payload)
|
||||
|
||||
req = request.Request(request_url, json.dumps(payload, ensure_ascii=False).encode(), headers, method='POST')
|
||||
|
||||
with request.urlopen(req) as res:
|
||||
body = res.read()
|
||||
|
||||
print(body)
|
||||
29
lambda/publish-from-log/publish_from_log.py
Normal file
29
lambda/publish-from-log/publish_from_log.py
Normal file
@ -0,0 +1,29 @@
|
||||
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)
|
||||
|
||||
publish_message = {
|
||||
'Subject': f'Detect Error(or Warning) in {log_event.get("logGroup")}',
|
||||
'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)
|
||||
Loading…
x
Reference in New Issue
Block a user