diff --git a/packages/@aws-cdk/aws-docdb/README.md b/packages/@aws-cdk/aws-docdb/README.md index a86bfe5b77460..509959c8b186d 100644 --- a/packages/@aws-cdk/aws-docdb/README.md +++ b/packages/@aws-cdk/aws-docdb/README.md @@ -161,3 +161,23 @@ const cluster = new docdb.DatabaseCluster(this, 'Database', { cloudWatchLogsRetentionRole: myLogsPublishingRole, // Optional - a role will be created if not provided }); ``` + +## Enable Performance Insights + +By enabling this feature it will be cascaded and enabled in all instances inside the cluster: + +```ts +declare const vpc: ec2.Vpc; + +const cluster = new docdb.DatabaseCluster(this, 'Database', { + masterUser: { + username: 'myuser', + }, + instanceType: ec2.InstanceType.of(ec2.InstanceClass.MEMORY5, ec2.InstanceSize.LARGE), + vpcSubnets: { + subnetType: ec2.SubnetType.PUBLIC, + }, + vpc, + enablePerformanceInsights: true, // Enable Performance Insights in all instances under this cluster +}); +``` diff --git a/packages/@aws-cdk/aws-docdb/lib/cluster.ts b/packages/@aws-cdk/aws-docdb/lib/cluster.ts index 03c4801d3977d..c26a8a63cbae5 100644 --- a/packages/@aws-cdk/aws-docdb/lib/cluster.ts +++ b/packages/@aws-cdk/aws-docdb/lib/cluster.ts @@ -183,6 +183,13 @@ export interface DatabaseClusterProps { * @default - a new role is created. */ readonly cloudWatchLogsRetentionRole?: IRole; + + /** + * A value that indicates whether to enable Performance Insights for the instances in the DB Cluster. + * + * @default - false + */ + readonly enablePerformanceInsights?: boolean; } /** @@ -509,6 +516,7 @@ export class DatabaseCluster extends DatabaseClusterBase { dbInstanceIdentifier: instanceIdentifier, // Instance properties dbInstanceClass: databaseInstanceType(props.instanceType), + enablePerformanceInsights: props.enablePerformanceInsights, }); instance.applyRemovalPolicy(props.removalPolicy, { diff --git a/packages/@aws-cdk/aws-docdb/lib/instance.ts b/packages/@aws-cdk/aws-docdb/lib/instance.ts index 9611235077389..2acf386893b4a 100644 --- a/packages/@aws-cdk/aws-docdb/lib/instance.ts +++ b/packages/@aws-cdk/aws-docdb/lib/instance.ts @@ -165,6 +165,13 @@ export interface DatabaseInstanceProps { * @default RemovalPolicy.Retain */ readonly removalPolicy?: cdk.RemovalPolicy + + /** + * A value that indicates whether to enable Performance Insights for the DB Instance. + * + * @default - false + */ + readonly enablePerformanceInsights?: boolean; } /** @@ -208,6 +215,7 @@ export class DatabaseInstance extends DatabaseInstanceBase implements IDatabaseI availabilityZone: props.availabilityZone, dbInstanceIdentifier: props.dbInstanceName, preferredMaintenanceWindow: props.preferredMaintenanceWindow, + enablePerformanceInsights: props.enablePerformanceInsights, }); this.cluster = props.cluster; diff --git a/packages/@aws-cdk/aws-docdb/test/cluster.test.ts b/packages/@aws-cdk/aws-docdb/test/cluster.test.ts index 9b2ba729a7934..7e07f33f7d39f 100644 --- a/packages/@aws-cdk/aws-docdb/test/cluster.test.ts +++ b/packages/@aws-cdk/aws-docdb/test/cluster.test.ts @@ -706,6 +706,29 @@ describe('DatabaseCluster', () => { }); }); + test('can enable Performance Insights on instances', () => { + // GIVEN + const stack = testStack(); + const vpc = new ec2.Vpc(stack, 'VPC'); + + // WHEN + new DatabaseCluster(stack, 'Database', { + masterUser: { + username: 'admin', + }, + instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.SMALL), + vpc, + enablePerformanceInsights: true, + }); + + // THEN + Template.fromStack(stack).hasResource('AWS::DocDB::DBInstance', { + Properties: { + EnablePerformanceInsights: true, + }, + }); + }); + test('single user rotation', () => { // GIVEN const stack = testStack(); diff --git a/packages/@aws-cdk/aws-docdb/test/instance.test.ts b/packages/@aws-cdk/aws-docdb/test/instance.test.ts index 5c3fdb9e1f036..761c842efce56 100644 --- a/packages/@aws-cdk/aws-docdb/test/instance.test.ts +++ b/packages/@aws-cdk/aws-docdb/test/instance.test.ts @@ -172,6 +172,25 @@ describe('DatabaseInstance', () => { Value: `${instanceEndpointAddress}:${port}`, }); }); + + test('can enable performance insights on instances', () => { + // GIVEN + const stack = testStack(); + + // WHEN + new DatabaseInstance(stack, 'Instance', { + cluster: stack.cluster, + instanceType: SINGLE_INSTANCE_TYPE, + enablePerformanceInsights: true, + }); + + // THEN + Template.fromStack(stack).hasResource('AWS::DocDB::DBInstance', { + Properties: { + EnablePerformanceInsights: true, + }, + }); + }); }); class TestStack extends cdk.Stack { diff --git a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.assets.json b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.assets.json index d9f99b3ff0cac..bb7c2c7f22afd 100644 --- a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.assets.json +++ b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "30.1.0", "files": { - "811c147f8ed74c3803d8df4f44e3f6a7e7779b21e729fc8cb3b66a685054a393": { + "f7cbfe0c634dda7840ec3c05f938c0badf4e3f4f4b183a058b1245d482d019bd": { "source": { "path": "aws-cdk-docdb-integ.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "811c147f8ed74c3803d8df4f44e3f6a7e7779b21e729fc8cb3b66a685054a393.json", + "objectKey": "f7cbfe0c634dda7840ec3c05f938c0badf4e3f4f4b183a058b1245d482d019bd.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.template.json b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.template.json index c810d3a1e6c3e..00e8e0ad2734e 100644 --- a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.template.json +++ b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/aws-cdk-docdb-integ.template.json @@ -533,7 +533,8 @@ "DBClusterIdentifier": { "Ref": "DatabaseB269D8BB" }, - "DBInstanceClass": "db.r5.large" + "DBInstanceClass": "db.r5.large", + "EnablePerformanceInsights": true }, "DependsOn": [ "VPCPublicSubnet1DefaultRoute91CEF279", diff --git a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/cdk.out b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/cdk.out index 588d7b269d34f..b72fef144f05c 100644 --- a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"30.1.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/integ.json b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/integ.json index b26125fa26b7a..aa6bd7ed54c18 100644 --- a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "30.1.0", "testCases": { "integ.cluster": { "stacks": [ diff --git a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/manifest.json b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/manifest.json index 5acfb39cb3cc7..441cbfdd1f1b3 100644 --- a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "30.1.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "aws-cdk-docdb-integ.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/811c147f8ed74c3803d8df4f44e3f6a7e7779b21e729fc8cb3b66a685054a393.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/f7cbfe0c634dda7840ec3c05f938c0badf4e3f4f4b183a058b1245d482d019bd.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -233,6 +227,12 @@ ] }, "displayName": "aws-cdk-docdb-integ" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/tree.json b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/tree.json index e8252c13c9841..18a9822e08393 100644 --- a/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-docdb/test/integ.cluster.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "aws-cdk-docdb-integ": { "id": "aws-cdk-docdb-integ", "path": "aws-cdk-docdb-integ", @@ -91,8 +83,8 @@ "id": "Acl", "path": "aws-cdk-docdb-integ/VPC/PublicSubnet1/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -258,8 +250,8 @@ "id": "Acl", "path": "aws-cdk-docdb-integ/VPC/PublicSubnet2/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -425,8 +417,8 @@ "id": "Acl", "path": "aws-cdk-docdb-integ/VPC/PrivateSubnet1/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -544,8 +536,8 @@ "id": "Acl", "path": "aws-cdk-docdb-integ/VPC/PrivateSubnet2/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -880,7 +872,8 @@ "dbClusterIdentifier": { "Ref": "DatabaseB269D8BB" }, - "dbInstanceClass": "db.r5.large" + "dbInstanceClass": "db.r5.large", + "enablePerformanceInsights": true } }, "constructInfo": { @@ -893,17 +886,41 @@ "fqn": "@aws-cdk/aws-docdb.DatabaseCluster", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-docdb-integ/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-docdb-integ/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.270" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-docdb/test/integ.cluster.ts b/packages/@aws-cdk/aws-docdb/test/integ.cluster.ts index 1922febe59a98..f97ff065c7eb4 100644 --- a/packages/@aws-cdk/aws-docdb/test/integ.cluster.ts +++ b/packages/@aws-cdk/aws-docdb/test/integ.cluster.ts @@ -41,6 +41,7 @@ class TestStack extends cdk.Stack { parameterGroup: params, kmsKey, removalPolicy: cdk.RemovalPolicy.DESTROY, + enablePerformanceInsights: true, }); cluster.connections.allowDefaultPortFromAnyIpv4('Open to the world');