我正在尝试使用 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”并没有说明实际问题
有趣的是,
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 {
. . .
}
}
}
}
不确定为什么会出现这种情况,因为我相信这些应该是可更改的字段,但希望这可以解决其他人遇到的问题:)