Невозможно определить математическое выражение для сигнала тревоги Cloudwatch в шаблоне облачной информации

Недавно AWS объявил, что в сигналах Cloudwatch могут использоваться математические выражения для метрик. Я решил создать сигнализацию, которая сравнивает сумму 2 отдельных показателей с заданным порогом. Это означает, что согласно документации AWS мое выражение должно быть SUM([m1,m2]), где m1 и m2 - две отдельные метрики. Я также решил реализовать эту идею, используя шаблон облачной информации (в 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. Я хочу проверить, превысила ли плата за эти 2 услуги порог в 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, данные об оплате возвращаются успешно:

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.html и https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html

У вас есть идея, почему Cloudformation возвращает эту ошибку? Спасибо!

2 ответа

Решение

Id должен начинаться со строчной буквы, изменить Expr1 в expr1,

Из документов:

Вы можете изменить значение Id. Он может содержать цифры, буквы и подчеркивания и должен начинаться со строчной буквы.

Я также столкнулся с этой проблемой - на случай, если ваша проблема не является принятым ответом ( idиспользует нижний регистр), на эти вещи также стоит обратить внимание, что может вызвать ошибку

  • Убедитесь, что вы следуете правильной форме того, чтоMetricDataQueryвыглядит так и обратите внимание, какие свойства на самом деле являются необязательными или нет
  • Убедитесь, что математическое выражение, которое вы пишете, является String(в кавычках)
  • Убедитесь, что вы используете правильныйMetricStatзначение (используя Maxвместо Maximumможет выкинуть эту ошибку)

Я очень надеюсь, что AWS постарается улучшить обмен сообщениями об ошибках. Invalid Metrics listне очень помогло :/

Другие вопросы по тегам