为什么 Terraform 上的这个参数定义中需要双斜杠?

Why are the double slash in this parameter definition on Terraform required?

目前正在努力编写 Terraform 模块来部署 Helm 图表,我得到了:

│ Error: YAML parse error on external-dns/templates/serviceaccount.yaml: error unmarshaling JSON: while decoding JSON: json: cannot unmarshal object into Go struct field .metadata.annotations of type string

像这样的资源定义:

resource "helm_release" "external_dns" {
  name       = "externaldns"
  namespace  = var.external_dns_namespace
  repository = "https://charts.bitnami.com/bitnami"
  chart      = "external-dns"
  version    = "5.3.0"

  set {
    name  = "serviceAccount.annotations.eks.amazonaws.com/role-arn"
    value = resource.aws_iam_role.external_dns_role.arn
  }
}

当我发现 public 存储库具有类似模块时:https://github.com/lablabs/terraform-aws-eks-external-dns/blob/master/main.tf 并看到它的最后一个参数定义为

  set {
    name  = "serviceAccount.annotations.eks\.amazonaws\.com/role-arn"
    value = aws_iam_role.external_dns[0].arn
  }

我尝试添加那些双斜杠 (\),一切正常!现在我想明白了......为什么在最后两个“。”之前需要这些双斜线。但其他两个没有?

我知道,在 Terraform 中,双斜杠的字面意思是斜杠......但我不明白为什么在那里需要它。

这就是我要放入 Terraform 模块的内容。

任何对此问题的解释帮助将不胜感激:)

name = "serviceAccount.annotations.eks\.amazonaws\.com/role-arn" 中你想定义 3 个组,用点分隔:

serviceAccount -> annotations -> eks.amazonaws.com/role-arn

由于您的第三组恰好包含点,您成功地发现必须转义点字符才能保持正确的结构。

如果不转义,字符串会以某种方式表示

serviceAccount -> annotations -> eks -> amazonaws-> com/role-arn,这里没有意义