如何阻止CDK自动创建DynamoDB表的已消耗容量CloudWatch告警?
如何阻止CDK为DynamoDB自动扩缩容创建CloudWatch缩容告警
当使用CDK的scaleOnUtilization方法配置DynamoDB表的读写容量自动扩缩容时,默认会生成两个CloudWatch告警:一个触发扩容(当ConsumedCapacityUnits利用率超过目标阈值),另一个触发缩容(当利用率低于阈值)。要避免生成缩容相关的告警,你可以放弃使用scaleOnUtilization,转而通过以下两种方式配置仅扩容的缩放策略:
方法一:禁用缩容的目标追踪策略
通过autoScaleReadCapacity返回的IScalableTableAttribute,使用targetTrackingScalingPolicy并设置disableScaleIn为true,这样只会创建扩容相关的告警,不会生成缩容告警:
// 创建表 Table myTable = dynamodb.Table.Builder.create(this, "MyTable") .partitionKey(AttributeDefinition.builder().name("id").type(AttributeType.STRING).build()) .billingMode(BillingMode.PROVISIONED) .readCapacity(10) .build(); // 配置自动扩缩容基础属性 EnableScalingProps readScalingProps = EnableScalingProps.builder() .minCapacity(10) .maxCapacity(100) .build(); IScalableTableAttribute scalableReadCapacity = myTable.autoScaleReadCapacity(readScalingProps); // 创建目标追踪策略,禁用缩容 scalableReadCapacity.addTargetTrackingScalingPolicy("ReadCapacityScalingPolicy", TargetTrackingScalingPolicyProps.builder() .targetValue(50) // 目标利用率50% .predefinedMetric(PredefinedMetric.DYNAMO_DB_READ_CAPACITY_UTILIZATION) .disableScaleIn(true) // 禁用缩容,不会生成缩容告警 .build());
方法二:手动定义扩容的指标缩放策略
如果你需要更精细的控制,可以直接基于CloudWatch指标创建仅扩容的缩放策略,完全跳过缩容逻辑:
// 创建表 Table myTable = dynamodb.Table.Builder.create(this, "MyTable") .partitionKey(AttributeDefinition.builder().name("id").type(AttributeType.STRING).build()) .billingMode(BillingMode.PROVISIONED) .readCapacity(10) .build(); // 配置自动扩缩容基础属性 EnableScalingProps readScalingProps = EnableScalingProps.builder() .minCapacity(10) .maxCapacity(100) .build(); IScalableTableAttribute scalableReadCapacity = myTable.autoScaleReadCapacity(readScalingProps); // 基于ConsumedReadCapacityUnits利用率创建扩容策略 scalableReadCapacity.scaleOnMetric("ScaleUpOnHighUtilization", MetricScalingProps.builder() .metric(myTable.metricConsumedReadCapacityUnits()) .scalingSteps(List.of( ScalingInterval.builder() .lower(5) // 当ConsumedReadCapacityUnits超过当前配置容量的50%(即10*0.5=5)时扩容 .change(10) // 每次增加10个读容量 .build() )) .adjustmentType(AdjustmentType.CHANGE_IN_CAPACITY) .build());
以上两种方式都不会生成缩容对应的CloudWatch告警,可有效减少仪表盘的噪音。
内容的提问来源于stack exchange,提问作者Ramón J Romero y Vigil
相关产品推荐
相关产品推荐

