@@ -5,7 +5,7 @@ import kms = require('@aws-cdk/aws-kms');
5
5
import lambda = require( '@aws-cdk/aws-lambda' ) ;
6
6
import logs = require( '@aws-cdk/aws-logs' ) ;
7
7
import secretsmanager = require( '@aws-cdk/aws-secretsmanager' ) ;
8
- import { Construct , Duration , IResource , RemovalPolicy , Resource , SecretValue , Stack , Token } from '@aws-cdk/core' ;
8
+ import { Construct , Duration , IResource , Lazy , RemovalPolicy , Resource , SecretValue , Stack , Token } from '@aws-cdk/core' ;
9
9
import { DatabaseSecret } from './database-secret' ;
10
10
import { Endpoint } from './endpoint' ;
11
11
import { IOptionGroup } from './option-group' ;
@@ -44,11 +44,6 @@ export interface IDatabaseInstance extends IResource, ec2.IConnectable, secretsm
44
44
*/
45
45
readonly instanceEndpoint : Endpoint ;
46
46
47
- /**
48
- * The security group identifier of the instance.
49
- */
50
- readonly securityGroupId : string ;
51
-
52
47
/**
53
48
* Defines a CloudWatch event rule which triggers for instance events. Use
54
49
* `rule.addEventPattern(pattern)` to specify a filter.
@@ -76,9 +71,9 @@ export interface DatabaseInstanceAttributes {
76
71
readonly port : number ;
77
72
78
73
/**
79
- * The security group of the instance.
74
+ * The security groups of the instance.
80
75
*/
81
- readonly securityGroup : ec2 . ISecurityGroup ;
76
+ readonly securityGroups : ec2 . ISecurityGroup [ ] ;
82
77
}
83
78
84
79
/**
@@ -92,14 +87,13 @@ export abstract class DatabaseInstanceBase extends Resource implements IDatabase
92
87
class Import extends DatabaseInstanceBase implements IDatabaseInstance {
93
88
public readonly defaultPort = ec2 . Port . tcp ( attrs . port ) ;
94
89
public readonly connections = new ec2 . Connections ( {
95
- securityGroups : [ attrs . securityGroup ] ,
90
+ securityGroups : attrs . securityGroups ,
96
91
defaultPort : this . defaultPort
97
92
} ) ;
98
93
public readonly instanceIdentifier = attrs . instanceIdentifier ;
99
94
public readonly dbInstanceEndpointAddress = attrs . instanceEndpointAddress ;
100
95
public readonly dbInstanceEndpointPort = attrs . port . toString ( ) ;
101
96
public readonly instanceEndpoint = new Endpoint ( attrs . instanceEndpointAddress , attrs . port ) ;
102
- public readonly securityGroupId = attrs . securityGroup . securityGroupId ;
103
97
}
104
98
105
99
return new Import ( scope , id ) ;
@@ -110,7 +104,6 @@ export abstract class DatabaseInstanceBase extends Resource implements IDatabase
110
104
public abstract readonly dbInstanceEndpointPort : string ;
111
105
public abstract readonly instanceEndpoint : Endpoint ;
112
106
public abstract readonly connections : ec2 . Connections ;
113
- public abstract readonly securityGroupId : string ;
114
107
115
108
/**
116
109
* Defines a CloudWatch event rule which triggers for instance events. Use
@@ -305,6 +298,13 @@ export interface DatabaseInstanceNewProps {
305
298
*/
306
299
readonly vpcPlacement ?: ec2 . SubnetSelection ;
307
300
301
+ /**
302
+ * The security groups to assign to the DB instance.
303
+ *
304
+ * @default - a new security group is created
305
+ */
306
+ readonly securityGroups ?: ec2 . ISecurityGroup [ ] ;
307
+
308
308
/**
309
309
* The port for the instance.
310
310
*
@@ -469,12 +469,11 @@ export interface DatabaseInstanceNewProps {
469
469
* A new database instance.
470
470
*/
471
471
abstract class DatabaseInstanceNew extends DatabaseInstanceBase implements IDatabaseInstance {
472
- public readonly securityGroupId : string ;
473
472
public readonly vpc : ec2 . IVpc ;
473
+ public readonly connections : ec2 . Connections ;
474
474
475
475
protected readonly vpcPlacement ?: ec2 . SubnetSelection ;
476
476
protected readonly newCfnProps : CfnDBInstanceProps ;
477
- protected readonly securityGroup : ec2 . SecurityGroup ;
478
477
479
478
private readonly cloudwatchLogsExports ?: string [ ] ;
480
479
private readonly cloudwatchLogsRetention ?: logs . RetentionDays ;
@@ -493,11 +492,15 @@ abstract class DatabaseInstanceNew extends DatabaseInstanceBase implements IData
493
492
subnetIds
494
493
} ) ;
495
494
496
- this . securityGroup = new ec2 . SecurityGroup ( this , 'SecurityGroup' , {
495
+ const securityGroups = props . securityGroups || [ new ec2 . SecurityGroup ( this , 'SecurityGroup' , {
497
496
description : `Security group for ${ this . node . id } database` ,
498
497
vpc : props . vpc
498
+ } ) ] ;
499
+
500
+ this . connections = new ec2 . Connections ( {
501
+ securityGroups,
502
+ defaultPort : ec2 . Port . tcp ( Lazy . numberValue ( { produce : ( ) => this . instanceEndpoint . port } ) )
499
503
} ) ;
500
- this . securityGroupId = this . securityGroup . securityGroupId ;
501
504
502
505
let monitoringRole ;
503
506
if ( props . monitoringInterval && props . monitoringInterval . toSeconds ( ) ) {
@@ -545,7 +548,7 @@ abstract class DatabaseInstanceNew extends DatabaseInstanceBase implements IData
545
548
processorFeatures : props . processorFeatures && renderProcessorFeatures ( props . processorFeatures ) ,
546
549
publiclyAccessible : props . vpcPlacement && props . vpcPlacement . subnetType === ec2 . SubnetType . PUBLIC ,
547
550
storageType,
548
- vpcSecurityGroups : [ this . securityGroupId ]
551
+ vpcSecurityGroups : securityGroups . map ( s => s . securityGroupId )
549
552
} ;
550
553
}
551
554
@@ -724,7 +727,6 @@ export class DatabaseInstance extends DatabaseInstanceSource implements IDatabas
724
727
public readonly dbInstanceEndpointAddress : string ;
725
728
public readonly dbInstanceEndpointPort : string ;
726
729
public readonly instanceEndpoint : Endpoint ;
727
- public readonly connections : ec2 . Connections ;
728
730
public readonly secret ?: secretsmanager . ISecret ;
729
731
730
732
constructor ( scope : Construct , id : string , props : DatabaseInstanceProps ) {
@@ -769,11 +771,6 @@ export class DatabaseInstance extends DatabaseInstanceSource implements IDatabas
769
771
} ) ;
770
772
}
771
773
772
- this . connections = new ec2 . Connections ( {
773
- securityGroups : [ this . securityGroup ] ,
774
- defaultPort : ec2 . Port . tcp ( this . instanceEndpoint . port )
775
- } ) ;
776
-
777
774
this . setLogRetention ( ) ;
778
775
}
779
776
}
@@ -816,7 +813,6 @@ export class DatabaseInstanceFromSnapshot extends DatabaseInstanceSource impleme
816
813
public readonly dbInstanceEndpointAddress : string ;
817
814
public readonly dbInstanceEndpointPort : string ;
818
815
public readonly instanceEndpoint : Endpoint ;
819
- public readonly connections : ec2 . Connections ;
820
816
public readonly secret ?: secretsmanager . ISecret ;
821
817
822
818
constructor ( scope : Construct , id : string , props : DatabaseInstanceFromSnapshotProps ) {
@@ -863,11 +859,6 @@ export class DatabaseInstanceFromSnapshot extends DatabaseInstanceSource impleme
863
859
} ) ;
864
860
}
865
861
866
- this . connections = new ec2 . Connections ( {
867
- securityGroups : [ this . securityGroup ] ,
868
- defaultPort : ec2 . Port . tcp ( this . instanceEndpoint . port )
869
- } ) ;
870
-
871
862
this . setLogRetention ( ) ;
872
863
}
873
864
}
@@ -910,7 +901,6 @@ export class DatabaseInstanceReadReplica extends DatabaseInstanceNew implements
910
901
public readonly dbInstanceEndpointAddress : string ;
911
902
public readonly dbInstanceEndpointPort : string ;
912
903
public readonly instanceEndpoint : Endpoint ;
913
- public readonly connections : ec2 . Connections ;
914
904
915
905
constructor ( scope : Construct , id : string , props : DatabaseInstanceReadReplicaProps ) {
916
906
super ( scope , id , props ) ;
@@ -934,11 +924,6 @@ export class DatabaseInstanceReadReplica extends DatabaseInstanceNew implements
934
924
applyToUpdateReplacePolicy : true
935
925
} ) ;
936
926
937
- this . connections = new ec2 . Connections ( {
938
- securityGroups : [ this . securityGroup ] ,
939
- defaultPort : ec2 . Port . tcp ( this . instanceEndpoint . port )
940
- } ) ;
941
-
942
927
this . setLogRetention ( ) ;
943
928
}
944
929
}
0 commit comments