UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

67 lines 10.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResourceMigrator = void 0; const chalk = require("chalk"); const fs = require("fs-extra"); const string_manipulation_1 = require("./api/util/string-manipulation"); const import_1 = require("./import"); const logging_1 = require("./logging"); class ResourceMigrator { constructor(props) { this.props = props; } /** * Checks to see if a migrate.json file exists. If it does and the source is either `filepath` or * is in the same environment as the stack deployment, a new stack is created and the resources are * migrated to the stack using an IMPORT changeset. The normal deployment will resume after this is complete * to add back in any outputs and the CDKMetadata. */ async tryMigrateResources(stacks, options) { const stack = stacks.stackArtifacts[0]; const migrateDeployment = new import_1.ResourceImporter(stack, this.props.deployments); const resourcesToImport = await this.tryGetResources(await migrateDeployment.resolveEnvironment()); if (resourcesToImport) { (0, logging_1.info)('%s: creating stack for resource migration...', chalk.bold(stack.displayName)); (0, logging_1.info)('%s: importing resources into stack...', chalk.bold(stack.displayName)); await this.performResourceMigration(migrateDeployment, resourcesToImport, options); fs.rmSync('migrate.json'); (0, logging_1.info)('%s: applying CDKMetadata and Outputs to stack (if applicable)...', chalk.bold(stack.displayName)); } } /** * Creates a new stack with just the resources to be migrated */ async performResourceMigration(migrateDeployment, resourcesToImport, options) { const startDeployTime = new Date().getTime(); let elapsedDeployTime = 0; // Initial Deployment await migrateDeployment.importResourcesFromMigrate(resourcesToImport, { roleArn: options.roleArn, toolkitStackName: options.toolkitStackName, deploymentMethod: options.deploymentMethod, usePreviousParameters: true, progress: options.progress, rollback: options.rollback, }); elapsedDeployTime = new Date().getTime() - startDeployTime; (0, logging_1.info)('\n✨ Resource migration time: %ss\n', (0, string_manipulation_1.formatTime)(elapsedDeployTime)); } async tryGetResources(environment) { try { const migrateFile = fs.readJsonSync('migrate.json', { encoding: 'utf-8', }); const sourceEnv = migrateFile.Source.split(':'); if (sourceEnv[0] === 'localfile' || (sourceEnv[4] === environment.account && sourceEnv[3] === environment.region)) { return migrateFile.Resources; } } catch (e) { // Nothing to do } return undefined; } } exports.ResourceMigrator = ResourceMigrator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtaWdyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrQkFBK0I7QUFDL0IsK0JBQStCO0FBRy9CLHdFQUE0RDtBQUU1RCxxQ0FBNEM7QUFDNUMsdUNBQWlDO0FBUWpDLE1BQWEsZ0JBQWdCO0lBQzNCLFlBQW9DLEtBQTRCO1FBQTVCLFVBQUssR0FBTCxLQUFLLENBQXVCO0lBQUcsQ0FBQztJQUVwRTs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUF1QixFQUFFLE9BQWdDO1FBQ3hGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHlCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0saUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRW5HLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixJQUFBLGNBQUksRUFBQyw4Q0FBOEMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUEsY0FBSSxFQUFDLHVDQUF1QyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFFN0UsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFbkYsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQixJQUFBLGNBQUksRUFBQyxrRUFBa0UsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzFHLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsd0JBQXdCLENBQ3BDLGlCQUFtQyxFQUNuQyxpQkFBb0MsRUFDcEMsT0FBZ0M7UUFFaEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUUxQixxQkFBcUI7UUFDckIsTUFBTSxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsRUFBRTtZQUNwRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtZQUMxQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1lBQzFDLHFCQUFxQixFQUFFLElBQUk7WUFDM0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtTQUMzQixDQUFDLENBQUM7UUFFSCxpQkFBaUIsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUMzRCxJQUFBLGNBQUksRUFBQyxxQ0FBcUMsRUFBRSxJQUFBLGdDQUFVLEVBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQThCO1FBQ3pELElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFO2dCQUNsRCxRQUFRLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBSSxXQUFXLENBQUMsTUFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUQsSUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVztnQkFDNUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUM3RSxDQUFDO2dCQUNELE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxnQkFBZ0I7UUFDbEIsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQXBFRCw0Q0FvRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBTdGFja0NvbGxlY3Rpb24gfSBmcm9tICcuL2FwaS9jeGFwcC9jbG91ZC1hc3NlbWJseSc7XG5pbXBvcnQgeyBEZXBsb3ltZW50cywgUmVzb3VyY2VzVG9JbXBvcnQgfSBmcm9tICcuL2FwaS9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBmb3JtYXRUaW1lIH0gZnJvbSAnLi9hcGkvdXRpbC9zdHJpbmctbWFuaXB1bGF0aW9uJztcbmltcG9ydCB7IERlcGxveU9wdGlvbnMgfSBmcm9tICcuL2NsaS9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBSZXNvdXJjZUltcG9ydGVyIH0gZnJvbSAnLi9pbXBvcnQnO1xuaW1wb3J0IHsgaW5mbyB9IGZyb20gJy4vbG9nZ2luZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VNaWdyYXRvclByb3BzIHtcbiAgZGVwbG95bWVudHM6IERlcGxveW1lbnRzO1xufVxuXG50eXBlIFJlc291cmNlTWlncmF0b3JPcHRpb25zID0gUGljazxEZXBsb3lPcHRpb25zLCAncm9sZUFybicgfCAndG9vbGtpdFN0YWNrTmFtZScgfCAnZGVwbG95bWVudE1ldGhvZCcgfCAncHJvZ3Jlc3MnIHwgJ3JvbGxiYWNrJz5cblxuZXhwb3J0IGNsYXNzIFJlc291cmNlTWlncmF0b3Ige1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogUmVzb3VyY2VNaWdyYXRvclByb3BzKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdG8gc2VlIGlmIGEgbWlncmF0ZS5qc29uIGZpbGUgZXhpc3RzLiBJZiBpdCBkb2VzIGFuZCB0aGUgc291cmNlIGlzIGVpdGhlciBgZmlsZXBhdGhgIG9yXG4gICAqIGlzIGluIHRoZSBzYW1lIGVudmlyb25tZW50IGFzIHRoZSBzdGFjayBkZXBsb3ltZW50LCBhIG5ldyBzdGFjayBpcyBjcmVhdGVkIGFuZCB0aGUgcmVzb3VyY2VzIGFyZVxuICAgKiBtaWdyYXRlZCB0byB0aGUgc3RhY2sgdXNpbmcgYW4gSU1QT1JUIGNoYW5nZXNldC4gVGhlIG5vcm1hbCBkZXBsb3ltZW50IHdpbGwgcmVzdW1lIGFmdGVyIHRoaXMgaXMgY29tcGxldGVcbiAgICogdG8gYWRkIGJhY2sgaW4gYW55IG91dHB1dHMgYW5kIHRoZSBDREtNZXRhZGF0YS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cnlNaWdyYXRlUmVzb3VyY2VzKHN0YWNrczogU3RhY2tDb2xsZWN0aW9uLCBvcHRpb25zOiBSZXNvdXJjZU1pZ3JhdG9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzLnN0YWNrQXJ0aWZhY3RzWzBdO1xuICAgIGNvbnN0IG1pZ3JhdGVEZXBsb3ltZW50ID0gbmV3IFJlc291cmNlSW1wb3J0ZXIoc3RhY2ssIHRoaXMucHJvcHMuZGVwbG95bWVudHMpO1xuICAgIGNvbnN0IHJlc291cmNlc1RvSW1wb3J0ID0gYXdhaXQgdGhpcy50cnlHZXRSZXNvdXJjZXMoYXdhaXQgbWlncmF0ZURlcGxveW1lbnQucmVzb2x2ZUVudmlyb25tZW50KCkpO1xuXG4gICAgaWYgKHJlc291cmNlc1RvSW1wb3J0KSB7XG4gICAgICBpbmZvKCclczogY3JlYXRpbmcgc3RhY2sgZm9yIHJlc291cmNlIG1pZ3JhdGlvbi4uLicsIGNoYWxrLmJvbGQoc3RhY2suZGlzcGxheU5hbWUpKTtcbiAgICAgIGluZm8oJyVzOiBpbXBvcnRpbmcgcmVzb3VyY2VzIGludG8gc3RhY2suLi4nLCBjaGFsay5ib2xkKHN0YWNrLmRpc3BsYXlOYW1lKSk7XG5cbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybVJlc291cmNlTWlncmF0aW9uKG1pZ3JhdGVEZXBsb3ltZW50LCByZXNvdXJjZXNUb0ltcG9ydCwgb3B0aW9ucyk7XG5cbiAgICAgIGZzLnJtU3luYygnbWlncmF0ZS5qc29uJyk7XG4gICAgICBpbmZvKCclczogYXBwbHlpbmcgQ0RLTWV0YWRhdGEgYW5kIE91dHB1dHMgdG8gc3RhY2sgKGlmIGFwcGxpY2FibGUpLi4uJywgY2hhbGsuYm9sZChzdGFjay5kaXNwbGF5TmFtZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHN0YWNrIHdpdGgganVzdCB0aGUgcmVzb3VyY2VzIHRvIGJlIG1pZ3JhdGVkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1SZXNvdXJjZU1pZ3JhdGlvbihcbiAgICBtaWdyYXRlRGVwbG95bWVudDogUmVzb3VyY2VJbXBvcnRlcixcbiAgICByZXNvdXJjZXNUb0ltcG9ydDogUmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgb3B0aW9uczogUmVzb3VyY2VNaWdyYXRvck9wdGlvbnMsXG4gICkge1xuICAgIGNvbnN0IHN0YXJ0RGVwbG95VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBlbGFwc2VkRGVwbG95VGltZSA9IDA7XG5cbiAgICAvLyBJbml0aWFsIERlcGxveW1lbnRcbiAgICBhd2FpdCBtaWdyYXRlRGVwbG95bWVudC5pbXBvcnRSZXNvdXJjZXNGcm9tTWlncmF0ZShyZXNvdXJjZXNUb0ltcG9ydCwge1xuICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgdG9vbGtpdFN0YWNrTmFtZTogb3B0aW9ucy50b29sa2l0U3RhY2tOYW1lLFxuICAgICAgZGVwbG95bWVudE1ldGhvZDogb3B0aW9ucy5kZXBsb3ltZW50TWV0aG9kLFxuICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiB0cnVlLFxuICAgICAgcHJvZ3Jlc3M6IG9wdGlvbnMucHJvZ3Jlc3MsXG4gICAgICByb2xsYmFjazogb3B0aW9ucy5yb2xsYmFjayxcbiAgICB9KTtcblxuICAgIGVsYXBzZWREZXBsb3lUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydERlcGxveVRpbWU7XG4gICAgaW5mbygnXFxu4pyoICBSZXNvdXJjZSBtaWdyYXRpb24gdGltZTogJXNzXFxuJywgZm9ybWF0VGltZShlbGFwc2VkRGVwbG95VGltZSkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHRyeUdldFJlc291cmNlcyhlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQpOiBQcm9taXNlPFJlc291cmNlc1RvSW1wb3J0IHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1pZ3JhdGVGaWxlID0gZnMucmVhZEpzb25TeW5jKCdtaWdyYXRlLmpzb24nLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzb3VyY2VFbnYgPSAobWlncmF0ZUZpbGUuU291cmNlIGFzIHN0cmluZykuc3BsaXQoJzonKTtcbiAgICAgIGlmIChcbiAgICAgICAgc291cmNlRW52WzBdID09PSAnbG9jYWxmaWxlJyB8fFxuICAgICAgICAoc291cmNlRW52WzRdID09PSBlbnZpcm9ubWVudC5hY2NvdW50ICYmIHNvdXJjZUVudlszXSA9PT0gZW52aXJvbm1lbnQucmVnaW9uKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBtaWdyYXRlRmlsZS5SZXNvdXJjZXM7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTm90aGluZyB0byBkb1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuIl19