@taimos/cdk-controltower
Version:
[](https://badge.fury.io/js/@taimos%2Fcdk-controltower)
100 lines • 10.6 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.ControlTowerPipeline = void 0;
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_codecommit_1 = require("aws-cdk-lib/aws-codecommit");
const pipelines = __importStar(require("aws-cdk-lib/pipelines"));
const billing_stage_1 = require("./billing-stage");
const log_archive_stage_1 = require("./log-archive-stage");
const sso_stage_1 = require("./sso-stage");
class ControlTowerPipeline extends aws_cdk_lib_1.Stack {
constructor(scope, props) {
var _a;
super(scope, 'CDKCT-Pipeline', {
env: (_a = props.env) !== null && _a !== void 0 ? _a : props.orgPrincipalEnv,
stackName: 'CDKCT-Pipeline',
});
this.props = props;
this.repository = new aws_codecommit_1.Repository(this, 'Repository', {
repositoryName: 'org-setup',
description: 'Contains all the code for the AWS organizations setup',
});
this.pipeline = new pipelines.CodePipeline(this, 'Resource', {
publishAssetsInParallel: false,
crossAccountKeys: true,
dockerEnabledForSynth: true,
synth: new pipelines.CodeBuildStep('Synth', {
input: pipelines.CodePipelineSource.codeCommit(this.repository, 'main'),
installCommands: [
'yarn install --frozen-lockfile',
],
commands: [
'npx projen build',
],
}),
});
}
addStage(appStage, options) {
if (!appStage.account || !appStage.region) {
throw new Error('Stage does not have explicit account or region set up.');
}
return this.pipeline.addStage(appStage, options);
}
addSsoConfig(permissionsConfiguration) {
this.addStage(new sso_stage_1.SsoStage(this, {
orgPrincipalEnv: this.props.orgPrincipalEnv,
accounts: this.props.accounts,
ssoConfig: this.props.ssoConfig,
permissionsConfiguration,
}));
}
addBillingConfig(budgetConfig, costReportConfig) {
this.addStage(new billing_stage_1.BillingStage(this, {
orgPrincipalEnv: this.props.orgPrincipalEnv,
accounts: this.props.accounts,
budgetConfig,
costReportConfig,
}));
}
addLogArchive(logArchiveAccount) {
this.addStage(new log_archive_stage_1.LogArchiveStage(this, {
orgPrincipalEnv: this.props.orgPrincipalEnv,
logArchiveAccount: this.props.accounts[logArchiveAccount],
}));
}
}
exports.ControlTowerPipeline = ControlTowerPipeline;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmUvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQWdEO0FBQ2hELCtEQUF3RDtBQUN4RCxpRUFBbUQ7QUFFbkQsbURBQStDO0FBQy9DLDJEQUFzRDtBQUN0RCwyQ0FBdUM7QUFRdkMsTUFBYSxvQkFBeUQsU0FBUSxtQkFBSztJQUtqRixZQUFZLEtBQTJCLEVBQVUsS0FBc0M7O1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7WUFDN0IsR0FBRyxFQUFFLE1BQUEsS0FBSyxDQUFDLEdBQUcsbUNBQUksS0FBSyxDQUFDLGVBQWU7WUFDdkMsU0FBUyxFQUFFLGdCQUFnQjtTQUM1QixDQUFDLENBQUM7UUFKNEMsVUFBSyxHQUFMLEtBQUssQ0FBaUM7UUFNckYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLDJCQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNuRCxjQUFjLEVBQUUsV0FBVztZQUMzQixXQUFXLEVBQUUsdURBQXVEO1NBQ3JFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDM0QsdUJBQXVCLEVBQUUsS0FBSztZQUM5QixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLHFCQUFxQixFQUFFLElBQUk7WUFDM0IsS0FBSyxFQUFFLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDO2dCQUN2RSxlQUFlLEVBQUU7b0JBQ2YsZ0NBQWdDO2lCQUNqQztnQkFDRCxRQUFRLEVBQUU7b0JBQ1Isa0JBQWtCO2lCQUNuQjthQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sUUFBUSxDQUFDLFFBQW1CLEVBQUUsT0FBZ0M7UUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sWUFBWSxDQUFDLHdCQUFvRDtRQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksb0JBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDL0IsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFDL0Isd0JBQXdCO1NBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVNLGdCQUFnQixDQUFDLFlBQThCLEVBQUUsZ0JBQXNDO1FBQzVGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSw0QkFBWSxDQUFDLElBQUksRUFBRTtZQUNuQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDN0IsWUFBWTtZQUNaLGdCQUFnQjtTQUNqQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxhQUFhLENBQUMsaUJBQW9CO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxtQ0FBZSxDQUFDLElBQUksRUFBRTtZQUN0QyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO1lBQzNDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1NBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUVGO0FBaEVELG9EQWdFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWNvbW1pdCc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCaWxsaW5nU3RhZ2UgfSBmcm9tICcuL2JpbGxpbmctc3RhZ2UnO1xuaW1wb3J0IHsgTG9nQXJjaGl2ZVN0YWdlIH0gZnJvbSAnLi9sb2ctYXJjaGl2ZS1zdGFnZSc7XG5pbXBvcnQgeyBTc29TdGFnZSB9IGZyb20gJy4vc3NvLXN0YWdlJztcbmltcG9ydCB7IE9yZ1ByaW5jaXBhbEF3YXJlLCBTc29Qcm9wcyB9IGZyb20gJy4uL2F3cy1vcmcnO1xuaW1wb3J0IHsgQnVkZ2V0Q29uZmlnIH0gZnJvbSAnLi4vYnVkZ2V0JztcbmltcG9ydCB7IENvc3RSZXBvcnRpbmdDb25maWcgfSBmcm9tICcuLi9jdXInO1xuaW1wb3J0IHsgU3NvUGVybWlzc2lvbkNvbmZpZyB9IGZyb20gJy4uL3Nzby1wZXJtaXNzaW9ucyc7XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xUb3dlclBpcGVsaW5lUHJvcHM8VCBleHRlbmRzIHN0cmluZywgUyBleHRlbmRzIHN0cmluZz4gPSBTc29Qcm9wczxULCBTPiAmIE9yZ1ByaW5jaXBhbEF3YXJlICYgU3RhY2tQcm9wcztcblxuZXhwb3J0IGNsYXNzIENvbnRyb2xUb3dlclBpcGVsaW5lPFQgZXh0ZW5kcyBzdHJpbmcsIFMgZXh0ZW5kcyBzdHJpbmc+IGV4dGVuZHMgU3RhY2sge1xuXG4gIHB1YmxpYyByZWFkb25seSBwaXBlbGluZTogcGlwZWxpbmVzLkNvZGVQaXBlbGluZTtcbiAgcHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBwcml2YXRlIHByb3BzOiBDb250cm9sVG93ZXJQaXBlbGluZVByb3BzPFQsIFM+KSB7XG4gICAgc3VwZXIoc2NvcGUsICdDREtDVC1QaXBlbGluZScsIHtcbiAgICAgIGVudjogcHJvcHMuZW52ID8/IHByb3BzLm9yZ1ByaW5jaXBhbEVudixcbiAgICAgIHN0YWNrTmFtZTogJ0NES0NULVBpcGVsaW5lJyxcbiAgICB9KTtcblxuICAgIHRoaXMucmVwb3NpdG9yeSA9IG5ldyBSZXBvc2l0b3J5KHRoaXMsICdSZXBvc2l0b3J5Jywge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6ICdvcmctc2V0dXAnLFxuICAgICAgZGVzY3JpcHRpb246ICdDb250YWlucyBhbGwgdGhlIGNvZGUgZm9yIHRoZSBBV1Mgb3JnYW5pemF0aW9ucyBzZXR1cCcsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgcHVibGlzaEFzc2V0c0luUGFyYWxsZWw6IGZhbHNlLFxuICAgICAgY3Jvc3NBY2NvdW50S2V5czogdHJ1ZSxcbiAgICAgIGRvY2tlckVuYWJsZWRGb3JTeW50aDogdHJ1ZSxcbiAgICAgIHN5bnRoOiBuZXcgcGlwZWxpbmVzLkNvZGVCdWlsZFN0ZXAoJ1N5bnRoJywge1xuICAgICAgICBpbnB1dDogcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZS5jb2RlQ29tbWl0KHRoaXMucmVwb3NpdG9yeSwgJ21haW4nKSxcbiAgICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICAgICAgJ3lhcm4gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZScsXG4gICAgICAgIF0sXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ25weCBwcm9qZW4gYnVpbGQnLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkU3RhZ2UoYXBwU3RhZ2U6IGNkay5TdGFnZSwgb3B0aW9ucz86IHBpcGVsaW5lcy5BZGRTdGFnZU9wdHMpOiBwaXBlbGluZXMuU3RhZ2VEZXBsb3ltZW50IHtcbiAgICBpZiAoIWFwcFN0YWdlLmFjY291bnQgfHwgIWFwcFN0YWdlLnJlZ2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFnZSBkb2VzIG5vdCBoYXZlIGV4cGxpY2l0IGFjY291bnQgb3IgcmVnaW9uIHNldCB1cC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGlwZWxpbmUuYWRkU3RhZ2UoYXBwU3RhZ2UsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZFNzb0NvbmZpZyhwZXJtaXNzaW9uc0NvbmZpZ3VyYXRpb24/OiBTc29QZXJtaXNzaW9uQ29uZmlnPFQsIFM+KSB7XG4gICAgdGhpcy5hZGRTdGFnZShuZXcgU3NvU3RhZ2UodGhpcywge1xuICAgICAgb3JnUHJpbmNpcGFsRW52OiB0aGlzLnByb3BzLm9yZ1ByaW5jaXBhbEVudixcbiAgICAgIGFjY291bnRzOiB0aGlzLnByb3BzLmFjY291bnRzLFxuICAgICAgc3NvQ29uZmlnOiB0aGlzLnByb3BzLnNzb0NvbmZpZyxcbiAgICAgIHBlcm1pc3Npb25zQ29uZmlndXJhdGlvbixcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQmlsbGluZ0NvbmZpZyhidWRnZXRDb25maWc/OiBCdWRnZXRDb25maWc8VD4sIGNvc3RSZXBvcnRDb25maWc/OiBDb3N0UmVwb3J0aW5nQ29uZmlnKSB7XG4gICAgdGhpcy5hZGRTdGFnZShuZXcgQmlsbGluZ1N0YWdlKHRoaXMsIHtcbiAgICAgIG9yZ1ByaW5jaXBhbEVudjogdGhpcy5wcm9wcy5vcmdQcmluY2lwYWxFbnYsXG4gICAgICBhY2NvdW50czogdGhpcy5wcm9wcy5hY2NvdW50cyxcbiAgICAgIGJ1ZGdldENvbmZpZyxcbiAgICAgIGNvc3RSZXBvcnRDb25maWcsXG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGFkZExvZ0FyY2hpdmUobG9nQXJjaGl2ZUFjY291bnQ6IFQpIHtcbiAgICB0aGlzLmFkZFN0YWdlKG5ldyBMb2dBcmNoaXZlU3RhZ2UodGhpcywge1xuICAgICAgb3JnUHJpbmNpcGFsRW52OiB0aGlzLnByb3BzLm9yZ1ByaW5jaXBhbEVudixcbiAgICAgIGxvZ0FyY2hpdmVBY2NvdW50OiB0aGlzLnByb3BzLmFjY291bnRzW2xvZ0FyY2hpdmVBY2NvdW50XSxcbiAgICB9KSk7XG4gIH1cblxufSJdfQ==