@gammarers/aws-codepipeline-execution-state-change-notification-stack
Version:
This AWS CDK Construct Stack receives all state changes of CodePipeline and sends a message to the specified notification destination when the CodePipeline is tagged with a specified tag. Therefore, you can send messages simply by adding tags without need
75 lines • 12.9 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CodePipelineExecutionStateChangeNotificationStack = exports.CodePipelineExecutionStateChangeNotificationStackResourceNamingType = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_codesuite_state_change_detection_event_rules_1 = require("@gammarers/aws-codesuite-state-change-detection-event-rules");
const aws_resource_naming_1 = require("@gammarers/aws-resource-naming");
Object.defineProperty(exports, "CodePipelineExecutionStateChangeNotificationStackResourceNamingType", { enumerable: true, get: function () { return aws_resource_naming_1.ResourceNamingType; } });
const aws_cdk_lib_1 = require("aws-cdk-lib");
const events = require("aws-cdk-lib/aws-events");
const targets = require("aws-cdk-lib/aws-events-targets");
const sns = require("aws-cdk-lib/aws-sns");
const subscriptions = require("aws-cdk-lib/aws-sns-subscriptions");
const notification_state_machine_1 = require("./resources/notification-state-machine");
class CodePipelineExecutionStateChangeNotificationStack extends aws_cdk_lib_1.Stack {
constructor(scope, id, props) {
super(scope, id, props);
// 👇 Create random 8 length string
const random = aws_resource_naming_1.ResourceNaming.createRandomString(`${aws_cdk_lib_1.Names.uniqueId(scope)}.${aws_cdk_lib_1.Names.uniqueId(this)}`);
// 👇 Auto naeming
const autoNaming = {
stateMachineName: `codepipeline-exec-state-change-notification-${random}-machine`,
notificationTopicName: `codepipeline-execution-state-change-notification-${random}-topic`,
notificationTopicDisplayName: 'CodePipeline Execution state change Notification Topic',
pipelineEventDetectionRuleName: `codepipeline-exe-state-change-${random}-detection-event-rule`,
};
// 👇 Resource Names
const names = aws_resource_naming_1.ResourceNaming.naming(autoNaming, props.resourceNamingOption);
// 👇 SNS Topic for notifications
const topic = new sns.Topic(this, 'NotificationTopic', {
topicName: names.notificationTopicName,
displayName: names.notificationTopicDisplayName,
});
// const secret = cdk.SecretValue.secretsManager('my-email-array-secret');
// const emails = JSON.parse(secret.unsafeUnwrap()) as string[];
// Subscribe an email endpoint to the topic
const emails = props.notifications.emails ?? [];
for (const email of emails) {
topic.addSubscription(new subscriptions.EmailSubscription(email));
}
// Subscribe a HTTP endpoint (Slack Webhook) to the topic
// topic.addSubscription(new subs.UrlSubscription('https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'));
// 👇 Create State Machine
const stateMachine = new notification_state_machine_1.NotificationStateMachine(this, 'StateMachine', {
stateMachineName: names.stateMachineName,
timeout: aws_cdk_lib_1.Duration.minutes(5),
notificationTopic: topic,
});
// 👇 Rule state
//enabled
const enableRule = (() => {
return props?.enabled === undefined || props.enabled;
})();
// 👇 Create EventBridge Rule
new aws_codesuite_state_change_detection_event_rules_1.CodePipelineExecutionStateChangeDetectionEventRule(this, 'EventRule', {
ruleName: names.pipelineEventDetectionRuleName,
enabled: enableRule,
targets: [
new targets.SfnStateMachine(stateMachine, {
input: events.RuleTargetInput.fromObject({
event: events.EventField.fromPath('$'),
params: {
tagKey: props.targetResource.tagKey,
tagValues: props.targetResource.tagValues,
},
}),
}),
],
});
}
}
exports.CodePipelineExecutionStateChangeNotificationStack = CodePipelineExecutionStateChangeNotificationStack;
_a = JSII_RTTI_SYMBOL_1;
CodePipelineExecutionStateChangeNotificationStack[_a] = { fqn: "@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStack", version: "2.3.8" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrSUFBaUk7QUFDakksd0VBQStIO0FBU3JELG9KQVROLHdDQUFrQixPQVN1RDtBQVI3SSw2Q0FBaUU7QUFDakUsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCwyQ0FBMkM7QUFDM0MsbUVBQW1FO0FBRW5FLHVGQUFrRjtBQTZCbEYsTUFBYSxpREFBa0QsU0FBUSxtQkFBSztJQUMxRSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZEO1FBQ3JHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxvQ0FBYyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsbUJBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksbUJBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLGtCQUFrQjtRQUNsQixNQUFNLFVBQVUsR0FBRztZQUNqQixnQkFBZ0IsRUFBRSwrQ0FBK0MsTUFBTSxVQUFVO1lBQ2pGLHFCQUFxQixFQUFFLG9EQUFvRCxNQUFNLFFBQVE7WUFDekYsNEJBQTRCLEVBQUUsd0RBQXdEO1lBQ3RGLDhCQUE4QixFQUFFLGlDQUFpQyxNQUFNLHVCQUF1QjtTQUMvRixDQUFDO1FBQ0Ysb0JBQW9CO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLG9DQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsb0JBQTJELENBQUMsQ0FBQztRQUVuSCxpQ0FBaUM7UUFDakMsTUFBTSxLQUFLLEdBQWMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUNoRSxTQUFTLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjtZQUN0QyxXQUFXLEVBQUUsS0FBSyxDQUFDLDRCQUE0QjtTQUNoRCxDQUFDLENBQUM7UUFFSCw2RUFBNkU7UUFDN0UsbUVBQW1FO1FBRW5FLDJDQUEyQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDaEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksYUFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCwwR0FBMEc7UUFFMUcsMEJBQTBCO1FBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUkscURBQXdCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN0RSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsaUJBQWlCLEVBQUUsS0FBSztTQUN6QixDQUFDLENBQUM7UUFFSCxnQkFBZ0I7UUFDaEIsU0FBUztRQUNULE1BQU0sVUFBVSxHQUFZLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE9BQU8sS0FBSyxFQUFFLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwsNkJBQTZCO1FBQzdCLElBQUkscUdBQWtELENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN4RSxRQUFRLEVBQUUsS0FBSyxDQUFDLDhCQUE4QjtZQUM5QyxPQUFPLEVBQUUsVUFBVTtZQUNuQixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRTtvQkFDeEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO3dCQUN2QyxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUN0QyxNQUFNLEVBQUU7NEJBQ04sTUFBTSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTTs0QkFDbkMsU0FBUyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUzt5QkFDMUM7cUJBQ0YsQ0FBQztpQkFDSCxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQS9ESCw4R0FnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZURldGVjdGlvbkV2ZW50UnVsZSB9IGZyb20gJ0BnYW1tYXJlcnMvYXdzLWNvZGVzdWl0ZS1zdGF0ZS1jaGFuZ2UtZGV0ZWN0aW9uLWV2ZW50LXJ1bGVzJztcbmltcG9ydCB7IFJlc291cmNlQXV0b05hbWluZywgUmVzb3VyY2VEZWZhdWx0TmFtaW5nLCBSZXNvdXJjZU5hbWluZywgUmVzb3VyY2VOYW1pbmdUeXBlIH0gZnJvbSAnQGdhbW1hcmVycy9hd3MtcmVzb3VyY2UtbmFtaW5nJztcbmltcG9ydCB7IER1cmF0aW9uLCBOYW1lcywgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgKiBhcyBzdWJzY3JpcHRpb25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMtc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblN0YXRlTWFjaGluZSB9IGZyb20gJy4vcmVzb3VyY2VzL25vdGlmaWNhdGlvbi1zdGF0ZS1tYWNoaW5lJztcblxuZXhwb3J0IHsgUmVzb3VyY2VBdXRvTmFtaW5nLCBSZXNvdXJjZURlZmF1bHROYW1pbmcsIFJlc291cmNlTmFtaW5nVHlwZSBhcyBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvblN0YWNrUmVzb3VyY2VOYW1pbmdUeXBlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0UmVzb3VyY2VQcm9wZXJ0eSB7XG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnNQcm9wZXJ0eSB7XG4gIHJlYWRvbmx5IGVtYWlscz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvblN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlUHJvcGVydHk7XG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zUHJvcGVydHk7XG4gIHJlYWRvbmx5IHJlc291cmNlTmFtaW5nT3B0aW9uPzogUmVzb3VyY2VOYW1pbmdPcHRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tTmFtaW5nIHtcbiAgcmVhZG9ubHkgdHlwZTogUmVzb3VyY2VOYW1pbmdUeXBlLkNVU1RPTTtcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBub3RpZmljYXRpb25Ub3BpY05hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uVG9waWNEaXNwbGF5TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwaXBlbGluZUV2ZW50RGV0ZWN0aW9uUnVsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VOYW1pbmdPcHRpb24gPSBSZXNvdXJjZURlZmF1bHROYW1pbmcgfCBSZXNvdXJjZUF1dG9OYW1pbmcgfCBDdXN0b21OYW1pbmc7XG5cbmV4cG9ydCBjbGFzcyBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvblN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhdGVDaGFuZ2VOb3RpZmljYXRpb25TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyDwn5GHIENyZWF0ZSByYW5kb20gOCBsZW5ndGggc3RyaW5nXG4gICAgY29uc3QgcmFuZG9tID0gUmVzb3VyY2VOYW1pbmcuY3JlYXRlUmFuZG9tU3RyaW5nKGAke05hbWVzLnVuaXF1ZUlkKHNjb3BlKX0uJHtOYW1lcy51bmlxdWVJZCh0aGlzKX1gKTtcbiAgICAvLyDwn5GHIEF1dG8gbmFlbWluZ1xuICAgIGNvbnN0IGF1dG9OYW1pbmcgPSB7XG4gICAgICBzdGF0ZU1hY2hpbmVOYW1lOiBgY29kZXBpcGVsaW5lLWV4ZWMtc3RhdGUtY2hhbmdlLW5vdGlmaWNhdGlvbi0ke3JhbmRvbX0tbWFjaGluZWAsXG4gICAgICBub3RpZmljYXRpb25Ub3BpY05hbWU6IGBjb2RlcGlwZWxpbmUtZXhlY3V0aW9uLXN0YXRlLWNoYW5nZS1ub3RpZmljYXRpb24tJHtyYW5kb219LXRvcGljYCxcbiAgICAgIG5vdGlmaWNhdGlvblRvcGljRGlzcGxheU5hbWU6ICdDb2RlUGlwZWxpbmUgRXhlY3V0aW9uIHN0YXRlIGNoYW5nZSBOb3RpZmljYXRpb24gVG9waWMnLFxuICAgICAgcGlwZWxpbmVFdmVudERldGVjdGlvblJ1bGVOYW1lOiBgY29kZXBpcGVsaW5lLWV4ZS1zdGF0ZS1jaGFuZ2UtJHtyYW5kb219LWRldGVjdGlvbi1ldmVudC1ydWxlYCxcbiAgICB9O1xuICAgIC8vIPCfkYcgUmVzb3VyY2UgTmFtZXNcbiAgICBjb25zdCBuYW1lcyA9IFJlc291cmNlTmFtaW5nLm5hbWluZyhhdXRvTmFtaW5nLCBwcm9wcy5yZXNvdXJjZU5hbWluZ09wdGlvbiBhcyBSZXNvdXJjZU5hbWluZy5SZXNvdXJjZU5hbWluZ09wdGlvbik7XG5cbiAgICAvLyDwn5GHIFNOUyBUb3BpYyBmb3Igbm90aWZpY2F0aW9uc1xuICAgIGNvbnN0IHRvcGljOiBzbnMuVG9waWMgPSBuZXcgc25zLlRvcGljKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIHtcbiAgICAgIHRvcGljTmFtZTogbmFtZXMubm90aWZpY2F0aW9uVG9waWNOYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IG5hbWVzLm5vdGlmaWNhdGlvblRvcGljRGlzcGxheU5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyAgICBjb25zdCBzZWNyZXQgPSBjZGsuU2VjcmV0VmFsdWUuc2VjcmV0c01hbmFnZXIoJ215LWVtYWlsLWFycmF5LXNlY3JldCcpO1xuICAgIC8vICAgIGNvbnN0IGVtYWlscyA9IEpTT04ucGFyc2Uoc2VjcmV0LnVuc2FmZVVud3JhcCgpKSBhcyBzdHJpbmdbXTtcblxuICAgIC8vIFN1YnNjcmliZSBhbiBlbWFpbCBlbmRwb2ludCB0byB0aGUgdG9waWNcbiAgICBjb25zdCBlbWFpbHMgPSBwcm9wcy5ub3RpZmljYXRpb25zLmVtYWlscyA/PyBbXTtcbiAgICBmb3IgKGNvbnN0IGVtYWlsIG9mIGVtYWlscykge1xuICAgICAgdG9waWMuYWRkU3Vic2NyaXB0aW9uKG5ldyBzdWJzY3JpcHRpb25zLkVtYWlsU3Vic2NyaXB0aW9uKGVtYWlsKSk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaWJlIGEgSFRUUCBlbmRwb2ludCAoU2xhY2sgV2ViaG9vaykgdG8gdGhlIHRvcGljXG4gICAgLy8gdG9waWMuYWRkU3Vic2NyaXB0aW9uKG5ldyBzdWJzLlVybFN1YnNjcmlwdGlvbignaHR0cHM6Ly9ob29rcy5zbGFjay5jb20vc2VydmljZXMvWU9VUi9TTEFDSy9XRUJIT09LJykpO1xuXG4gICAgLy8g8J+RhyBDcmVhdGUgU3RhdGUgTWFjaGluZVxuICAgIGNvbnN0IHN0YXRlTWFjaGluZSA9IG5ldyBOb3RpZmljYXRpb25TdGF0ZU1hY2hpbmUodGhpcywgJ1N0YXRlTWFjaGluZScsIHtcbiAgICAgIHN0YXRlTWFjaGluZU5hbWU6IG5hbWVzLnN0YXRlTWFjaGluZU5hbWUsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgbm90aWZpY2F0aW9uVG9waWM6IHRvcGljLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBSdWxlIHN0YXRlXG4gICAgLy9lbmFibGVkXG4gICAgY29uc3QgZW5hYmxlUnVsZTogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHM/LmVuYWJsZWQgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5lbmFibGVkO1xuICAgIH0pKCk7XG5cbiAgICAvLyDwn5GHIENyZWF0ZSBFdmVudEJyaWRnZSBSdWxlXG4gICAgbmV3IENvZGVQaXBlbGluZUV4ZWN1dGlvblN0YXRlQ2hhbmdlRGV0ZWN0aW9uRXZlbnRSdWxlKHRoaXMsICdFdmVudFJ1bGUnLCB7XG4gICAgICBydWxlTmFtZTogbmFtZXMucGlwZWxpbmVFdmVudERldGVjdGlvblJ1bGVOYW1lLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuU2ZuU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZSwge1xuICAgICAgICAgIGlucHV0OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckJyksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICAgIHRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=