使用CloudFormation创建DynamoDB CloudWatch告警关联失败求助
解决CloudFormation中DynamoDB表与CloudWatch告警关联失败的问题
我来帮你排查这个问题——你遇到的不是AWS的bug,而是模板里的一个细节错误导致的,下面一步步分析和解决:
问题根源
你的CloudWatch告警配置里,维度名称存在错误:
模板中Dimensions的Name字段写的是TableName,这里面包含了一个看不见的特殊字符(可能是输入时误添加的非标准分隔符),而DynamoDB在CloudWatch中的标准维度名称是TableName(连续的单个单词,无任何分隔符)。这个错误会让CloudWatch无法识别对应的指标,进而出现“指标未被选中”和服务器连接错误的提示。
修正后的告警模板
把维度名称修正为标准的TableName即可,以下是修正后的完整告警代码:
DynamoDBAlarmThroughtputAlarm: DependsOn: DynamoDBTable Type: AWS::CloudWatch::Alarm Properties: ActionsEnabled: true AlarmActions: - !Ref ErrorSNSTopic AlarmDescription: For when the R/W of a dynamoDB table surpasses a certain throughput. ComparisonOperator: GreaterThanOrEqualToThreshold Dimensions: - Name: TableName Value: !Ref DynamoDBTable EvaluationPeriods: 1 MetricName: ConsumedWriteCapacityUnits Namespace: AWS/DynamoDB Period: 300 Statistic: Average Threshold: 1
额外优化建议(非问题直接原因)
你的DynamoDB表GSI的Hash Key用了Key,和主表的Range Key同名,虽然语法上合法,但容易造成逻辑混淆,建议改成更具语义的名称(比如ObjectKey),提升模板的可读性。
验证步骤
- 部署修正后的CloudFormation模板
- 进入CloudWatch控制台,查看该告警的指标关联状态,此时应该能正常选中DynamoDB的
ConsumedWriteCapacityUnits指标 - 如果仍有问题,可以手动在控制台创建一个相同配置的告警,对比维度名称是否完全一致,确认模板中没有隐藏的特殊字符
内容的提问来源于stack exchange,提问作者Alessandroempire
相关产品推荐
相关产品推荐

