UNPKG

cdk-rds-scheduler

Version:
105 lines 15.4 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.RdsScheduler = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const iam = require("aws-cdk-lib/aws-iam"); const scheduler = require("aws-cdk-lib/aws-scheduler"); const constructs_1 = require("constructs"); /** * A scheduler for RDS instances or clusters */ class RdsScheduler extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); if (props.cluster && props.instance) { throw new Error('You can only specify either a cluster or an instance, not both.'); } if (!props.cluster && !props.instance) { throw new Error('You must specify either a cluster or an instance.'); } if (props.schedule.length === 0) { throw new Error('You must specify at least one schedule.'); } const isCluster = !!props.cluster; const identifier = isCluster ? props.cluster.clusterIdentifier : props.instance.instanceIdentifier; const schedulerRole = new iam.Role(this, 'SchedulerRole', { assumedBy: new iam.ServicePrincipal('scheduler.amazonaws.com'), inlinePolicies: { SchedulerPolicy: new iam.PolicyDocument({ statements: [ new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: isCluster ? ['rds:StartDBCluster', 'rds:StopDBCluster'] : ['rds:StartDBInstance', 'rds:StopDBInstance'], resources: [ aws_cdk_lib_1.Stack.of(this).formatArn({ service: 'rds', resource: isCluster ? 'cluster' : 'db', resourceName: identifier, arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME, }), ], }), ], }), }, }); props.schedule.forEach((schedule, index) => { if (schedule.start) { new scheduler.CfnSchedule(this, `StartSchedule${index}`, { flexibleTimeWindow: { mode: 'OFF', }, scheduleExpression: schedule.start.toString(), scheduleExpressionTimezone: schedule.timezone?.timezoneName ?? aws_cdk_lib_1.TimeZone.ETC_UTC.timezoneName, target: { arn: aws_cdk_lib_1.Stack.of(this).formatArn({ region: '', account: '', service: 'scheduler', resource: `aws-sdk:rds:${isCluster ? 'startDBCluster' : 'startDBInstance'}`, }), roleArn: schedulerRole.roleArn, input: JSON.stringify({ ...(isCluster ? { DbClusterIdentifier: identifier, } : { DbInstanceIdentifier: identifier, }), }), }, }); } if (schedule.stop) { new scheduler.CfnSchedule(this, `StopSchedule${index}`, { flexibleTimeWindow: { mode: 'OFF', }, scheduleExpression: schedule.stop.toString(), scheduleExpressionTimezone: schedule.timezone?.timezoneName ?? aws_cdk_lib_1.TimeZone.ETC_UTC.timezoneName, target: { arn: aws_cdk_lib_1.Stack.of(this).formatArn({ region: '', account: '', service: 'scheduler', resource: `aws-sdk:rds:${isCluster ? 'stopDBCluster' : 'stopDBInstance'}`, }), roleArn: schedulerRole.roleArn, input: JSON.stringify({ ...(isCluster ? { DbClusterIdentifier: identifier, } : { DbInstanceIdentifier: identifier, }), }), }, }); } }); } } exports.RdsScheduler = RdsScheduler; _a = JSII_RTTI_SYMBOL_1; RdsScheduler[_a] = { fqn: "cdk-rds-scheduler.RdsScheduler", version: "1.1.5" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLXNjaGVkdWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZHMtc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXlEO0FBQ3pELDJDQUEyQztBQUUzQyx1REFBdUQ7QUFDdkQsMkNBQXVDO0FBZ0R2Qzs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBQ3pDLFlBQWEsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFbEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUyxDQUFDLGtCQUFrQixDQUFDO1FBQ3JHLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3hELFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FB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QyxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7eUJBQzFFLENBQUM7d0JBQ0YsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPO3dCQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQzs0QkFDcEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0NBQ2QsbUJBQW1CLEVBQUUsVUFBVTs2QkFDaEMsQ0FBQyxDQUFDLENBQUM7Z0NBQ0Ysb0JBQW9CLEVBQUUsVUFBVTs2QkFDakMsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBM0ZILG9DQTRGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFybkZvcm1hdCwgU3RhY2ssIFRpbWVab25lIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgcmRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yZHMnO1xuaW1wb3J0ICogYXMgc2NoZWR1bGVyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDcm9uIH0gZnJvbSAnLi9jcm9uJztcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZSB7XG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgc2NoZWR1bGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdGFydCBzY2hlZHVsZS4gVGhlIFJEUyBpbnN0YW5jZSBvciBjbHVzdGVyIHdpbGwgbm90IGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0PzogQ3JvbjtcbiAgLyoqXG4gICAqIFRoZSBzdG9wIHNjaGVkdWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3RvcCBzY2hlZHVsZS4gVGhlIFJEUyBpbnN0YW5jZSBvciBjbHVzdGVyIHdpbGwgbm90IGJlIHN0b3BwZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3A/OiBDcm9uO1xuICAvKipcbiAgICogVGhlIHRpbWV6b25lIGZvciB0aGUgY3JvbiBleHByZXNzaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IFVUQ1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZXpvbmU/OiBUaW1lWm9uZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgUmRzU2NoZWR1bGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmRzU2NoZWR1bGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIFJEUyBjbHVzdGVyIHRvIHN0YXJ0IGFuZCBzdG9wLlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBhIGNsdXN0ZXIsIHlvdSBjYW5ub3Qgc3BlY2lmeSBhbiBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjbHVzdGVyIGlzIHNwZWNpZmllZCBhbmQgeW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlcj86IHJkcy5JRGF0YWJhc2VDbHVzdGVyO1xuICAvKipcbiAgICogVGhlIFJEUyBpbnN0YW5jZSB0byBzdGFydCBhbmQgc3RvcC5cbiAgICogSWYgeW91IHNwZWNpZnkgYW4gaW5zdGFuY2UsIHlvdSBjYW5ub3Qgc3BlY2lmeSBhIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gaW5zdGFuY2UgaXMgc3BlY2lmaWVkIGFuZCB5b3UgbXVzdCBzcGVjaWZ5IGEgY2x1c3RlclxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2U/OiByZHMuSURhdGFiYXNlSW5zdGFuY2U7XG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGUgZm9yIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUgUkRTIGluc3RhbmNlIG9yIGNsdXN0ZXJcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlOiBTY2hlZHVsZVtdO1xufVxuXG4vKipcbiAqIEEgc2NoZWR1bGVyIGZvciBSRFMgaW5zdGFuY2VzIG9yIGNsdXN0ZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBSZHNTY2hlZHVsZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvciAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc1NjaGVkdWxlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy5jbHVzdGVyICYmIHByb3BzLmluc3RhbmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW4gb25seSBzcGVjaWZ5IGVpdGhlciBhIGNsdXN0ZXIgb3IgYW4gaW5zdGFuY2UsIG5vdCBib3RoLicpO1xuICAgIH1cbiAgICBpZiAoIXByb3BzLmNsdXN0ZXIgJiYgIXByb3BzLmluc3RhbmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgY2x1c3RlciBvciBhbiBpbnN0YW5jZS4nKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnNjaGVkdWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBzY2hlZHVsZS4nKTtcbiAgICB9XG4gICAgY29uc3QgaXNDbHVzdGVyID0gISFwcm9wcy5jbHVzdGVyO1xuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IGlzQ2x1c3RlciA/IHByb3BzLmNsdXN0ZXIhLmNsdXN0ZXJJZGVudGlmaWVyIDogcHJvcHMuaW5zdGFuY2UhLmluc3RhbmNlSWRlbnRpZmllcjtcbiAgICBjb25zdCBzY2hlZHVsZXJSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTY2hlZHVsZXJSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ3NjaGVkdWxlci5hbWF6b25hd3MuY29tJyksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBTY2hlZHVsZXJQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBpc0NsdXN0ZXIgPyBbJ3JkczpTdGFydERCQ2x1c3RlcicsICdyZHM6U3RvcERCQ2x1c3RlciddIDogWydyZHM6U3RhcnREQkluc3RhbmNlJywgJ3JkczpTdG9wREJJbnN0YW5jZSddLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZTogaXNDbHVzdGVyID8gJ2NsdXN0ZXInIDogJ2RiJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBwcm9wcy5zY2hlZHVsZS5mb3JFYWNoKChzY2hlZHVsZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChzY2hlZHVsZS5zdGFydCkge1xuICAgICAgICBuZXcgc2NoZWR1bGVyLkNmblNjaGVkdWxlKHRoaXMsIGBTdGFydFNjaGVkdWxlJHtpbmRleH1gLCB7XG4gICAgICAgICAgZmxleGlibGVUaW1lV2luZG93OiB7XG4gICAgICAgICAgICBtb2RlOiAnT0ZGJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogc2NoZWR1bGUuc3RhcnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBzY2hlZHVsZUV4cHJlc3Npb25UaW1lem9uZTogc2NoZWR1bGUudGltZXpvbmU/LnRpbWV6b25lTmFtZSA/PyBUaW1lWm9uZS5FVENfVVRDLnRpbWV6b25lTmFtZSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGFybjogU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgICAgICAgcmVnaW9uOiAnJyxcbiAgICAgICAgICAgICAgYWNjb3VudDogJycsXG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdzY2hlZHVsZXInLFxuICAgICAgICAgICAgICByZXNvdXJjZTogYGF3cy1zZGs6cmRzOiR7aXNDbHVzdGVyID8gJ3N0YXJ0REJDbHVzdGVyJyA6ICdzdGFydERCSW5zdGFuY2UnfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJvbGVBcm46IHNjaGVkdWxlclJvbGUucm9sZUFybixcbiAgICAgICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIC4uLihpc0NsdXN0ZXIgPyB7XG4gICAgICAgICAgICAgICAgRGJDbHVzdGVySWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgICBEYkluc3RhbmNlSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjaGVkdWxlLnN0b3ApIHtcbiAgICAgICAgbmV3IHNjaGVkdWxlci5DZm5TY2hlZHVsZSh0aGlzLCBgU3RvcFNjaGVkdWxlJHtpbmRleH1gLCB7XG4gICAgICAgICAgZmxleGlibGVUaW1lV2luZG93OiB7XG4gICAgICAgICAgICBtb2RlOiAnT0ZGJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogc2NoZWR1bGUuc3RvcC50b1N0cmluZygpLFxuICAgICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvblRpbWV6b25lOiBzY2hlZHVsZS50aW1lem9uZT8udGltZXpvbmVOYW1lID8/IFRpbWVab25lLkVUQ19VVEMudGltZXpvbmVOYW1lLFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgYXJuOiBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgICByZWdpb246ICcnLFxuICAgICAgICAgICAgICBhY2NvdW50OiAnJyxcbiAgICAgICAgICAgICAgc2VydmljZTogJ3NjaGVkdWxlcicsXG4gICAgICAgICAgICAgIHJlc291cmNlOiBgYXdzLXNkazpyZHM6JHtpc0NsdXN0ZXIgPyAnc3RvcERCQ2x1c3RlcicgOiAnc3RvcERCSW5zdGFuY2UnfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJvbGVBcm46IHNjaGVkdWxlclJvbGUucm9sZUFybixcbiAgICAgICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIC4uLihpc0NsdXN0ZXIgPyB7XG4gICAgICAgICAgICAgICAgRGJDbHVzdGVySWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgICBEYkluc3RhbmNlSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19