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

Terraform多行文heredoc行尾符随运行环境变更的问题如何解决?

解决方案

方案1:统一移除所有回车符(适用所有文本场景)

直接用Terraform内置的replace函数过滤掉heredoc内容中的所有\r字符,强制统一行尾为\n,不受运行环境和Git行尾转换逻辑影响。
修改后的资源示例如下:

resource "azurerm_key_vault_secret" "env_secrets" {
  name         = "my-secret"
  key_vault_id = var.key_vault_id

  value = replace(<<-EOT
  {
    "ADMIN_USER": "admin",
    "ADMIN_PASSWORD": "some_secret",
  }
  EOT
  , "\r", "")

  content_type = "application/x-json"
}

该方法为通用解法,不管是JSON、配置文件还是其他纯文本内容都可以使用。如果是读取外部文件的场景,也可以用同样的逻辑处理:replace(file("./config.txt"), "\r", "")。

方案2:使用jsonencode构造JSON内容(当前场景最优)

你当前存储的内容是标准JSON结构,完全可以不用手写heredoc,改用Terraform内置的jsonencode函数直接从Terraform对象生成标准JSON,从根源上避免手写文本带来的行尾符、语法错误等问题:

resource "azurerm_key_vault_secret" "env_secrets" {
  name         = "my-secret"
  key_vault_id = var.key_vault_id

  value = jsonencode({
    ADMIN_USER = "admin"
    ADMIN_PASSWORD = "some_secret"
  })

  content_type = "application/x-json"
}

该方案的额外优势是支持直接插入Terraform变量、自动处理转义字符,不需要手动维护JSON语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:27:02