From 8b5320ac5e5c320db46bc74f33b3841977dd3a5d Mon Sep 17 00:00:00 2001 From: "Eric Z. Beard" Date: Thu, 13 Jan 2022 02:59:18 -0800 Subject: [PATCH] feat(aws-neptune): add autoMinorVersionUpgrade to cluster props (#18394) Fixes #17545 --- packages/@aws-cdk/aws-neptune/README.md | 14 +++++++ packages/@aws-cdk/aws-neptune/lib/cluster.ts | 9 +++++ .../@aws-cdk/aws-neptune/test/cluster.test.ts | 40 +++++++++++++++++++ .../test/integ.cluster.expected.json | 3 +- .../aws-neptune/test/integ.cluster.ts | 1 + 5 files changed, 66 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-neptune/README.md b/packages/@aws-cdk/aws-neptune/README.md index 57ecabab058be..c4f131b27d550 100644 --- a/packages/@aws-cdk/aws-neptune/README.md +++ b/packages/@aws-cdk/aws-neptune/README.md @@ -125,3 +125,17 @@ const replica1 = new neptune.DatabaseInstance(this, 'Instance', { instanceType: neptune.InstanceType.R5_LARGE }); ``` + +## Automatic minor version upgrades + +By setting `autoMinorVersionUpgrade` to true, Neptune will automatically update +the engine of the entire cluster to the latest minor version after a stabilization +window of 2 to 3 weeks. + +```ts +new neptune.DatabaseCluster(stack, 'Cluster', { + vpc, + instanceType: InstanceType.R5_LARGE, + autoMinorVersionUpgrade: true + }); +``` diff --git a/packages/@aws-cdk/aws-neptune/lib/cluster.ts b/packages/@aws-cdk/aws-neptune/lib/cluster.ts index cf5245d33c476..2a33f4e4629fa 100644 --- a/packages/@aws-cdk/aws-neptune/lib/cluster.ts +++ b/packages/@aws-cdk/aws-neptune/lib/cluster.ts @@ -226,6 +226,14 @@ export interface DatabaseClusterProps { * @default - Retain cluster. */ readonly removalPolicy?: RemovalPolicy + + /** + * If set to true, Neptune will automatically update the engine of the entire + * cluster to the latest minor version after a stabilization window of 2 to 3 weeks. + * + * @default - false + */ + readonly autoMinorVersionUpgrade?: boolean; } /** @@ -513,6 +521,7 @@ export class DatabaseCluster extends DatabaseClusterBase implements IDatabaseClu // Instance properties dbInstanceClass: props.instanceType._instanceType, dbParameterGroupName: props.parameterGroup?.parameterGroupName, + autoMinorVersionUpgrade: props.autoMinorVersionUpgrade === true, }); // We must have a dependency on the NAT gateway provider here to create diff --git a/packages/@aws-cdk/aws-neptune/test/cluster.test.ts b/packages/@aws-cdk/aws-neptune/test/cluster.test.ts index f53af7911dc6c..e4318d5521028 100644 --- a/packages/@aws-cdk/aws-neptune/test/cluster.test.ts +++ b/packages/@aws-cdk/aws-neptune/test/cluster.test.ts @@ -523,6 +523,46 @@ describe('DatabaseCluster', () => { // THEN expect(() => { cluster.grantConnect(role); }).toThrow(/Cannot grant connect when IAM authentication is disabled/); }); + + test('autoMinorVersionUpgrade is enabled when configured', () => { + + // GIVEN + const stack = testStack(); + const vpc = new ec2.Vpc(stack, 'VPC'); + + // WHEN + new DatabaseCluster(stack, 'Cluster', { + vpc, + instanceType: InstanceType.R5_LARGE, + autoMinorVersionUpgrade: true, + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::Neptune::DBInstance', { + AutoMinorVersionUpgrade: true, + }); + + }); + + test('autoMinorVersionUpgrade is not enabled when not configured', () => { + + // GIVEN + const stack = testStack(); + const vpc = new ec2.Vpc(stack, 'VPC'); + + // WHEN + new DatabaseCluster(stack, 'Cluster', { + vpc, + instanceType: InstanceType.R5_LARGE, + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::Neptune::DBInstance', { + AutoMinorVersionUpgrade: false, + }); + + }); + }); function testStack() { diff --git a/packages/@aws-cdk/aws-neptune/test/integ.cluster.expected.json b/packages/@aws-cdk/aws-neptune/test/integ.cluster.expected.json index 823f7af2a5b45..36a69ceec62c9 100644 --- a/packages/@aws-cdk/aws-neptune/test/integ.cluster.expected.json +++ b/packages/@aws-cdk/aws-neptune/test/integ.cluster.expected.json @@ -491,7 +491,8 @@ "DBInstanceClass": "db.r5.large", "DBClusterIdentifier": { "Ref": "DatabaseB269D8BB" - } + }, + "AutoMinorVersionUpgrade": true }, "DependsOn": [ "VPCPrivateSubnet1DefaultRouteAE1D6490", diff --git a/packages/@aws-cdk/aws-neptune/test/integ.cluster.ts b/packages/@aws-cdk/aws-neptune/test/integ.cluster.ts index b62c0d054a624..2a29ebe2cc1c2 100644 --- a/packages/@aws-cdk/aws-neptune/test/integ.cluster.ts +++ b/packages/@aws-cdk/aws-neptune/test/integ.cluster.ts @@ -35,6 +35,7 @@ class TestStack extends cdk.Stack { clusterParameterGroup: params, kmsKey, removalPolicy: cdk.RemovalPolicy.DESTROY, + autoMinorVersionUpgrade: true, }); cluster.connections.allowDefaultPortFromAnyIpv4('Open to the world');