diff --git a/packages/@aws-cdk/aws-rds/lib/cluster.ts b/packages/@aws-cdk/aws-rds/lib/cluster.ts index 13c502b1df04d..c3a02c2f6c2f2 100644 --- a/packages/@aws-cdk/aws-rds/lib/cluster.ts +++ b/packages/@aws-cdk/aws-rds/lib/cluster.ts @@ -18,6 +18,13 @@ export interface DatabaseClusterProps { */ readonly engine: DatabaseClusterEngine; + /** + * What version of the database to start + * + * @default - The default for the engine is used. + */ + readonly engineVersion?: string; + /** * How many replicas/instances to create * @@ -243,6 +250,13 @@ export class DatabaseCluster extends DatabaseClusterBase { */ public readonly engine: DatabaseClusterEngine; + /** + * The database version of the engine of this cluster + * + * @default - The default for the engine is used. + */ + public readonly engineVersion?: string; + /** * The VPC where the DB subnet group is created. */ @@ -287,10 +301,12 @@ export class DatabaseCluster extends DatabaseClusterBase { } this.engine = props.engine; + this.engineVersion = props.engineVersion; const cluster = new CfnDBCluster(this, 'Resource', { // Basic engine: this.engine, + engineVersion: this.engineVersion, dbClusterIdentifier: props.clusterIdentifier, dbSubnetGroupName: subnetGroup.ref, vpcSecurityGroupIds: [this.securityGroupId], @@ -348,6 +364,7 @@ export class DatabaseCluster extends DatabaseClusterBase { const instance = new CfnDBInstance(this, `Instance${instanceIndex}`, { // Link to cluster engine: props.engine, + engineVersion: props.engineVersion, dbClusterIdentifier: cluster.ref, dbInstanceIdentifier: instanceIdentifier, // Instance properties diff --git a/packages/@aws-cdk/aws-rds/test/test.cluster.ts b/packages/@aws-cdk/aws-rds/test/test.cluster.ts index 09d7e6a8615d2..bc2c2d5b76a52 100644 --- a/packages/@aws-cdk/aws-rds/test/test.cluster.ts +++ b/packages/@aws-cdk/aws-rds/test/test.cluster.ts @@ -242,6 +242,60 @@ export = { } })); + test.done(); + }, + + 'create a cluster using a specific version of MySQL'(test: Test) { + // GIVEN + const stack = testStack(); + const vpc = new ec2.Vpc(stack, 'VPC'); + + // WHEN + new DatabaseCluster(stack, 'Database', { + engine: DatabaseClusterEngine.AuroraMysql, + engineVersion: "5.7.mysql_aurora.2.04.4", + masterUser: { + username: 'admin' + }, + instanceProps: { + instanceType: new ec2.InstanceTypePair(ec2.InstanceClass.Burstable2, ec2.InstanceSize.Small), + vpc + }, + }); + + // THEN + expect(stack).to(haveResource('AWS::RDS::DBCluster', { + Engine: "aurora-mysql", + EngineVersion: "5.7.mysql_aurora.2.04.4", + })); + + test.done(); + }, + + 'create a cluster using a specific version of Postgresql'(test: Test) { + // GIVEN + const stack = testStack(); + const vpc = new ec2.Vpc(stack, 'VPC'); + + // WHEN + new DatabaseCluster(stack, 'Database', { + engine: DatabaseClusterEngine.AuroraPostgresql, + engineVersion: "10.7", + masterUser: { + username: 'admin' + }, + instanceProps: { + instanceType: new ec2.InstanceTypePair(ec2.InstanceClass.Burstable2, ec2.InstanceSize.Small), + vpc + }, + }); + + // THEN + expect(stack).to(haveResource('AWS::RDS::DBCluster', { + Engine: "aurora-postgresql", + EngineVersion: "10.7", + })); + test.done(); } };