如何通过CDK获取CfnDeliveryStream的CloudWatch告警相关指标
解答
可以,具体实现方案和逻辑如下:
- 若你还未创建Firehose Delivery Stream资源,建议直接使用L2级
DeliveryStream类完成资源定义,实例自带官方封装的全量指标方法,调用后可直接生成配置正确的CloudWatch指标对象,无需手动填写命名空间、维度等参数。 - 若你已经基于L1级
CfnDeliveryStream完成了资源配置,无需重构原有代码,可通过DeliveryStream.fromDeliveryStreamAttributes()静态方法将现有L1资源导入为L2类的引用实例,即可正常调用指标方法,参考代码如下:
import * as firehose from '@aws-cdk/aws-kinesisfirehose'; import * as cloudwatch from '@aws-cdk/aws-cloudwatch'; // 你的已有L1 Firehose资源定义 const myCfnStream = new firehose.CfnDeliveryStream(this, 'MyCfnDeliveryStream', { // 原有配置保持不变 extendedS3DestinationConfiguration: { // 你的目标配置 bucketArn: 'xxx', roleArn: 'xxx' } }); // 将L1资源导入为L2引用 const l2StreamRef = firehose.DeliveryStream.fromDeliveryStreamAttributes(this, 'ImportedL2Stream', { deliveryStreamName: myCfnStream.ref, deliveryStreamArn: myCfnStream.attrArn }); // 调用指标方法获取对应指标,比如检测流入流量的指标 const incomingBytesMetric = l2StreamRef.metricIncomingBytes(); // 基于指标创建告警 new cloudwatch.Alarm(this, 'NoIncomingDataAlarm', { metric: incomingBytesMetric, threshold: 0, evaluationPeriods: 3, comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD, alarmDescription: '连续3个周期无数据流入Firehose' });
该方案的核心逻辑是CDK L1和L2资源对应的底层服务指标规则完全一致:L2类的指标方法只是自动帮你填充了Firehose服务固定的指标命名空间
AWS/Firehose和DeliveryStreamName维度,只要导入时传入的流名称、ARN和实际使用的资源匹配,生成的指标和手动构造的指标完全等效,还能避免手动配置的拼写错误。
内容的提问来源于stack exchange,提问作者RogerThat
相关产品推荐
相关产品推荐

