Skip to content

Commit

Permalink
feat(rds): enhanced monitoring configuration at the cluster level (#3…
Browse files Browse the repository at this point in the history
…2157)

### Issue # (if applicable)

None

### Reason for this change

AWS RDS now supports the configuration of advanced monitoring at the cluster level.

<https://aws.amazon.com/about-aws/whats-new/2024/09/amazon-rds-performance-insights-supports-aurora-cluster-level-configuration/?nc1=h_ls>

This feature is essential for creating limitless database cluster. (#32151)

### Description of changes

I added `enableClusterLevelEnhancedMonitoring` prop to `ClusterProps`.
If this prop enabled, `monitoringInterval` and `monitoringRole` is applied to not the instances but the cluster.

Enhanced monitoring configuration for the cluster and instances has some restrictions.
- When setting the `monitoringRoleArn` for both the cluster and instances, the values must be identical.
- When setting the `monitoringInterval` for both the cluster and instances, the values must be identical.
- When the `monitoringInterval` or `monitoringRoleArn` is set at the cluster level, enhanced monitoring will be enabled even if the same values are not specified for the instances.

Based on the above, I decided to add a flag (`enableClusterLevelEnhancedMonitoring`) to switch the application of `monitoringInterval` and `monitoringRole` between the instance level and the cluster level to avoid breaking changes to the existing props.


#### Verification Results Memo

The value of the Enhanced Monitoring configuration must be the same for both the cluster level and the instance level.

```ts
  "DatabaseB269D8BB": {
   "Type": "AWS::RDS::DBCluster",
   "Properties": {
    ...,
    "Engine": "aurora-postgresql",
    "EngineVersion": "16.1",
    "MonitoringInterval": 5,
    "MonitoringRoleArn": {
     "Fn::GetAtt": [
      "DatabaseMonitoringRoleForCluster91F5067E",
      "Arn"
     ]
    },
  },
  "DatabasewriterInstanceEBFCC003": {
   "Type": "AWS::RDS::DBInstance",
   "Properties": {
    ...,
    "DBClusterIdentifier": {
     "Ref": "DatabaseB269D8BB"
    },
    "Engine": "aurora-postgresql",
    "MonitoringInterval": 1,
    "MonitoringRoleArn": {
     "Fn::GetAtt": [
      "DatabaseMonitoringRole576991DA",
      "Arn"
     ]
    },
  }
```

```sh
           | Database/writerInstance (DatabasewriterInstanceEBFCC003) Resource handler returned message: "MonitoringInterval conflicts with cluster level parameter. (Service: Rds, Status Code: 400, Request ID: 7c9d9023-fe2a-4b39-a939-22cec3595041)" (RequestToken: bc3e18eb-2daa-4f25-c205-11f1ec70fc15, HandlerErrorCode: InvalidRequest)
```

The monitoring role arn must be the same for both cluster and instance level.

```yaml
 "DatabaseB269D8BB": {
   "Type": "AWS::RDS::DBCluster",
   "Properties": {
    ...,
    "Engine": "aurora-postgresql",
    "EngineVersion": "16.1",
    "MonitoringInterval": 5,
    "MonitoringRoleArn": {
     "Fn::GetAtt": [
      "DatabaseMonitoringRoleForCluster91F5067E",
      "Arn"
     ]
    },
  },
  "DatabasewriterInstanceEBFCC003": {
   "Type": "AWS::RDS::DBInstance",
   "Properties": {
    ...,
    "DBClusterIdentifier": {
     "Ref": "DatabaseB269D8BB"
    },
    "Engine": "aurora-postgresql",
    "MonitoringInterval": 5,
    "MonitoringRoleArn": {
     "Fn::GetAtt": [
      "DatabaseMonitoringRole576991DA",
      "Arn"
     ]
    },
  }
```

```sh
Resource handler returned message: "MonitoringRoleArn conflicts with cluster level parameter. (Service: Rds, Status Code: 400, Request ID: 761a867d-409e-4208-a08e-5591607d0ed0)" (RequestToken: fb691324-f37c-405d-e5bd-447911f7664f, HandlerErrorCode: InvalidRequest)
```

### Description of how you validated changes

Add both unit and integ tests

### Checklist
- [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
  • Loading branch information
badmintoncryer authored Nov 22, 2024
1 parent b3e39a9 commit 01f2dcd
Show file tree
Hide file tree
Showing 14 changed files with 2,933 additions and 150 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 01f2dcd

Please sign in to comment.