【问题标题】:"Validation Error" when trying to run `terraform apply`尝试运行“terraform apply”时出现“验证错误”
【发布时间】:2021-10-14 12:59:06
【问题描述】:

我正在尝试创建以下资源:

resource "newrelic_alert_policy" "rpm_production_alert_policy" {
  name = "RPM (Production) Alert Policy (Terraform)"
  incident_preference = "PER_CONDITION"
}

resource "newrelic_alert_channel" "rpm_production_slack" {
  name                          = "RPM Production Slack (Terraform)"
  type                          = "slack"
  config {
    channel                     = "rpm-terrarelic"
    url                         = "URLGOESHERE (obfuscated)"
  }
}

resource "newrelic_alert_policy_channel" "rpm_production_alert_policy_slack" {
  policy_id                     = newrelic_alert_policy.rpm_production_alert_policy.id
  channel_ids                   = [
                                    newrelic_alert_channel.rpm_production_slack.id
                                  ]
}

resource "newrelic_nrql_alert_condition" "median_duration" {
  policy_id                     = newrelic_alert_policy.rpm_production_alert_policy.id
  name                          = "median_duration"
  description                   = "Alert when transactions are taking too long (this is a test description)"
  nrql {
    query                       = "SELECT median(duration) from Transaction where team = 'rpm' facet name since 1 month ago limit 500"
    evaluation_offset           = 3
  }
  critical {
    operator                    = "above"
    threshold                   = 2
    threshold_duration          = 60
    threshold_occurrences       = "AT_LEAST_ONCE"
  }
  violation_time_limit_seconds  = 3600
  value_function                = "single_value"
}

当我注释掉 newrelic_nrql_alert_condition 资源并使用我的 New Relic API 密钥和 -var-file 标志运行 terraform apply 时,资源已成功创建。但是当我取消注释 newrelic_nrql_alert_condition 资源并重新运行命令时,我收到以下错误:

newrelic_nrql_alert_condition.median_duration: Creating...
╷
│ Error: Validation Error
│ 
│   with newrelic_nrql_alert_condition.median_duration,
│   on foobar.tf line 22, in resource "newrelic_nrql_alert_condition" "median_duration":
│   22: resource "newrelic_nrql_alert_condition" "median_duration" {
│ 
╵

最后一行 (22: resource "newrelic_nrql_alert_condition" "median_duration" {) 中的 { 带有下划线,表示这是验证错误所在,但我看不出此资源语句与具有不同值的相同资源语句之间有任何偏差诸如nrql.query 之类的关键字,因此错误消息表面上看起来并没有太大帮助。

我为资源的 name 参数尝试了不同的值,认为 New Relic 中的警报条件可能存在唯一性约束,但这不起作用。

我尝试将有问题的资源块移动到文件的顶部,以防错误是文件中早期语法问题的红鲱鱼,但随后我看到了相同的错误消息,但引用了第 1 行第 22 行。这告诉我问题确实出在这个资源块上,并且错误不是红鲱鱼。

我在 Google 上搜索了可以解释不同类型的验证错误的文档,但我找不到任何文档。

谁能看到我在这里做错了什么?

编辑:

当我为此模块运行terraform validate 时,我收到消息Success! The configuration is valid.。

【问题讨论】:

  • 执行plan时会不会出现同样的错误?

标签: terraform newrelic


【解决方案1】:

在研究 New Relic Terraform Provider GitHub page 中当前和已解决的问题时,我发现可以传递 TF_LOG 标志以进行更精细的日志记录。在传递了这个标志并发现 2.21.0 版本的日志详细信息不足后,我发现 gem 的 2.29.0 版本具有更精细的日志详细信息。我再次升级并传递标志,发现传递给警报条件的 NRQL 查询不能包含LIMIT 子句。我删除了我包含的那个,然后重新运行terraform apply,它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2017-04-04
    • 2018-05-28
    相关资源
    最近更新 更多