Terraform 错误:创建 CloudWatch 警报 ValidationError - 无效指标列表状态代码 400

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

我正在尝试使用 Terraform 为我的 Kinesis 数据流创建 CloudWatch 异常检测器警报。我根据其文档中的官方 Terraform

xx_anomaly_detection
示例进行了以下设置:

resource "aws_cloudwatch_metric_alarm" "my_anomaly_detector" {
  alarm_name                = "LowIncomingRecordsAnomaly"
  comparison_operator       = "LessThanLowerThreshold"
  evaluation_periods        = 2
  threshold_metric_id       = "ExpectedIncomingRecords"
  insufficient_data_actions = []

  metric_query {
    id          = "ExpectedIncomingRecords"
    expression  = "ANOMALY_DETECTION_BAND(IncomingRecords, 2)"
    label       = "IncomingRecords (Expected)"
    return_data = "true"
  }

  metric_query {
    id          = "IncomingRecords"
    return_data = "true"
    metric {
      namespace   = "AWS/Kinesis"
      metric_name = "PutRecords.Records"
      stat        = "Sum"
      period      = 300
      unit        = "Count"
      dimensions  = {
        StreamName = my_stream_name
      }
    }
  }
}

但是,当我运行

terraform apply
时,出现以下错误:

Error: creating CloudWatch Metric Alarm (LowIncomingRecordsAnomaly):
ValidationError: Invalid metrics list
        status code: 400, request id: 64e37e0c-4f74-4685-b29e

我的代码似乎与官方文档示例非常相似,那么什么会导致这种类型的错误呢?不幸的是“ValidationError 400”并没有说明实际问题

amazon-web-services terraform amazon-cloudwatch terraform-provider-aws cloudwatch-alarms
1个回答
0
投票

有趣的是,

id
子句中的
metric_query
似乎比文档中暗示的变量要少得多。这个Github线程中的某人提到改变
id
是有问题的,在将我的
id
值更改为“m1”和“e1”之后,如文档示例所示解决了我的问题:

resource "aws_cloudwatch_metric_alarm" "my_anomaly_detector" {
  alarm_name                = "LowIncomingRecordsAnomaly"
  threshold_metric_id       = "e1"
  . . .

  metric_query {
    id          = "e1"
    expression  = "ANOMALY_DETECTION_BAND(m1, 2)"
     . . .
  }

  metric_query {
    id          = "m1"
    metric {
       . . . 
      }
    }
  }
}

不确定为什么会出现这种情况,因为我相信这些应该是可更改的字段,但希望这可以解决其他人遇到的问题:)

© www.soinside.com 2019 - 2024. All rights reserved.