代码之家  ›  专栏  ›  技术社区  ›  Richie Thomas

尝试运行'terraform apply'时出现“验证错误”`

  •  0
  • Richie Thomas  · 技术社区  · 4 年前

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

    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 资源和运行 terraform apply 用我的New Relic API密钥和 -var-file 标志,则资源已成功创建。但当我取消评论 newrelic_nrql_警报_状态 如果重新运行该命令,则会出现以下错误:

    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行。这告诉我问题其实出在这个资源块上,而这个错误并不是在转移视线。

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

    有人知道我做错了什么吗?

    编辑:

    当我跑的时候 terraform validate 对于这个模块,我得到了信息 Success! The configuration is valid. .

    0 回复  |  直到 4 年前
        1
  •  0
  •   Richie Thomas    4 年前

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