diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e4f6d9fb --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +lambda/mbj-newdwh2021-staging-NoticeToSlack/package-lock.json +lambda/mbj-newdwh2021-staging-NoticeToSlack/node_modules/* +lambda/mbj-newdwh2021-staging-PublishFromLog/package-lock.json +lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/* \ No newline at end of file diff --git a/lambda/mbj-newdwh2021-staging-NoticeToSlack/index.js b/lambda/mbj-newdwh2021-staging-NoticeToSlack/index.js new file mode 100644 index 00000000..5c0a7226 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-NoticeToSlack/index.js @@ -0,0 +1,37 @@ +"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}.` + }); + }) + +}; diff --git a/lambda/mbj-newdwh2021-staging-NoticeToSlack/mbj-newdwh2021-staging-NoticeToSlack.zip b/lambda/mbj-newdwh2021-staging-NoticeToSlack/mbj-newdwh2021-staging-NoticeToSlack.zip new file mode 100644 index 00000000..53f0c160 Binary files /dev/null and b/lambda/mbj-newdwh2021-staging-NoticeToSlack/mbj-newdwh2021-staging-NoticeToSlack.zip differ diff --git a/lambda/mbj-newdwh2021-staging-NoticeToSlack/package.json b/lambda/mbj-newdwh2021-staging-NoticeToSlack/package.json new file mode 100644 index 00000000..1495f188 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-NoticeToSlack/package.json @@ -0,0 +1,15 @@ +{ + "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" + } +} diff --git a/lambda/mbj-newdwh2021-staging-PublishFromLog/index.js b/lambda/mbj-newdwh2021-staging-PublishFromLog/index.js new file mode 100644 index 00000000..43d38b93 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-PublishFromLog/index.js @@ -0,0 +1,30 @@ +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: `Application Error(or Warning) in ${result.logGroup}/${result.logStream}`, + 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('fail'); + } + }); + } + }); +}; \ No newline at end of file diff --git a/lambda/mbj-newdwh2021-staging-PublishFromLog/mbj-newdwh2021-staging-PublishFromLog.zip b/lambda/mbj-newdwh2021-staging-PublishFromLog/mbj-newdwh2021-staging-PublishFromLog.zip new file mode 100644 index 00000000..4f18eeef Binary files /dev/null and b/lambda/mbj-newdwh2021-staging-PublishFromLog/mbj-newdwh2021-staging-PublishFromLog.zip differ diff --git a/lambda/mbj-newdwh2021-staging-PublishFromLog/package.json b/lambda/mbj-newdwh2021-staging-PublishFromLog/package.json new file mode 100644 index 00000000..1e0d12e7 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-PublishFromLog/package.json @@ -0,0 +1,15 @@ +{ + "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" + } +}