@renovosolutions/cdk-library-cloudwatch-alarms
Version:
AWS CDK Construct Library to automatically create CloudWatch Alarms for resources in a CDK app based on resource type.
963 lines • 172 kB
JavaScript
"use strict";
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RdsAuroraRecommendedAlarmsAspect = exports.RdsInstanceRecommendedAlarmsAspect = exports.DatabaseCluster = exports.DatabaseInstance = exports.RdsAuroraRecommendedAlarms = exports.RdsInstanceRecommendedAlarms = exports.RdsAuroraBinLogReplicationLagAlarm = exports.RdsAuroraVolumeBytesLeftTotalAlarm = exports.RdsInstanceDbLoadAlarm = exports.RdsInstanceWriteLatencyAlarm = exports.RdsInstanceReadLatencyAlarm = exports.RdsInstanceFreeStorageSpaceAlarm = exports.RdsInstanceFreeLocalStorageAlarm = exports.RdsInstanceFreeableMemoryAlarm = exports.RdsInstanceDatabaseConnectionsAlarm = exports.RdsInstanceCpuUtilizationAlarm = exports.RdsRecommendedAlarmsMetrics = void 0;
exports.validateInstanceIdentifier = validateInstanceIdentifier;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const constructs_1 = require("constructs");
const common_1 = require("./common");
/**
* The recommended metrics for RDS alarms.
*/
var RdsRecommendedAlarmsMetrics;
(function (RdsRecommendedAlarmsMetrics) {
/**
* The percentage of CPU utilization for an RDS instance.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_CPU_UTILIZATION"] = "CPUUtilization";
/**
* The number of client network connections to the database instance.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_DATABASE_CONNECTIONS"] = "DatabaseConnections";
/**
* The amount of available memory (RAM) on the RDS instance.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_FREEABLE_MEMORY"] = "FreeableMemory";
/**
* The amount of available local storage space for an Aurora instance used for temporary files.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_FREE_LOCAL_STORAGE"] = "FreeLocalStorage";
/**
* The amount of available storage space for an Aurora instance.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_FREE_STORAGE_SPACE"] = "FreeStorageSpace";
/**
* The average amount of time taken per disk read I/O operation.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_READ_LATENCY"] = "ReadLatency";
/**
* The average amount of time taken per disk write I/O operation.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_WRITE_LATENCY"] = "WriteLatency";
/**
* The average active sessions (AAS) for the DB instance which shows how many sessions are concurrently active on the database.
*/
RdsRecommendedAlarmsMetrics["INSTANCE_DB_LOAD"] = "DBLoad";
/**
* The remaining available space for the cluster volume.
*/
RdsRecommendedAlarmsMetrics["AURORA_VOLUME_BYTES_LEFT_TOTAL"] = "AuroraVolumeBytesLeftTotal";
/**
* The amount of time that a binary log replica DB cluster running on Aurora MySQL lags behind the binary log replication source.
*/
RdsRecommendedAlarmsMetrics["AURORA_BIN_LOG_REPLICATION_LAG"] = "AuroraBinLogReplicaLag";
})(RdsRecommendedAlarmsMetrics || (exports.RdsRecommendedAlarmsMetrics = RdsRecommendedAlarmsMetrics = {}));
/**
* Validates that either instanceIdentifier or databaseInstance is specified.
*
* @param props The properties for the RdsInstanceAlarm construct.
*/
function validateInstanceIdentifier(props) {
if (!props.instanceIdentifier && !props.databaseInstance) {
throw new Error('Either instanceIdentifier or databaseInstance must be specified.');
}
}
/**
* An alarm that monitors CPU utilization for an RDS instance.
*
* This alarm is used to detect consistent high CPU utilization in order to prevent very
* high response time and time-outs.
*
* The alarm is triggered when the CPU utilization exceeds the % threshold.
*/
class RdsInstanceCpuUtilizationAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_CPU_UTILIZATION}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 5;
const datapointsToAlarm = props.datapointsToAlarm ?? 5;
const threshold = props.threshold ?? 90;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm is used to detect consistent high CPU utilization in order to '
+ 'prevent very high response time and time-outs. If you want to check micro-bursting '
+ 'of CPU utilization you can set a lower alarm evaluation time.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_CPU_UTILIZATION,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'Average',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceCpuUtilizationAlarm = RdsInstanceCpuUtilizationAlarm;
_a = JSII_RTTI_SYMBOL_1;
RdsInstanceCpuUtilizationAlarm[_a] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceCpuUtilizationAlarm", version: "0.0.13" };
/**
* An alarm that monitors the number of client network connections to the database instance.
*
* This alarm is used to help prevent rejected connections when the maximum number of DB
* connections is reached.
*
* The alarm is triggered when number of connections is greater than threshold.
*/
class RdsInstanceDatabaseConnectionsAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_DATABASE_CONNECTIONS}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 5;
const datapointsToAlarm = props.datapointsToAlarm ?? 5;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm is used to help prevent rejected connections when'
+ ' the maximum number of DB connections is reached. This alarm is not recommended if you frequently change DB'
+ ' instance class, because doing so changes the memory and default maximum number of connections.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_DATABASE_CONNECTIONS,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'Average',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceDatabaseConnectionsAlarm = RdsInstanceDatabaseConnectionsAlarm;
_b = JSII_RTTI_SYMBOL_1;
RdsInstanceDatabaseConnectionsAlarm[_b] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceDatabaseConnectionsAlarm", version: "0.0.13" };
/**
* An alarm that monitors the amount of available memory (RAM) on the RDS instance.
*
* This alarm is used to help prevent running out of memory which can result in rejected connections.
*
* The alarm is triggered when the percentage of available memory is less than threshold.
*/
class RdsInstanceFreeableMemoryAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_FREEABLE_MEMORY}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 15;
const datapointsToAlarm = props.datapointsToAlarm ?? 15;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm is used to help prevent running'
+ ' out of memory which can result in rejected connections.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_FREEABLE_MEMORY,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'Average',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceFreeableMemoryAlarm = RdsInstanceFreeableMemoryAlarm;
_c = JSII_RTTI_SYMBOL_1;
RdsInstanceFreeableMemoryAlarm[_c] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceFreeableMemoryAlarm", version: "0.0.13" };
/**
* An alarm that monitors the amount of available local storage space for an Aurora instance
* used for temporary files.
*
* This alarm is used to detect how close the Aurora DB instance is to reaching the local storage limit.
* This alarm can prevent an out-of-space error that occurs when your DB instance runs out of local storage.
*
* The alarm is triggered when the amount of available local storage space (bytes) is less than threshold.
*/
class RdsInstanceFreeLocalStorageAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_FREE_LOCAL_STORAGE}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 5;
const datapointsToAlarm = props.datapointsToAlarm ?? 5;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm is used to detect how close the Aurora DB instance is'
+ ' to reaching the local storage limit, if you do not use Aurora Serverless v2 or higher. Local storage can reach'
+ ' capacity when you store non-persistent data, such as temporary table and log files, in the local storage. This'
+ ' alarm can prevent an out-of-space error that occurs when your DB instance runs out of local storage.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_FREE_LOCAL_STORAGE,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'Average',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceFreeLocalStorageAlarm = RdsInstanceFreeLocalStorageAlarm;
_d = JSII_RTTI_SYMBOL_1;
RdsInstanceFreeLocalStorageAlarm[_d] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceFreeLocalStorageAlarm", version: "0.0.13" };
/**
* An alarm that monitors the amount of available storage space for an Aurora instance.
*
* This alarm helps prevent storage full issues. This can prevent downtime that occurs when your database
* instance runs out of storage.
*
* The alarm is triggered when the amount of available storage space (bytes) is less than threshold.
*/
class RdsInstanceFreeStorageSpaceAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_FREE_STORAGE_SPACE}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 5;
const datapointsToAlarm = props.datapointsToAlarm ?? 5;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm helps prevent storage full issues. This can prevent downtime'
+ ' that occurs when your database instance runs out of storage. We do not recommend using this alarm if you have storage'
+ ' auto scaling enabled, or if you frequently change the storage capacity of the database instance.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_FREE_STORAGE_SPACE,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'Average',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceFreeStorageSpaceAlarm = RdsInstanceFreeStorageSpaceAlarm;
_e = JSII_RTTI_SYMBOL_1;
RdsInstanceFreeStorageSpaceAlarm[_e] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceFreeStorageSpaceAlarm", version: "0.0.13" };
/**
* An alarm that monitors the average amount of time taken per disk read I/O operation.
*
* This alarm is used to detect high read latency. Database disks normally have a low read/write latency,
* but they can have issues that can cause high latency operations.
*
* The alarm is triggered when the average amount of time per disk read operation (in milliseconds) is
* greater than threshold.
*/
class RdsInstanceReadLatencyAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_READ_LATENCY}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 5;
const datapointsToAlarm = props.datapointsToAlarm ?? 5;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm helps to monitor high read latency. Database disks'
+ ' normally have a low read/write latency, but they can have issues that can cause high latency operations.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_READ_LATENCY,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'p90',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceReadLatencyAlarm = RdsInstanceReadLatencyAlarm;
_f = JSII_RTTI_SYMBOL_1;
RdsInstanceReadLatencyAlarm[_f] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceReadLatencyAlarm", version: "0.0.13" };
/**
* An alarm that monitors the average amount of time taken per disk write I/O operation.
*
* This alarm is used to detect high write latency. Database disks normally have a low read/write latency,
* but they can have issues that can cause high latency operations.
*
* The alarm is triggered when the average amount of time per disk write operation (in milliseconds) is
* greater than threshold.
*/
class RdsInstanceWriteLatencyAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_WRITE_LATENCY}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 5;
const datapointsToAlarm = props.datapointsToAlarm ?? 5;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm helps to monitor high write latency.'
+ ' Although database disks typically have low read/write latency, they may experience problems'
+ ' that cause high latency operations. Monitoring this will assure you the disk latency is as low as expected.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_WRITE_LATENCY,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'p90',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceWriteLatencyAlarm = RdsInstanceWriteLatencyAlarm;
_g = JSII_RTTI_SYMBOL_1;
RdsInstanceWriteLatencyAlarm[_g] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceWriteLatencyAlarm", version: "0.0.13" };
/**
* An alarm that monitors the number of concurrent active sessions on the database.
*
* This alarm helps to monitor high DB load. If the number of processes exceed the number of vCPUs,
* the processes start queuing. When the queuing increases, the performance is impacted.
*
* The alarm is triggered when the number of active sessions for the database is
* greater than threshold.
*/
class RdsInstanceDbLoadAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const instanceIdentifier = props.instanceIdentifier ? props.instanceIdentifier : props.databaseInstance?.instanceIdentifier;
const alarmName = props.alarmName ?? `${instanceIdentifier} - ${RdsRecommendedAlarmsMetrics.INSTANCE_DB_LOAD}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 15;
const datapointsToAlarm = props.datapointsToAlarm ?? 15;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm is used to detect a high DB load. High DB load'
+ ' can cause performance issues in the DB instance. This alarm is not applicable to serverless DB instances.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
validateInstanceIdentifier(props);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.INSTANCE_DB_LOAD,
dimensionsMap: {
DBInstanceIdentifier: instanceIdentifier,
},
statistic: 'Average',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsInstanceDbLoadAlarm = RdsInstanceDbLoadAlarm;
_h = JSII_RTTI_SYMBOL_1;
RdsInstanceDbLoadAlarm[_h] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceDbLoadAlarm", version: "0.0.13" };
/**
* An alarm that monitors the remaining available space (in bytes) for the cluster volume.
*
* This alarm is used to detect how close the Aurora cluster is to the volume size limit. This
* alarm can prevent an out-of-space error that occurs when your cluster runs out of space.
*
* The alarm is triggered when the remaining available space (in bytes) is less than threshold.
*/
class RdsAuroraVolumeBytesLeftTotalAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const alarmName = props.alarmName ?? `${props.databaseCluster.clusterIdentifier} - ${RdsRecommendedAlarmsMetrics.AURORA_VOLUME_BYTES_LEFT_TOTAL}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 2;
const datapointsToAlarm = props.datapointsToAlarm ?? 2;
const threshold = props.threshold;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm is used to detect how close the Aurora'
+ ' cluster is to the volume size limit. This alarm can prevent an out-of-space error that'
+ ' occurs when your cluster runs out of space. This alarm is recommended only for Aurora MySQL.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
if (!props.threshold) {
throw new Error(`The threshold must be specified for ${RdsRecommendedAlarmsMetrics.AURORA_VOLUME_BYTES_LEFT_TOTAL} alarm.`);
}
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.AURORA_VOLUME_BYTES_LEFT_TOTAL,
dimensionsMap: {
DBClusterIdentifier: props.databaseCluster.clusterIdentifier,
},
statistic: 'Average',
period,
}),
threshold: threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsAuroraVolumeBytesLeftTotalAlarm = RdsAuroraVolumeBytesLeftTotalAlarm;
_j = JSII_RTTI_SYMBOL_1;
RdsAuroraVolumeBytesLeftTotalAlarm[_j] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsAuroraVolumeBytesLeftTotalAlarm", version: "0.0.13" };
/**
* An alarm that monitors the error state of Aurora writer instance replication.
*
* This alarm is used to detect whether the writer instance is in an error state and can’t replicate the source.
*
* The alarm is triggered when the value is less than or equal to threshold.
*/
class RdsAuroraBinLogReplicationLagAlarm extends aws_cdk_lib_1.aws_cloudwatch.Alarm {
constructor(scope, id, props) {
const alarmName = props.alarmName ?? `${props.databaseCluster.clusterIdentifier} - ${RdsRecommendedAlarmsMetrics.AURORA_BIN_LOG_REPLICATION_LAG}`;
const period = props.period ?? aws_cdk_lib_1.Duration.minutes(1);
const evaluationPeriods = props.evaluationPeriods ?? 2;
const datapointsToAlarm = props.datapointsToAlarm ?? 2;
const threshold = props.threshold ?? -1;
const treatMissingData = props.treatMissingData ?? aws_cdk_lib_1.aws_cloudwatch.TreatMissingData.MISSING;
const alarmDescription = props.alarmDescription ?? 'This alarm is used to detect whether the writer instance '
+ 'is in an error state and can\'t replicate the source. This alarm is recommended only for Aurora MySQL.';
(0, common_1.validateTotalAlarmPeriod)(period, evaluationPeriods, alarmName);
super(scope, id, {
alarmName,
metric: new aws_cdk_lib_1.aws_cloudwatch.Metric({
namespace: 'AWS/RDS',
metricName: RdsRecommendedAlarmsMetrics.AURORA_BIN_LOG_REPLICATION_LAG,
dimensionsMap: {
DBClusterIdentifier: props.databaseCluster.clusterIdentifier,
Role: 'WRITER',
},
statistic: 'Average',
period,
}),
threshold,
evaluationPeriods,
datapointsToAlarm,
treatMissingData,
comparisonOperator: aws_cdk_lib_1.aws_cloudwatch.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD,
alarmDescription,
});
if (props.alarmAction)
this.addAlarmAction(props.alarmAction);
if (props.okAction)
this.addOkAction(props.okAction);
if (props.insufficientDataAction)
this.addInsufficientDataAction(props.insufficientDataAction);
}
}
exports.RdsAuroraBinLogReplicationLagAlarm = RdsAuroraBinLogReplicationLagAlarm;
_k = JSII_RTTI_SYMBOL_1;
RdsAuroraBinLogReplicationLagAlarm[_k] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsAuroraBinLogReplicationLagAlarm", version: "0.0.13" };
/**
* A construct that creates recommended alarms for an RDS cluster instance.
*
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#RDS
*/
class RdsInstanceRecommendedAlarms extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_CPU_UTILIZATION)) {
this.alarmCpuUtilization = new RdsInstanceCpuUtilizationAlarm(this, 'InstanceCpuUtilizationAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configCpuUtilizationAlarm,
});
if (props.defaultAlarmAction && !props.configCpuUtilizationAlarm?.alarmAction) {
this.alarmCpuUtilization.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configCpuUtilizationAlarm?.okAction) {
this.alarmCpuUtilization.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configCpuUtilizationAlarm?.insufficientDataAction) {
this.alarmCpuUtilization.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_DATABASE_CONNECTIONS)) {
this.alarmDatabaseConnections = new RdsInstanceDatabaseConnectionsAlarm(this, 'InstanceDatabaseConnectionsAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configDatabaseConnectionsAlarm,
});
if (props.defaultAlarmAction && !props.configDatabaseConnectionsAlarm.alarmAction) {
this.alarmDatabaseConnections.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configDatabaseConnectionsAlarm.okAction) {
this.alarmDatabaseConnections.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configDatabaseConnectionsAlarm.insufficientDataAction) {
this.alarmDatabaseConnections.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_FREEABLE_MEMORY)) {
this.alarmFreeableMemory = new RdsInstanceFreeableMemoryAlarm(this, 'InstanceFreeableMemoryAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configFreeableMemoryAlarm,
});
if (props.defaultAlarmAction && !props.configFreeableMemoryAlarm.alarmAction) {
this.alarmFreeableMemory.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configFreeableMemoryAlarm.okAction) {
this.alarmFreeableMemory.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configFreeableMemoryAlarm.insufficientDataAction) {
this.alarmFreeableMemory.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_FREE_LOCAL_STORAGE)) {
this.alarmFreeLocalStorage = new RdsInstanceFreeLocalStorageAlarm(this, 'InstanceFreeLocalStorageAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configFreeLocalStorageAlarm,
});
if (props.defaultAlarmAction && !props.configFreeLocalStorageAlarm.alarmAction) {
this.alarmFreeLocalStorage.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configFreeLocalStorageAlarm.okAction) {
this.alarmFreeLocalStorage.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configFreeLocalStorageAlarm.insufficientDataAction) {
this.alarmFreeLocalStorage.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_FREE_STORAGE_SPACE)) {
this.alarmFreeStorageSpace = new RdsInstanceFreeStorageSpaceAlarm(this, 'InstanceFreeStorageSpaceAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configFreeStorageSpaceAlarm,
});
if (props.defaultAlarmAction && !props.configFreeStorageSpaceAlarm.alarmAction) {
this.alarmFreeStorageSpace.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configFreeStorageSpaceAlarm.okAction) {
this.alarmFreeStorageSpace.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configFreeStorageSpaceAlarm.insufficientDataAction) {
this.alarmFreeStorageSpace.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_READ_LATENCY)) {
this.alarmReadLatency = new RdsInstanceReadLatencyAlarm(this, 'InstanceReadLatencyAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configReadLatencyAlarm,
});
if (props.defaultAlarmAction && !props.configReadLatencyAlarm.alarmAction) {
this.alarmReadLatency.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configReadLatencyAlarm.okAction) {
this.alarmReadLatency.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configReadLatencyAlarm.insufficientDataAction) {
this.alarmReadLatency.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_WRITE_LATENCY)) {
this.alarmWriteLatency = new RdsInstanceWriteLatencyAlarm(this, 'InstanceWriteLatencyAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configWriteLatencyAlarm,
});
if (props.defaultAlarmAction && !props.configWriteLatencyAlarm.alarmAction) {
this.alarmWriteLatency.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configWriteLatencyAlarm.okAction) {
this.alarmWriteLatency.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configWriteLatencyAlarm.insufficientDataAction) {
this.alarmWriteLatency.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.INSTANCE_DB_LOAD)) {
this.alarmDbLoad = new RdsInstanceDbLoadAlarm(this, 'InstanceDbLoadAlarm', {
instanceIdentifier: props.instanceIdentifier,
databaseInstance: props.databaseInstance,
treatMissingData: props.treatMissingData,
...props.configDbLoadAlarm,
});
if (props.defaultAlarmAction && !props.configDbLoadAlarm.alarmAction) {
this.alarmDbLoad.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction && !props.configDbLoadAlarm.okAction) {
this.alarmDbLoad.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction && !props.configDbLoadAlarm.insufficientDataAction) {
this.alarmDbLoad.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
}
}
exports.RdsInstanceRecommendedAlarms = RdsInstanceRecommendedAlarms;
_l = JSII_RTTI_SYMBOL_1;
RdsInstanceRecommendedAlarms[_l] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceRecommendedAlarms", version: "0.0.13" };
/**
* A construct that creates recommended alarms for an RDS cluster.
*
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#RDS
*/
class RdsAuroraRecommendedAlarms extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.AURORA_VOLUME_BYTES_LEFT_TOTAL) &&
props.databaseCluster.engine?.engineVersion?.fullVersion?.includes('mysql')) {
this.alarmAuroraVolumeBytesLeftTotal = new RdsAuroraVolumeBytesLeftTotalAlarm(this, 'AuroraVolumeBytesLeftTotalAlarm', {
databaseCluster: props.databaseCluster,
treatMissingData: props.treatMissingData,
...props.configAuroraVolumeBytesLeftTotalAlarm,
});
if (props.defaultAlarmAction &&
(!props.configAuroraVolumeBytesLeftTotalAlarm || !props.configAuroraVolumeBytesLeftTotalAlarm.alarmAction)) {
this.alarmAuroraVolumeBytesLeftTotal.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction &&
(!props.configAuroraVolumeBytesLeftTotalAlarm || !props.configAuroraVolumeBytesLeftTotalAlarm.okAction)) {
this.alarmAuroraVolumeBytesLeftTotal.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction &&
(!props.configAuroraVolumeBytesLeftTotalAlarm || !props.configAuroraVolumeBytesLeftTotalAlarm.insufficientDataAction)) {
this.alarmAuroraVolumeBytesLeftTotal.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
if (!props.excludeAlarms?.includes(RdsRecommendedAlarmsMetrics.AURORA_BIN_LOG_REPLICATION_LAG) &&
props.databaseCluster.engine?.engineVersion?.fullVersion?.includes('mysql')) {
this.alarmAuroraBinLogReplicationLag = new RdsAuroraBinLogReplicationLagAlarm(this, 'AuroraBinLogReplicationLagAlarm', {
databaseCluster: props.databaseCluster,
treatMissingData: props.treatMissingData,
...props.configAuroraBinLogReplicationLagAlarm,
});
if (props.defaultAlarmAction &&
(!props.configAuroraBinLogReplicationLagAlarm || !props.configAuroraBinLogReplicationLagAlarm.alarmAction)) {
this.alarmAuroraBinLogReplicationLag.addAlarmAction(props.defaultAlarmAction);
}
if (props.defaultOkAction &&
(!props.configAuroraBinLogReplicationLagAlarm || !props.configAuroraBinLogReplicationLagAlarm.okAction)) {
this.alarmAuroraBinLogReplicationLag.addOkAction(props.defaultOkAction);
}
if (props.defaultInsufficientDataAction &&
(!props.configAuroraBinLogReplicationLagAlarm || !props.configAuroraBinLogReplicationLagAlarm.insufficientDataAction)) {
this.alarmAuroraBinLogReplicationLag.addInsufficientDataAction(props.defaultInsufficientDataAction);
}
}
const instanceIdentifiers = props.databaseCluster.instanceIdentifiers;
instanceIdentifiers.forEach((instanceIdentifier, index) => {
new RdsInstanceRecommendedAlarms(this, `RdsInstanceRecommendedAlarmsFromAspect-${index}`, {
instanceIdentifier,
...props,
});
});
}
}
exports.RdsAuroraRecommendedAlarms = RdsAuroraRecommendedAlarms;
_m = JSII_RTTI_SYMBOL_1;
RdsAuroraRecommendedAlarms[_m] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsAuroraRecommendedAlarms", version: "0.0.13" };
/**
* An extension of the rds instance (database or cluster instance) construct
* that provides methods to create recommended alarms
*/
class DatabaseInstance extends aws_cdk_lib_1.aws_rds.DatabaseInstance {
constructor(scope, id, props) {
super(scope, id, props);
}
/**
* Creates an alarm that monitors the CpuUtilization.
*/
alarmCpuUtilization(props) {
return new RdsInstanceCpuUtilizationAlarm(this, 'InstanceCpuUtilizationAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates an alarm that monitors the DatabaseConnections.
*/
alarmDatabaseConnections(props) {
return new RdsInstanceDatabaseConnectionsAlarm(this, 'InstanceDatabaseConnectionsAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates an alarm that monitors the FreeableMemory.
*/
alarmFreeableMemory(props) {
return new RdsInstanceFreeableMemoryAlarm(this, 'InstanceFreeableMemoryAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates an alarm that monitors the FreeLocalStorage.
*/
alarmFreeLocalStorage(props) {
return new RdsInstanceFreeLocalStorageAlarm(this, 'InstanceFreeLocalStorageAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates an alarm that monitors the FreeStorageSpace.
*/
alarmFreeStorageSpace(props) {
return new RdsInstanceFreeStorageSpaceAlarm(this, 'InstanceFreeStorageSpaceAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates an alarm that monitors the ReadLatency.
*/
alarmReadLatency(props) {
return new RdsInstanceReadLatencyAlarm(this, 'InstanceReadLatencyAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates an alarm that monitors the WriteLatency.
*/
alarmWriteLatency(props) {
return new RdsInstanceWriteLatencyAlarm(this, 'InstanceWriteLatencyAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates an alarm that monitors the DbLoad.
*/
alarmDbLoad(props) {
return new RdsInstanceDbLoadAlarm(this, 'InstanceDbLoadAlarm', {
databaseInstance: this,
...props,
});
}
/**
* Creates recommended alarms for the database instance.
*
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#RDS
*/
applyRecommendedAlarms(props) {
return new RdsInstanceRecommendedAlarms(this, 'RdsInstanceRecommendedAlarms', {
databaseInstance: this,
...props,
});
}
}
exports.DatabaseInstance = DatabaseInstance;
_o = JSII_RTTI_SYMBOL_1;
DatabaseInstance[_o] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.DatabaseInstance", version: "0.0.13" };
/**
* An extension of the database cluster construct
* that provides methods to create recommended alarms
*/
class DatabaseCluster extends aws_cdk_lib_1.aws_rds.DatabaseCluster {
constructor(scope, id, props) {
super(scope, id, props);
}
/**
* Creates an alarm that monitors the AuroraVolumeBytesLeftTotal.
*/
alarmAuroraVolumeBytesLeftTotal(props) {
return new RdsAuroraVolumeBytesLeftTotalAlarm(this, 'AuroraVolumeBytesLeftTotalAlarm', {
databaseCluster: this,
...props,
});
}
/**
* Creates an alarm that monitors the Bin Log Replication lag.
*/
alarmAuroraBinLogReplicationLag(props) {
return new RdsAuroraBinLogReplicationLagAlarm(this, 'AuroraBinLogReplicationLagAlarm', {
databaseCluster: this,
...props,
});
}
/**
* Creates recommended alarms for the database cluster.
*
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#RDS
*/
applyRecommendedAlarms(props) {
return new RdsAuroraRecommendedAlarms(this, 'RdsAuroraRecommendedAlarms', {
databaseCluster: this,
...props,
});
}
}
exports.DatabaseCluster = DatabaseCluster;
_p = JSII_RTTI_SYMBOL_1;
DatabaseCluster[_p] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.DatabaseCluster", version: "0.0.13" };
/**
* An aspect that applies recommended alarms for RDS database instances.
*
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#RDS
*/
class RdsInstanceRecommendedAlarmsAspect {
constructor(props) {
this.props = props;
}
visit(node) {
if (node instanceof aws_cdk_lib_1.aws_rds.DatabaseInstance) {
if (this.props.excludeResources && this.props.excludeResources.includes(node.node.id)) {
return;
}
else {
const databaseInstance = node;
new RdsInstanceRecommendedAlarms(node, 'RdsInstanceRecommendedAlarmsFromAspect', {
databaseInstance,
...this.props,
});
}
}
}
}
exports.RdsInstanceRecommendedAlarmsAspect = RdsInstanceRecommendedAlarmsAspect;
_q = JSII_RTTI_SYMBOL_1;
RdsInstanceRecommendedAlarmsAspect[_q] = { fqn: "@renovosolutions/cdk-library-cloudwatch-alarms.RdsInstanceRecommendedAlarmsAspect", version: "0.0.13" };
/**
* An aspect that applies recommended alarms for RDS clusters.
*
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#RDS
*/
class RdsAuroraRecommendedAlarmsAspect {
constructor(props) {
this.props = props;
}
visit(node) {
if (node instanceof aws_cdk_lib_1.aws_rds.DatabaseCluster) {
if (this.props.excludeResources && this.props.excludeResources.includes(node.node.id)) {
return;
}
else {
const databaseCluster = node;
new RdsAuroraRecommendedAlarms(node, 'RdsAur