无法在 Cloudformation 模板中为 Cloudwatch 警报定义数学表达式

问题描述 投票:0回答:3

最近 AWS 宣布 Cloudwatch 警报可以在指标上使用数学表达式。我决定创建一个警报,将 2 个单个指标的总和与给定阈值进行比较。这意味着根据 AWS 文档,我的表达式应该是 SUM([m1,m2]),其中 m1 和 m2 是 2 个单个指标。 我还决定使用 cloudformation 模板(在 yaml 中)来实现这个想法。以下是 Cloudwatch 警报定义:

BillingAlarmExpression:
  Type: AWS::CloudWatch::Alarm
  Properties:
    AlarmActions:
      - !Ref BillingAlertTopic
    AlarmDescription: String
    ComparisonOperator: GreaterThanOrEqualToThreshold
    EvaluationPeriods: 1
    Metrics:
      - Id: m1
        MetricStat:
          Metric:
            Dimensions:
              - Name: ServiceName
                Value: AmazonEC2
              - Name: Currency
                Value: USD
            MetricName: Estimated­Charges
            Namespace: AWS/Billing
          Period: 86400
          Stat: Maximum
        ReturnData: False
      - Id: m2
        MetricStat:
          Metric:
            Dimensions:
              - Name: ServiceName
                Value: AmazonCloudwatch
              - Name: Currency
                Value: USD
            MetricName: Estimated­Charges
            Namespace: AWS/Billing
          Period: 86400
          Stat: Maximum
        ReturnData: False
      - Id: Expr1
        Expression: SUM([m1,m2])
        Label: Yeap
    Threshold: 100
    TreatMissingData: ignore

单个指标 m1 和 m2 与 EC2 和 Cloudwatch 服务的计费成本有关。我想检查的是这两项服务的收费是否超过了 100 美元的门槛。 (请注意,由于计费成本仅存储在弗吉尼亚北部地区,因此我尝试在弗吉尼亚北部部署上述模板)。 部署此模板期间,Cloudformation 响应以下错误:

"Invalid metrics list (Service: AmazonCloudWatch; Status Code: 400; Error Code: ValidationError; Request ID: c0748047-0378-11e9-ac36-5b1829988d18)"

当 Cloudformation 说“指标列表”时,它指的是 m1、m2、Expr1 的定义。更奇怪的是,当我使用 aws cli 中的上述指标列表定义时,计费数据成功返回:

aws cloudwatch get-metric-data --metric-data-queries file://./metric-data.json --start-time 2018-12-03T03:00:00Z --end-time 2018-12-10T04:30:00Z

,其中 metric-data.json 是上面的指标列表。

为了创建我的模板,我使用了以下指南: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.htmlhttps://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html

您知道 Cloudformation 为什么会返回此错误吗?谢谢!

amazon-web-services aws-cloudformation amazon-cloudwatch
3个回答
43
投票

Id
必须以小写字母开头,将
Expr1
更改为
expr1

来自文档

您可以更改 Id 的值。它可以包含数字、字母和下划线,并且必须以小写字母开头。


3
投票

我也遇到了这个问题——如果你的问题不是被接受的答案(

id
使用小写),这些事情也值得留意,因为它们可能会导致错误

  • 确保遵循
    MetricDataQuery
    的正确形状,并记下哪些属性实际上是可选的或不是可选的
  • 确保您正在编写的数学表达式是
    String
    (用引号引起来)
  • 确保您使用正确的
    MetricStat
    值(使用
    Max
    而不是
    Maximum
    会引发此错误)

我真的希望 AWS 能够围绕此添加更好的错误消息传递。

Invalid Metrics list
不是很有帮助:/


0
投票

如果您阅读的答案都没有解决问题,请回到基础知识并尝试手动创建它:

  1. 打开模板(来自
    build/cdk.out/

    您还可以使用
    --no-execute
    标志来部署堆栈,如下所示:
    cdk deploy --require-approval never --exclusively name-of-the-stack

    ...然后从变更集中下载模板。
  2. 找到触发此事件的警报
  3. 编辑现有警报或创建新警报
  4. 手动复制/粘贴模板中每个指标的值。
    注意:如果通过 UI 更新每个字段而不是一次性修改 JSON,会更容易看出问题所在。
© www.soinside.com 2019 - 2024. All rights reserved.