代码之家  ›  专栏  ›  技术社区  ›  NorwegianClassic

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

  •  1
  • NorwegianClassic  · 技术社区  · 6 年前

    好的,我有三个 .tf -文件: main.tf 在我陈述Azure为提供商的地方, resources.tf 我的所有资源都被占用,以及 variables.tf .

    我用 变量 存储用户使用的密钥 TF资源 .

    但是,我希望使用存储在变量文件中的变量来填充后端作用域中的字段,如下所示:

    M.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}"
        }
    }
    

    变量存储在 变量 这样地:

    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”标志的部分配置 “TerraForm初始化”。

    有办法解决这个问题吗?我真的想把我所有的钥匙/秘密都放在同一个文件里…而且没有一个主要的键,我最好把它推到Git。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Yevgeniy Brikman    6 年前

    TerraForm不太关心文件名:它只加载所有文件名 .tf 当前目录中的文件并对其进行处理。名字像 main.tf , variables.tf outputs.tf 是一些有用的约定,可以让开发人员更容易地导航代码,但是它们不会对TerraForm的行为产生太大的影响。

    您看到错误的原因是您试图在 backend 配置。不幸的是,地形不允许任何插值(任何 ${...} )在后端。引用 documentation :

    只能指定一个后端,配置不能包含插入。TerraForm将对此进行验证。

    因此,您必须硬编码 后端 或提供 partial configuration 并使用外部工具(例如, Terragrunt )

    推荐文章