好,所以我有三个.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。
答案 0 :(得分:1)
Terraform不太关心文件名:它只是将当前目录中的所有.tf
文件加载并处理它们。诸如main.tf
,variables.tf
和outputs.tf
之类的名称是有用的约定,可以使开发人员更轻松地浏览代码,但不会对Terraform的行为产生太大影响。
看到错误的原因是您试图在backend
配置中使用变量。不幸的是,Terraform不允许在后端进行任何插值(任何${...}
)。引用documentation:
只能指定一个后端,并且配置中可能不包含插值。 Terraform将对此进行验证。
因此,您必须硬编码backend
中的所有值,或者提供一个partial configuration并使用外部工具(例如,{ {3}}。
答案 1 :(得分:0)
后端配置有一些重要限制:
Terraform后端配置,您可以在下面的链接中看到: https://www.terraform.io/docs/configuration/backend.html