UNPKG

@taimos/cdk-controltower

Version:

[![npm version](https://badge.fury.io/js/@taimos%2Fcdk-controltower.svg)](https://badge.fury.io/js/@taimos%2Fcdk-controltower)

95 lines 10.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BudgetStack = void 0; const aws_cdk_lib_1 = require("aws-cdk-lib"); class BudgetStack extends aws_cdk_lib_1.Stack { constructor(scope, id, props) { var _a; super(scope, id, props); for (const accountName of Object.keys(props.budgets)) { const account = props.accounts[accountName]; const config = props.budgets[accountName]; const isOpts = (typeof config !== 'number'); const address = (_a = (isOpts ? config.email : undefined)) !== null && _a !== void 0 ? _a : account.Email; new aws_cdk_lib_1.aws_budgets.CfnBudget(this, `Budget${account.Name}`, { budget: { budgetType: 'COST', budgetLimit: { unit: 'USD', amount: isOpts ? config.amount : config, }, timeUnit: 'MONTHLY', costFilters: { LinkedAccount: [account.Id], }, costTypes: { includeCredit: true, includeDiscount: true, includeOtherSubscription: true, includeRecurring: true, includeRefund: true, includeSubscription: true, includeSupport: true, includeTax: false, includeUpfront: true, useAmortized: false, useBlended: false, }, }, notificationsWithSubscribers: [ { notification: { notificationType: 'ACTUAL', comparisonOperator: 'GREATER_THAN', threshold: 90, }, subscribers: [ { subscriptionType: 'EMAIL', address, }, ], }, { notification: { notificationType: 'FORECASTED', comparisonOperator: 'GREATER_THAN', threshold: 100, }, subscribers: [ { subscriptionType: 'EMAIL', address, }, ], }, { notification: { notificationType: 'ACTUAL', comparisonOperator: 'GREATER_THAN', threshold: 100, }, subscribers: [ { subscriptionType: 'EMAIL', address, }, ], }, { notification: { notificationType: 'ACTUAL', comparisonOperator: 'GREATER_THAN', threshold: 120, }, subscribers: [ { subscriptionType: 'EMAIL', address, }, ], }, ], }); } } } exports.BudgetStack = BudgetStack; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1ZGdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FJcUI7QUFjckIsTUFBYSxXQUE4QixTQUFRLG1CQUFLO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7O1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQWdCLENBQUMsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQWdCLENBQUUsQ0FBQztZQUNoRCxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBRTVDLE1BQU0sT0FBTyxHQUFHLE1BQUEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxtQ0FBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRXJFLElBQUkseUJBQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuRCxNQUFNLEVBQUU7b0JBQ04sVUFBVSxFQUFFLE1BQU07b0JBQ2xCLFdBQVcsRUFBRTt3QkFDWCxJQUFJLEVBQUUsS0FBSzt3QkFDWCxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFnQjtxQkFDbEQ7b0JBQ0QsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFdBQVcsRUFBRTt3QkFDWCxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3FCQUM1QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsYUFBYSxFQUFFLElBQUk7d0JBQ25CLGVBQWUsRUFBRSxJQUFJO3dCQUNyQix3QkFBd0IsRUFBRSxJQUFJO3dCQUM5QixnQkFBZ0IsRUFBRSxJQUFJO3dCQUN0QixhQUFhLEVBQUUsSUFBSTt3QkFDbkIsbUJBQW1CLEVBQUUsSUFBSTt3QkFDekIsY0FBYyxFQUFFLElBQUk7d0JBQ3BCLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixjQUFjLEVBQUUsSUFBSTt3QkFDcEIsWUFBWSxFQUFFLEtBQUs7d0JBQ25CLFVBQVUsRUFBRSxLQUFLO3FCQUNsQjtpQkFDRjtnQkFDRCw0QkFBNEIsRUFBRTtvQkFDNUI7d0JBQ0UsWUFBWSxFQUFFOzRCQUNaLGdCQUFnQixFQUFFLFFBQVE7NEJBQzFCLGtCQUFrQixFQUFFLGNBQWM7NEJBQ2xDLFNBQVMsRUFBRSxFQUFFO3lCQUNkO3dCQUNELFdBQVcsRUFBRTs0QkFDWDtnQ0FDRSxnQkFBZ0IsRUFBRSxPQUFPO2dDQUN6QixPQUFPOzZCQUNSO3lCQUNGO3FCQUNGLEVBQUU7d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLGdCQUFnQixFQUFFLFlBQVk7NEJBQzlCLGtCQUFrQixFQUFFLGNBQWM7NEJBQ2xDLFNBQVMsRUFBRSxHQUFHO3lCQUNmO3dCQUNELFdBQVcsRUFBRTs0QkFDWDtnQ0FDRSxnQkFBZ0IsRUFBRSxPQUFPO2dDQUN6QixPQUFPOzZCQUNSO3lCQUNGO3FCQUNGLEVBQUU7d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLGdCQUFnQixFQUFFLFFBQVE7NEJBQzFCLGtCQUFrQixFQUFFLGNBQWM7NEJBQ2xDLFNBQVMsRUFBRSxHQUFHO3lCQUNmO3dCQUNELFdBQVcsRUFBRTs0QkFDWDtnQ0FDRSxnQkFBZ0IsRUFBRSxPQUFPO2dDQUN6QixPQUFPOzZCQUNSO3lCQUNGO3FCQUNGLEVBQUU7d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLGdCQUFnQixFQUFFLFFBQVE7NEJBQzFCLGtCQUFrQixFQUFFLGNBQWM7NEJBQ2xDLFNBQVMsRUFBRSxHQUFHO3lCQUNmO3dCQUNELFdBQVcsRUFBRTs0QkFDWDtnQ0FDRSxnQkFBZ0IsRUFBRSxPQUFPO2dDQUN6QixPQUFPOzZCQUNSO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUVILENBQUM7Q0FDRjtBQTNGRCxrQ0EyRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhd3NfYnVkZ2V0cyBhcyBidWRnZXRzLFxuICBTdGFjayxcbiAgU3RhY2tQcm9wcyxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBY2NvdW50Q29uZmlnLCBDb250cm9sVG93ZXJQcm9wcyB9IGZyb20gJy4vYXdzLW9yZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudEJ1ZGdldE9wdGlvbnMge1xuICByZWFkb25seSBhbW91bnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgZW1haWw/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEJ1ZGdldENvbmZpZzxUIGV4dGVuZHMgc3RyaW5nPiB7XG4gIHJlYWRvbmx5IGJ1ZGdldHM6IEFjY291bnRDb25maWc8VCwgbnVtYmVyIHwgQWNjb3VudEJ1ZGdldE9wdGlvbnM+O1xufVxuXG5leHBvcnQgdHlwZSBCdWRnZXRTdGFja1Byb3BzPFQgZXh0ZW5kcyBzdHJpbmc+ID0gQnVkZ2V0Q29uZmlnPFQ+ICYgU3RhY2tQcm9wcyAmIENvbnRyb2xUb3dlclByb3BzPFQ+O1xuXG5leHBvcnQgY2xhc3MgQnVkZ2V0U3RhY2s8VCBleHRlbmRzIHN0cmluZz4gZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWRnZXRTdGFja1Byb3BzPFQ+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBmb3IgKGNvbnN0IGFjY291bnROYW1lIG9mIE9iamVjdC5rZXlzKHByb3BzLmJ1ZGdldHMpKSB7XG4gICAgICBjb25zdCBhY2NvdW50ID0gcHJvcHMuYWNjb3VudHNbYWNjb3VudE5hbWUgYXMgVF07XG4gICAgICBjb25zdCBjb25maWcgPSBwcm9wcy5idWRnZXRzW2FjY291bnROYW1lIGFzIFRdITtcbiAgICAgIGNvbnN0IGlzT3B0cyA9ICh0eXBlb2YgY29uZmlnICE9PSAnbnVtYmVyJyk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAoaXNPcHRzID8gY29uZmlnLmVtYWlsIDogdW5kZWZpbmVkKSA/PyBhY2NvdW50LkVtYWlsO1xuXG4gICAgICBuZXcgYnVkZ2V0cy5DZm5CdWRnZXQodGhpcywgYEJ1ZGdldCR7YWNjb3VudC5OYW1lfWAsIHtcbiAgICAgICAgYnVkZ2V0OiB7XG4gICAgICAgICAgYnVkZ2V0VHlwZTogJ0NPU1QnLFxuICAgICAgICAgIGJ1ZGdldExpbWl0OiB7XG4gICAgICAgICAgICB1bml0OiAnVVNEJyxcbiAgICAgICAgICAgIGFtb3VudDogaXNPcHRzID8gY29uZmlnLmFtb3VudCA6IGNvbmZpZyBhcyBudW1iZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lVW5pdDogJ01PTlRITFknLFxuICAgICAgICAgIGNvc3RGaWx0ZXJzOiB7XG4gICAgICAgICAgICBMaW5rZWRBY2NvdW50OiBbYWNjb3VudC5JZF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb3N0VHlwZXM6IHtcbiAgICAgICAgICAgIGluY2x1ZGVDcmVkaXQ6IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlRGlzY291bnQ6IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlT3RoZXJTdWJzY3JpcHRpb246IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlUmVjdXJyaW5nOiB0cnVlLFxuICAgICAgICAgICAgaW5jbHVkZVJlZnVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGluY2x1ZGVTdWJzY3JpcHRpb246IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlU3VwcG9ydDogdHJ1ZSxcbiAgICAgICAgICAgIGluY2x1ZGVUYXg6IGZhbHNlLFxuICAgICAgICAgICAgaW5jbHVkZVVwZnJvbnQ6IHRydWUsXG4gICAgICAgICAgICB1c2VBbW9ydGl6ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlQmxlbmRlZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbm90aWZpY2F0aW9uc1dpdGhTdWJzY3JpYmVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbjoge1xuICAgICAgICAgICAgICBub3RpZmljYXRpb25UeXBlOiAnQUNUVUFMJyxcbiAgICAgICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiAnR1JFQVRFUl9USEFOJyxcbiAgICAgICAgICAgICAgdGhyZXNob2xkOiA5MCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJzY3JpYmVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uVHlwZTogJ0VNQUlMJyxcbiAgICAgICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBub3RpZmljYXRpb246IHtcbiAgICAgICAgICAgICAgbm90aWZpY2F0aW9uVHlwZTogJ0ZPUkVDQVNURUQnLFxuICAgICAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6ICdHUkVBVEVSX1RIQU4nLFxuICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDEwMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJzY3JpYmVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uVHlwZTogJ0VNQUlMJyxcbiAgICAgICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBub3RpZmljYXRpb246IHtcbiAgICAgICAgICAgICAgbm90aWZpY2F0aW9uVHlwZTogJ0FDVFVBTCcsXG4gICAgICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogJ0dSRUFURVJfVEhBTicsXG4gICAgICAgICAgICAgIHRocmVzaG9sZDogMTAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1YnNjcmliZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25UeXBlOiAnRU1BSUwnLFxuICAgICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbjoge1xuICAgICAgICAgICAgICBub3RpZmljYXRpb25UeXBlOiAnQUNUVUFMJyxcbiAgICAgICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiAnR1JFQVRFUl9USEFOJyxcbiAgICAgICAgICAgICAgdGhyZXNob2xkOiAxMjAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3Vic2NyaWJlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvblR5cGU6ICdFTUFJTCcsXG4gICAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG59XG4iXX0=