You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CDK为已创建的ElastiCache(Redis)配置CloudWatch告警?

问题

我已通过CDK代码创建了运行正常的ElastiCache Redis复制组,代码如下:

redis = new elasticache.CfnReplicationGroup(this, id + 'RedisCluster', {
            port: 6379,
            clusterMode: 'disabled',
            replicasPerNodeGroup: 1,
            cacheNodeType: cache.t4g.micro,
            engine: 'Redis',
            multiAzEnabled: true,
            autoMinorVersionUpgrade: false,
            cacheParameterGroupName: parameterGroup.ref,
            engineVersion: '7.0',
            cacheSubnetGroupName: subnetGroup.cacheSubnetGroupName,
            securityGroupIds: [securityGroup.securityGroupId],
            replicationGroupDescription: 'My Redis',
        });

现在我想要添加CloudWatch告警,尝试编写了如下代码:

const alarm = new cloudwatch.Alarm(this, 'MyAlarm', {
        metric: new cloudwatch.Metric({
            namespace: "AWS/ElastiCache",
            metricName: "DatabaseMemoryUsagePercentage",
            period: Duration.minutes(1),
            unit: cloudwatch.Unit.PERCENT,
            statistic: cloudwatch.Stats.AVERAGE,
            dimensionsMap: {
                CacheClusterId: << 此处应填什么值 >>,             
                // CacheNodeId: << 是否需要填写? >>,
            },
        }),
        threshold: 60, // Memory Utilisation percentage
        evaluationPeriods: 1,
        datapointsToAlarm: 1,
    });

我不确定CacheClusterId应该填写什么值。我尝试从redis变量中获取相关值,结果如下:

console.log(redis.replicationGroupId); // 返回null
console.log(redis.primaryClusterId); // 返回null
console.log(redis.node); // 返回一些数据,但找不到所需的唯一标识符

请问如何为这个Redis实例添加CloudWatch告警?

解决方案

核心问题修正

  1. 维度选择错误:你创建的是Redis复制组(ReplicationGroup),CloudWatch指标DatabaseMemoryUsagePercentage对应的正确维度是ReplicationGroupId,而非CacheClusterId(后者仅用于独立的单节点缓存集群资源)。
  2. 属性获取方式错误:CfnReplicationGroup是CDK的低级构造资源,直接访问replicationGroupId会返回null——这类由AWS部署时生成的动态属性,必须通过attr前缀的方法获取。

修正后的完整代码

// 从CfnReplicationGroup获取部署时生成的复制组ID
const replicationGroupId = redis.attrReplicationGroupId;

// 创建CloudWatch内存使用率告警
const redisMemoryAlarm = new cloudwatch.Alarm(this, 'RedisMemoryUsageAlarm', {
    metric: new cloudwatch.Metric({
        namespace: 'AWS/ElastiCache',
        metricName: 'DatabaseMemoryUsagePercentage',
        period: Duration.minutes(1),
        unit: cloudwatch.Unit.PERCENT,
        statistic: cloudwatch.Stats.AVERAGE,
        dimensionsMap: {
            ReplicationGroupId: replicationGroupId, // 使用正确的维度
        },
    }),
    threshold: 60,
    evaluationPeriods: 1,
    datapointsToAlarm: 1,
    alarmDescription: 'Redis复制组内存使用率超过60%',
    comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
});

额外说明

  • 是否需要CacheNodeId?:不需要。指定ReplicationGroupId后,指标会自动聚合整个复制组的统计值;若需监控单个节点(比如主节点),才需要添加CacheNodeId维度,但一般场景下监控复制组整体即可。
  • 为什么之前的属性返回null?:CDK的Cfn类资源中,非手动设置的动态属性(如AWS生成的ID),必须通过attrXxx格式的方法获取,这些值在CDK编译阶段无法确定,只有部署时才会生成。

内容的提问来源于stack exchange,提问作者Sam Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:40:59