You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform多行字符串无效报错及正则过滤变量列表问题求助

问题修复:Terraform多行字符串错误及代码语法修正

问题根源

你遇到的Invalid multi-line string错误,并非正则过滤逻辑导致,而是代码本身存在两处语法问题:

  • 字符串多引号错误:rule块的name字段末尾多了一个双引号,破坏了字符串的语法结构
  • 代码块未闭合:提供的代码片段中,jsonencode的对象、data块、rule块、grafana_rule_group资源块都没有完整闭合,导致Terraform解析时误判为多行字符串

修复后的完整代码

resource "grafana_rule_group" "cw_sqs_rule_group" {
  name             = "SQS queues"
  folder_uid       = grafana_folder.cw_sqs_rule_folder.uid
  interval_seconds = 180
  org_id           = 1

  rule {
    name           = "SQS message is older than 3 minutes"
    for            = "10m"
    condition      = "C"
    no_data_state  = "NoData"
    exec_err_state = "Alerting"

    annotations = {
      "description" = "{{ with $values }} SQS message is: {{ humanizeDuration $values.B.Value }} old {{ end }}"
    }

    labels = {
      "env"      = var.env
      "instance" = "SQS queue"
    }

    is_paused = false

    data {
      ref_id     = "A"
      query_type = ""

      relative_time_range {
        from = 1800
        to   = 0
      }

      datasource_uid = grafana_data_source.cloudwatch.uid
      model = jsonencode({
        dimensions = {
          QueueName = [ for queue_name in var.sqs_queues_list : queue_name if length(regexall(".+-dead-letter$", queue_name)) == 0 ]
        }
      })
    }
  }
}

variable "sqs_queues_list" {
  type        = list(string)
  default     = [
    "first-queue",
    "second-queue",
    "third-dead-letter"
  ]
}

关键修复点说明

  • 移除多余双引号:修正name字段的字符串语法,去掉末尾多余的双引号
  • 补全所有闭合块:依次补全jsonencode、data、rule、resource的闭合大括号,确保代码结构完整
  • 正则过滤逻辑保留:你原本的列表推导式过滤逻辑是正确的,会自动排除名称以-dead-letter结尾的死信队列

验证方式

执行terraform validate命令检查语法,确认无错误后再执行terraform plan或terraform apply,此时无论是否遍历列表,代码都能正常解析运行。

内容的提问来源于stack exchange,提问作者DisplayName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:02:15