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
相关产品推荐
相关产品推荐

