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

Posted

技术标签:

【中文标题】无法在 Cloudformation 模板中定义 Cloudwatch 警报的数学表达式【英文标题】:Unable to define Math Expression for Cloudwatch Alarm in a Cloudformation Template 【发布时间】:2019-05-19 20:48:13 【问题描述】:

RecentlyAWS 宣布 Cloudwatch 警报可以在指标上使用数学表达式。我决定创建一个警报,将 2 个单一指标的总和与给定阈值进行比较。这意味着根据AWS documentation,我的表达式应该是 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 美元的门槛。 (请注意,由于计费成本专门存储在 N.Virginia 地区,我尝试在 N.Virginia 中部署上述模板)。 在部署此模板期间,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 的 metrics-list 定义时,计费数据返回成功:

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就是上面的metrics-list。

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

您知道 Cloudformation 为何返回此错误吗?谢谢!

【问题讨论】:

【参考方案1】:

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

来自docs:

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

【讨论】:

是的!这就是问题所在!非常感谢! 不客气!不要忘记接受答案:) @P.Str 您是否检查过您的表达式 SUM([m1,m2]) 是否真的给出了正确的总和?在我的情况下,它不是。 因“指标列表无效”而发现 真的可以在这里使用来自亚马逊的一些更好的错误消息。谢谢。

以上是关于无法在 Cloudformation 模板中定义 Cloudwatch 警报的数学表达式的主要内容,如果未能解决你的问题,请参考以下文章

当自定义命名资源需要替换时,CloudFormation 无法更新堆栈

在 CloudFormation 模板中为 Aurora 数据库集群定义 AutoScaling

是否有定义了多个 CacheBehaviors 的示例 cloudformation 模板?

如何在 AWS Cloudformation 模板文件中获取用户名?

我可以在参数部分 AWS CloudFormation 模板中将标签定义为参数吗

如何使用 cloudformation 模板创建 cloudwatch 事件?