【问题标题】:Can I use variables in the TerraForm main.tf file?我可以在 TerraForm main.tf 文件中使用变量吗?
【发布时间】:2019-02-22 10:05:33
【问题描述】:

好的,所以我有三个.tf-files:main.tf 我将 azure 声明为提供者,resources.tf 我的所有资源都已被声明,variables.tf

我使用variables.tf 来存储resources.tf 使用的密钥。

但是,我想使用存储在我的变量文件中的变量来填写后端范围内的字段,如下所示:

main.tf:

provider "azurerm" {
    version = "=1.5.0"
}

    terraform {
        backend "azurerm" {

        storage_account_name = "${var.sa_name}"
        container_name = "${var.c_name}"
        key = "${var.key}"
        access_key = "${var.access_key}"
    }
}

像这样存储在variables.tf 中的变量:

variable "sa_name" {
    default = "myStorageAccount"
}

variable "c_name" {
    default = "tfstate"
}

variable "key" {
    default = "codelab.microsoft.tfstate"
}

variable "access_key" {
    default = "weoghwoep489ug40gu ... "
}

我在运行terraform init时得到了这个:

terraform.backend:配置不能包含插值

Terraform 很早就加载了后端配置, 在可以初始化 Terraform 的核心之前。这是必要的 因为后端决定了该核心的行为。核心是 什么处理插值处理。因此,插值 不能用于后端配置。

如果您想参数化后端配置,我们建议 使用带有“-backend-config”标志的部分配置来 “地形初始化”。

有没有办法解决这个问题?我真的希望我的所有密钥/秘密都在同一个文件中......而不是我希望推送到 git 的主密钥。

【问题讨论】:

  • 您在这里遇到的问题并不太清楚。您能否编辑您的问题以准确解释您在做什么(显示您运行的步骤/命令以及您编写的任何代码)以及什么对您不起作用(引发的错误或意外行为)?
  • 当然,也许我的措辞令人困惑,实际上认为这个问题是众所周知的,并且有一个简单且众所周知的解决方案。马上修复,谢谢!
  • @ydaetskcoR 完成!

标签: terraform terraform-provider-azure


【解决方案1】:

Terraform 不太关心文件名:它只是加载当前目录中的所有.tf 文件并处理它们。 main.tfvariables.tfoutputs.tf 等名称是有用的约定,可让开发人员更轻松地浏览代码,但它们不会对 Terraform 的行为产生太大影响。

您看到错误的原因是您尝试在 backend 配置中使用变量。不幸的是,Terraform 不允许在后端进行任何插值(任何${...})。引用自documentation

只能指定一个后端,并且配置可能不包含插值。 Terraform 将对此进行验证。

因此,您必须硬编码backend 中的所有值,或者提供partial configuration 并使用外部工具(例如Terragrunt)通过CLI 参数填写其余配置。

【讨论】:

    【解决方案2】:

    后端配置有一些重要的限制:

    1. 一个配置只能提供一个后端块。
    2. 后端块不能引用命名值(如输入变量、本地变量或数据源属性)。

    Terraform 后端配置可以在下面的链接中看到: https://www.terraform.io/docs/configuration/backend.html

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多