Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(rds): enhanced monitoring configuration at the cluster level (#3…
…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