cdk-rds-scheduler
Version:
Automatic Start and Stop Scheduler for AWS RDS
105 lines • 15.4 kB
JavaScript
"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