@gammarers/aws-log-stream-event-notification-stack
Version:
This AWS CDK construct stack subscribes to a CloudWatch Logs log stream, and when a target log level is detected, it sends the log information to a Step Functions state machine via a Lambda function. The state machine processes and formats the log informa
46 lines • 7.83 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LogStreamEventNotificationStack = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_log_stream_event_notifier_1 = require("@gammarers/aws-log-stream-event-notifier");
const aws_log_stream_event_trigger_1 = require("@gammarers/aws-log-stream-event-trigger");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const logs = require("aws-cdk-lib/aws-logs");
const destinations = require("aws-cdk-lib/aws-logs-destinations");
const sns = require("aws-cdk-lib/aws-sns");
const subscriptions = require("aws-cdk-lib/aws-sns-subscriptions");
class LogStreamEventNotificationStack extends aws_cdk_lib_1.Stack {
constructor(scope, id, props) {
super(scope, id, props);
// 👇 SNS Topic for notifications
const topic = new sns.Topic(this, 'NotificationTopic');
// 👇 Subscribe an email endpoint to the topic
const emails = props?.notification?.emails ?? [];
for (const email of emails) {
topic.addSubscription(new subscriptions.EmailSubscription(email));
}
const trigger = new aws_log_stream_event_trigger_1.LogStreamEventTrigger(this, 'LogStreamEventTrigger');
new aws_log_stream_event_notifier_1.LogStreamEventNotifier(this, 'LogStreamEventNotifier', {
notificationTopic: topic,
requestFunction: trigger.logStreamSubscriptionFilterDestinationFunction,
});
const logGroupNames = props?.logGroupNames ?? [];
for (const logGroupName of logGroupNames) {
const prefix = logGroupName
.split('/')
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLocaleLowerCase())
.join('');
const logGroup = logs.LogGroup.fromLogGroupName(this, `${prefix}LogGroup`, logGroupName);
new logs.SubscriptionFilter(this, `${prefix}LogGroupSubscription`, {
logGroup,
destination: new destinations.LambdaDestination(trigger.logStreamSubscriptionFilterDestinationFunction),
filterPattern: logs.FilterPattern.any(logs.FilterPattern.stringValue('$.level', '=', 'ERROR'), logs.FilterPattern.stringValue('$.level', '=', 'WARN')),
});
}
}
}
exports.LogStreamEventNotificationStack = LogStreamEventNotificationStack;
_a = JSII_RTTI_SYMBOL_1;
LogStreamEventNotificationStack[_a] = { fqn: "@gammarers/aws-log-stream-event-notification-stack.LogStreamEventNotificationStack", version: "1.0.31" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBa0Y7QUFDbEYsMEZBQWdGO0FBQ2hGLDZDQUFnRDtBQUNoRCw2Q0FBNkM7QUFDN0Msa0VBQWtFO0FBQ2xFLDJDQUEyQztBQUMzQyxtRUFBbUU7QUFZbkUsTUFBYSwrQkFBZ0MsU0FBUSxtQkFBSztJQUN4RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRDO1FBQ3BGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLGlDQUFpQztRQUNqQyxNQUFNLEtBQUssR0FBYyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFbEUsOENBQThDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxhQUFhLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxvREFBcUIsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUV6RSxJQUFJLHNEQUFzQixDQUFDLElBQUksRUFBRSx3QkFBd0IsRUFBRTtZQUN6RCxpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGVBQWUsRUFBRSxPQUFPLENBQUMsOENBQThDO1NBQ3hFLENBQUMsQ0FBQztRQUVILE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ2pELEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFLENBQUM7WUFFekMsTUFBTSxNQUFNLEdBQUcsWUFBWTtpQkFDeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDVixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztpQkFDN0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRVosTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUV6RixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLHNCQUFzQixFQUFFO2dCQUNqRSxRQUFRO2dCQUNSLFdBQVcsRUFBRSxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsOENBQThDLENBQUM7Z0JBQ3ZHLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FDdkQ7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBRUgsQ0FBQzs7QUF4Q0gsMEVBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nU3RyZWFtRXZlbnROb3RpZmllciB9IGZyb20gJ0BnYW1tYXJlcnMvYXdzLWxvZy1zdHJlYW0tZXZlbnQtbm90aWZpZXInO1xuaW1wb3J0IHsgTG9nU3RyZWFtRXZlbnRUcmlnZ2VyIH0gZnJvbSAnQGdhbW1hcmVycy9hd3MtbG9nLXN0cmVhbS1ldmVudC10cmlnZ2VyJztcbmltcG9ydCB7IFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBkZXN0aW5hdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MtZGVzdGluYXRpb25zJztcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIHN1YnNjcmlwdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucy1zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldE5vdGlmaWNhdGlvbiB7XG4gIHJlYWRvbmx5IGVtYWlscz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ1N0cmVhbUV2ZW50Tm90aWZpY2F0aW9uU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICByZWFkb25seSBub3RpZmljYXRpb24/OiBUYXJnZXROb3RpZmljYXRpb247XG4gIHJlYWRvbmx5IGxvZ0dyb3VwTmFtZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nU3RyZWFtRXZlbnROb3RpZmljYXRpb25TdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBMb2dTdHJlYW1FdmVudE5vdGlmaWNhdGlvblN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIPCfkYcgU05TIFRvcGljIGZvciBub3RpZmljYXRpb25zXG4gICAgY29uc3QgdG9waWM6IHNucy5Ub3BpYyA9IG5ldyBzbnMuVG9waWModGhpcywgJ05vdGlmaWNhdGlvblRvcGljJyk7XG5cbiAgICAvLyDwn5GHIFN1YnNjcmliZSBhbiBlbWFpbCBlbmRwb2ludCB0byB0aGUgdG9waWNcbiAgICBjb25zdCBlbWFpbHMgPSBwcm9wcz8ubm90aWZpY2F0aW9uPy5lbWFpbHMgPz8gW107XG4gICAgZm9yIChjb25zdCBlbWFpbCBvZiBlbWFpbHMpIHtcbiAgICAgIHRvcGljLmFkZFN1YnNjcmlwdGlvbihuZXcgc3Vic2NyaXB0aW9ucy5FbWFpbFN1YnNjcmlwdGlvbihlbWFpbCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWdnZXIgPSBuZXcgTG9nU3RyZWFtRXZlbnRUcmlnZ2VyKHRoaXMsICdMb2dTdHJlYW1FdmVudFRyaWdnZXInKTtcblxuICAgIG5ldyBMb2dTdHJlYW1FdmVudE5vdGlmaWVyKHRoaXMsICdMb2dTdHJlYW1FdmVudE5vdGlmaWVyJywge1xuICAgICAgbm90aWZpY2F0aW9uVG9waWM6IHRvcGljLFxuICAgICAgcmVxdWVzdEZ1bmN0aW9uOiB0cmlnZ2VyLmxvZ1N0cmVhbVN1YnNjcmlwdGlvbkZpbHRlckRlc3RpbmF0aW9uRnVuY3Rpb24sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2dHcm91cE5hbWVzID0gcHJvcHM/LmxvZ0dyb3VwTmFtZXMgPz8gW107XG4gICAgZm9yIChjb25zdCBsb2dHcm91cE5hbWUgb2YgbG9nR3JvdXBOYW1lcykge1xuXG4gICAgICBjb25zdCBwcmVmaXggPSBsb2dHcm91cE5hbWVcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgY29uc3QgbG9nR3JvdXAgPSBsb2dzLkxvZ0dyb3VwLmZyb21Mb2dHcm91cE5hbWUodGhpcywgYCR7cHJlZml4fUxvZ0dyb3VwYCwgbG9nR3JvdXBOYW1lKTtcblxuICAgICAgbmV3IGxvZ3MuU3Vic2NyaXB0aW9uRmlsdGVyKHRoaXMsIGAke3ByZWZpeH1Mb2dHcm91cFN1YnNjcmlwdGlvbmAsIHtcbiAgICAgICAgbG9nR3JvdXAsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBuZXcgZGVzdGluYXRpb25zLkxhbWJkYURlc3RpbmF0aW9uKHRyaWdnZXIubG9nU3RyZWFtU3Vic2NyaXB0aW9uRmlsdGVyRGVzdGluYXRpb25GdW5jdGlvbiksXG4gICAgICAgIGZpbHRlclBhdHRlcm46IGxvZ3MuRmlsdGVyUGF0dGVybi5hbnkoXG4gICAgICAgICAgbG9ncy5GaWx0ZXJQYXR0ZXJuLnN0cmluZ1ZhbHVlKCckLmxldmVsJywgJz0nLCAnRVJST1InKSxcbiAgICAgICAgICBsb2dzLkZpbHRlclBhdHRlcm4uc3RyaW5nVmFsdWUoJyQubGV2ZWwnLCAnPScsICdXQVJOJyksXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxufSJdfQ==