|
1 | 1 | CloudFormation do |
2 | 2 |
|
3 | | - Condition("EnableReader", FnEquals(Ref("EnableReader"), 'true')) |
4 | 3 | Condition("UseUsernameAndPassword", FnEquals(Ref(:SnapshotID), '')) |
5 | 4 | Condition("UseSnapshotID", FnNot(FnEquals(Ref(:SnapshotID), ''))) |
6 | 5 | Condition("CreateHostRecord", FnNot(FnEquals(Ref(:DnsDomain), ''))) |
7 | | - Condition("CreateReaderRecord", FnAnd([FnEquals(Ref("EnableReader"), 'true'), Condition('CreateHostRecord')])) |
8 | 6 |
|
9 | 7 | aurora_tags = [] |
10 | 8 | tags = external_parameters.fetch(:tags, {}) |
|
163 | 161 | end |
164 | 162 |
|
165 | 163 | engine_version = external_parameters.fetch(:engine_version, nil) |
| 164 | + engine_mode = external_parameters.fetch(:engine_mode, nil) |
166 | 165 | database_name = external_parameters.fetch(:database_name, nil) |
167 | 166 | storage_encrypted = external_parameters.fetch(:storage_encrypted, nil) |
168 | 167 | kms = external_parameters.fetch(:kms, false) |
169 | 168 | cluster_maintenance_window = external_parameters.fetch(:cluster_maintenance_window, nil) |
170 | 169 | cloudwatch_log_exports = external_parameters.fetch(:cloudwatch_log_exports, []) |
171 | 170 |
|
| 171 | + # for serverless v2 the EngineMode property in the DBCluster is to be left unset |
| 172 | + |
172 | 173 | RDS_DBCluster(:DBCluster) { |
173 | 174 | Engine 'aurora-postgresql' |
174 | 175 | EngineVersion engine_version unless engine_version.nil? |
175 | 176 | DBClusterParameterGroupName Ref(:DBClusterParameterGroup) |
176 | 177 | EnableCloudwatchLogsExports cloudwatch_log_exports if cloudwatch_log_exports.any? |
177 | 178 | PreferredMaintenanceWindow cluster_maintenance_window unless cluster_maintenance_window.nil? |
178 | | - SnapshotIdentifier FnIf('UseSnapshotID',Ref(:SnapshotID), Ref('AWS::NoValue')) |
| 179 | + SnapshotIdentifier FnIf('UseSnapshotID', Ref(:SnapshotID), Ref('AWS::NoValue')) |
179 | 180 | MasterUsername FnIf('UseUsernameAndPassword', instance_username, Ref('AWS::NoValue')) |
180 | 181 | MasterUserPassword FnIf('UseUsernameAndPassword', instance_password, Ref('AWS::NoValue')) |
181 | 182 | DBSubnetGroupName Ref(:DBClusterSubnetGroup) |
|
186 | 187 | Port external_parameters[:cluster_port] |
187 | 188 | Tags aurora_tags |
188 | 189 | AssociatedRoles cluster_roles if cluster_roles.any? |
| 190 | + |
| 191 | + if engine_mode == 'serverless' |
| 192 | + EnableHttpEndpoint Ref(:EnableHttpEndpoint) |
| 193 | + ServerlessV2ScalingConfiguration({ |
| 194 | + MinCapacity: Ref('MinCapacity'), |
| 195 | + MaxCapacity: Ref('MaxCapacity') |
| 196 | + }) |
| 197 | + end |
189 | 198 | } |
190 | 199 |
|
191 | 200 | instance_parameters = external_parameters.fetch(:instance_parameters, nil) |
|
201 | 210 | maint_window = external_parameters.fetch(:maint_window, nil) # key kept for backwards compatibility |
202 | 211 | writer_maintenance_window = external_parameters.fetch(:writer_maintenance_window, maint_window) |
203 | 212 |
|
204 | | - RDS_DBInstance(:DBClusterInstanceWriter) { |
205 | | - DBSubnetGroupName Ref(:DBClusterSubnetGroup) |
206 | | - DBParameterGroupName Ref(:DBInstanceParameterGroup) |
207 | | - DBClusterIdentifier Ref(:DBCluster) |
208 | | - Engine 'aurora-postgresql' |
209 | | - EngineVersion engine_version unless engine_version.nil? |
210 | | - AutoMinorVersionUpgrade minor_upgrade unless minor_upgrade.nil? |
211 | | - PreferredMaintenanceWindow writer_maintenance_window unless writer_maintenance_window.nil? |
212 | | - PubliclyAccessible 'false' |
213 | | - DBInstanceClass Ref(:WriterInstanceType) |
214 | | - Tags aurora_tags |
215 | | - } |
| 213 | + if engine_mode == 'serverless' |
| 214 | + RDS_DBInstance(:ServerlessDBInstance) { |
| 215 | + Engine 'aurora-postgresql' |
| 216 | + DBInstanceClass 'db.serverless' |
| 217 | + DBClusterIdentifier Ref(:DBCluster) |
| 218 | + } |
216 | 219 |
|
217 | | - reader_maintenance_window = external_parameters.fetch(:reader_maintenance_window, nil) |
| 220 | + else |
| 221 | + Condition("CreateReaderRecord", FnAnd([FnEquals(Ref("EnableReader"), 'true'), Condition('CreateHostRecord')])) |
| 222 | + Condition("EnableReader", FnEquals(Ref("EnableReader"), 'true')) |
| 223 | + |
| 224 | + RDS_DBInstance(:DBClusterInstanceWriter) { |
| 225 | + DBSubnetGroupName Ref(:DBClusterSubnetGroup) |
| 226 | + DBParameterGroupName Ref(:DBInstanceParameterGroup) |
| 227 | + DBClusterIdentifier Ref(:DBCluster) |
| 228 | + Engine 'aurora-postgresql' |
| 229 | + EngineVersion engine_version unless engine_version.nil? |
| 230 | + AutoMinorVersionUpgrade minor_upgrade unless minor_upgrade.nil? |
| 231 | + PreferredMaintenanceWindow writer_maintenance_window unless writer_maintenance_window.nil? |
| 232 | + PubliclyAccessible 'false' |
| 233 | + DBInstanceClass Ref(:WriterInstanceType) |
| 234 | + Tags aurora_tags |
| 235 | + } |
218 | 236 |
|
219 | | - RDS_DBInstance(:DBClusterInstanceReader) { |
220 | | - Condition(:EnableReader) |
221 | | - DBSubnetGroupName Ref(:DBClusterSubnetGroup) |
222 | | - DBParameterGroupName Ref(:DBInstanceParameterGroup) |
223 | | - DBClusterIdentifier Ref(:DBCluster) |
224 | | - Engine 'aurora-postgresql' |
225 | | - EngineVersion engine_version unless engine_version.nil? |
226 | | - AutoMinorVersionUpgrade minor_upgrade unless minor_upgrade.nil? |
227 | | - PreferredMaintenanceWindow reader_maintenance_window unless reader_maintenance_window.nil? |
228 | | - PubliclyAccessible 'false' |
229 | | - DBInstanceClass Ref(:ReaderInstanceType) |
230 | | - Tags aurora_tags |
231 | | - } |
| 237 | + reader_maintenance_window = external_parameters.fetch(:reader_maintenance_window, nil) |
| 238 | + |
| 239 | + RDS_DBInstance(:DBClusterInstanceReader) { |
| 240 | + Condition(:EnableReader) |
| 241 | + DBSubnetGroupName Ref(:DBClusterSubnetGroup) |
| 242 | + DBParameterGroupName Ref(:DBInstanceParameterGroup) |
| 243 | + DBClusterIdentifier Ref(:DBCluster) |
| 244 | + Engine 'aurora-postgresql' |
| 245 | + EngineVersion engine_version unless engine_version.nil? |
| 246 | + AutoMinorVersionUpgrade minor_upgrade unless minor_upgrade.nil? |
| 247 | + PreferredMaintenanceWindow reader_maintenance_window unless reader_maintenance_window.nil? |
| 248 | + PubliclyAccessible 'false' |
| 249 | + DBInstanceClass Ref(:ReaderInstanceType) |
| 250 | + Tags aurora_tags |
| 251 | + } |
232 | 252 |
|
233 | | - Route53_RecordSet(:DBClusterReaderRecord) { |
234 | | - Condition(:CreateReaderRecord) |
235 | | - HostedZoneName FnSub("#{external_parameters[:dns_format]}.") |
236 | | - Name FnSub("#{external_parameters[:hostname_read_endpoint]}.#{external_parameters[:dns_format]}.") |
237 | | - Type 'CNAME' |
238 | | - TTL '60' |
239 | | - ResourceRecords [ FnGetAtt('DBCluster','ReadEndpoint.Address') ] |
240 | | - } |
| 253 | + Route53_RecordSet(:DBClusterReaderRecord) { |
| 254 | + Condition(:CreateReaderRecord) |
| 255 | + HostedZoneName FnSub("#{external_parameters[:dns_format]}.") |
| 256 | + Name FnSub("#{external_parameters[:hostname_read_endpoint]}.#{external_parameters[:dns_format]}.") |
| 257 | + Type 'CNAME' |
| 258 | + TTL '60' |
| 259 | + ResourceRecords [ FnGetAtt('DBCluster','ReadEndpoint.Address') ] |
| 260 | + } |
| 261 | + end |
241 | 262 |
|
242 | 263 | Route53_RecordSet(:DBHostRecord) { |
243 | 264 | Condition(:CreateHostRecord) |
|
0 commit comments