如何在Terraform中配置多行字符串,实现filter字段换行书写
可以通过Terraform HCL原生的多行字符串语法实现filter字段的多行书写,不会影响过滤规则的实际运行效果,最推荐使用heredoc(行内文档)语法,书写更简洁无需转义引号:
resource "google_logging_metric" "my_metric" { description = "Check for logs of some cron job\t" name = "mycj-logs" # <<-EOF 会自动剔除每行开头的缩进制表符,最终生成的字符串格式更整洁 filter = <<-EOF resource.type="k8s_container" AND resource.labels.cluster_name="${local.k8s_name}" AND resource.labels.namespace_name="workable" AND resource.labels.container_name="mycontainer-cronjob" AND resource.labels.pod_name:"my-pod" EOF # Terraform v0.12+版本无需用${}包裹顶层插值表达式,直接引用即可 project = data.terraform_remote_state.gke_k8s_env.project_id metric_descriptor { metric_kind = "DELTA" value_type = "INT64" } }
其他可选方案:
- 如果不需要保留换行,也可以用字符串拼接实现:
filter = "resource.type=\"k8s_container\" " + "AND resource.labels.cluster_name=\"${local.k8s_name}\" " + "AND resource.labels.namespace_name=\"workable\" " + "AND resource.labels.container_name=\"mycontainer-cronjob\" " + "AND resource.labels.pod_name:\"my-pod\""
注意事项:
- Google Cloud Logging的过滤表达式本身会忽略空白字符(空格、换行、制表符),所以多行书写产生的换行不会影响过滤规则的正确性。
- 使用heredoc语法时,结束标记
EOF必须顶格书写,前面不能有任何缩进。
内容的提问来源于stack exchange,提问作者user16958659
相关产品推荐
相关产品推荐

