我可以在TerraForm main.tf文件中使用变量吗?

时间:2018-09-18 11:18:14

标签: terraform terraform-provider-azure

好,所以我有三个.tf文件: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”标志的部分配置来   “ terrain init”。

有解决此问题的方法吗?我真的希望所有密钥/秘密都在同一个文件中...而不是主密钥,我最好将其推送到git。

2 个答案:

答案 0 :(得分:1)

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

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

  

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

因此,您必须硬编码backend中的所有值,或者提供一个partial configuration并使用外部工具(例如,{ {3}}。

答案 1 :(得分:0)

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

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

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