From 415790aab7732bfbe4393bf60a79885034758f3f Mon Sep 17 00:00:00 2001 From: Rohan Jaisimha Date: Thu, 8 Feb 2024 16:00:59 +0000 Subject: [PATCH 1/3] add preferredMaintenanceWindow field to RDS InstanceProps --- packages/aws-cdk-lib/aws-rds/lib/cluster.ts | 1 + packages/aws-cdk-lib/aws-rds/lib/props.ts | 11 +++++++++ .../aws-cdk-lib/aws-rds/test/cluster.test.ts | 24 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts index b0a062776c496..2b8527112ef16 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts @@ -1371,6 +1371,7 @@ function legacyCreateInstances(cluster: DatabaseClusterNew, props: DatabaseClust autoMinorVersionUpgrade: instanceProps.autoMinorVersionUpgrade, allowMajorVersionUpgrade: instanceProps.allowMajorVersionUpgrade, deleteAutomatedBackups: instanceProps.deleteAutomatedBackups, + preferredMaintenanceWindow: instanceProps.preferredMaintenanceWindow, }); // For instances that are part of a cluster: diff --git a/packages/aws-cdk-lib/aws-rds/lib/props.ts b/packages/aws-cdk-lib/aws-rds/lib/props.ts index 4379e4d5da8b0..7b2e43b3a938f 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/props.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/props.ts @@ -101,6 +101,17 @@ export interface InstanceProps { * @default - `true` if `vpcSubnets` is `subnetType: SubnetType.PUBLIC`, `false` otherwise */ readonly publiclyAccessible?: boolean; + + /** + * A preferred maintenance window day/time range. Should be specified as a range ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). + * + * Example: 'Sun:23:45-Mon:00:15' + * + * @default - 30-minute window selected at random from an 8-hour block of time for + * each AWS Region, occurring on a random day of the week. + * @see https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_UpgradeDBInstance.Maintenance.html#Concepts.DBMaintenance + */ + readonly preferredMaintenanceWindow?: string; } /** diff --git a/packages/aws-cdk-lib/aws-rds/test/cluster.test.ts b/packages/aws-cdk-lib/aws-rds/test/cluster.test.ts index 585cd870181a3..4736479565a87 100644 --- a/packages/aws-cdk-lib/aws-rds/test/cluster.test.ts +++ b/packages/aws-cdk-lib/aws-rds/test/cluster.test.ts @@ -209,6 +209,30 @@ describe('cluster new api', () => { ], }); }); + + test('preferredMaintenanceWindow provided in InstanceProps', () => { + // GIVEN + const stack = testStack(); + const vpc = new ec2.Vpc(stack, 'VPC'); + + const PREFERRED_MAINTENANCE_WINDOW: string = 'Sun:12:00-Sun:13:00'; + + // WHEN + new DatabaseCluster(stack, 'Database', { + engine: DatabaseClusterEngine.AURORA, + instanceProps: { + vpc: vpc, + preferredMaintenanceWindow: PREFERRED_MAINTENANCE_WINDOW, + }, + }); + + // THEN + const template = Template.fromStack(stack); + // maintenance window is set + template.hasResourceProperties('AWS::RDS::DBInstance', Match.objectLike({ + PreferredMaintenanceWindow: PREFERRED_MAINTENANCE_WINDOW, + })); + }); }); describe('migrate from instanceProps', () => { From 698108bb067550211976b482618ab159d0f27033 Mon Sep 17 00:00:00 2001 From: rjjaisim-at-amazon <159363849+rjjaisim-at-amazon@users.noreply.github.com> Date: Wed, 28 Feb 2024 15:46:51 -0600 Subject: [PATCH 2/3] Update RDS README with details about maintenance window --- packages/aws-cdk-lib/aws-rds/README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/aws-cdk-lib/aws-rds/README.md b/packages/aws-cdk-lib/aws-rds/README.md index 97d508ad2c297..31f5cfdc35f00 100644 --- a/packages/aws-cdk-lib/aws-rds/README.md +++ b/packages/aws-cdk-lib/aws-rds/README.md @@ -1203,3 +1203,22 @@ The `vpc` parameter is optional. If not provided, the cluster will be created in the default VPC of the account and region. As this VPC is not deployed with AWS CDK, you can't configure the `vpcSubnets`, `subnetGroup` or `securityGroups` of the Aurora Serverless Cluster. If you want to provide one of `vpcSubnets`, `subnetGroup` or `securityGroups` parameter, please provide a `vpc`. + +### Preferred Maintenance Window + +When creating an RDS cluster, it is possible to (optionally) specify a preferred maintenance window for the cluster as well as the instances under the cluster. +See [AWS docs](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_UpgradeDBInstance.Maintenance.html#Concepts.DBMaintenance) for more information regarding maintenance windows. + +The following code snippet shows an example of setting the cluster's maintenance window to 22:15-22:45 (UTC) on Saturdays, but setting the instances' maintenance window +to 23:15-23:45 on Sundays + +```ts +const rdsCluster = new DatabaseCluster(stack, 'Database', { + engine: DatabaseClusterEngine.AURORA, + instanceProps: { + vpc: vpc, + preferredMaintenanceWindow: 'Sun:23:15-Sun:23:45', + }, + preferredMaintenanceWindow: 'Sat:22:15-Sat:22:45', +}); +``` From 46895f20fadec30f0ab660a5da249440ef1968cc Mon Sep 17 00:00:00 2001 From: Rohan Jaisimha Date: Thu, 29 Feb 2024 01:21:24 +0000 Subject: [PATCH 3/3] Update code snippet in README due to failed build --- packages/aws-cdk-lib/aws-rds/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/aws-cdk-lib/aws-rds/README.md b/packages/aws-cdk-lib/aws-rds/README.md index 31f5cfdc35f00..888becace278a 100644 --- a/packages/aws-cdk-lib/aws-rds/README.md +++ b/packages/aws-cdk-lib/aws-rds/README.md @@ -1213,8 +1213,9 @@ The following code snippet shows an example of setting the cluster's maintenance to 23:15-23:45 on Sundays ```ts -const rdsCluster = new DatabaseCluster(stack, 'Database', { - engine: DatabaseClusterEngine.AURORA, +declare const vpc: ec2.Vpc; +new rds.DatabaseCluster(this, 'DatabaseCluster', { + engine: rds.DatabaseClusterEngine.AURORA, instanceProps: { vpc: vpc, preferredMaintenanceWindow: 'Sun:23:15-Sun:23:45',