Terraform 变量中的地形变量

Terraform 变量中的地形变量,terraform,Terraform,首先-道歉-我对使用terraform非常陌生(3小时了!) 我希望尝试在另一个变量的声明中使用一个变量的值 下面是我的代码-我做错了什么 变量。tf: variable "EnvironmentName" { type = "string" } variable "tags" { type = "map" default = { Environment = "${var.EnvironmentName}" CostCentre = "C1

首先-道歉-我对使用terraform非常陌生(3小时了!)

我希望尝试在另一个变量的声明中使用一个变量的值

下面是我的代码-我做错了什么

变量。tf:

variable "EnvironmentName" {
    type = "string"
}
variable "tags" {
    type = "map"
    default = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
    }
}
EnvShortName = "Dev"
EnvironmentName = "Development1"
#Location
Location = "westeurope"
resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${var.tags}”
}
Variables-dev.tfvars:

variable "EnvironmentName" {
    type = "string"
}
variable "tags" {
    type = "map"
    default = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
    }
}
EnvShortName = "Dev"
EnvironmentName = "Development1"
#Location
Location = "westeurope"
resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${var.tags}”
}
main.tf:

variable "EnvironmentName" {
    type = "string"
}
variable "tags" {
    type = "map"
    default = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
    }
}
EnvShortName = "Dev"
EnvironmentName = "Development1"
#Location
Location = "westeurope"
resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${var.tags}”
}
我得到以下错误:

错误:变量中的Variables.tf第18行不允许使用变量
“标记”:18:Environment=“${var.EnvironmentName}”
这里不能使用变量

我知道错误信息是不言自明的,可能是我的方法错了——但是我如何在另一个变量映射的定义中使用一个变量呢?这可能吗


我将支持多个资源—因此希望将标记构建为一个映射并传递到每个资源—但我还希望将映射与其他tfvars文件一起循环使用,以部署多个实例供不同团队使用。

Terraform不支持变量内的变量。 如果您想基于两个或多个变量生成一个值,那么可以尝试Terraform locals()

当地人应该帮助你们实现这个目标

差不多

locals {
tags = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
       }
}
然后您可以使用as
local.tags

resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${local.tags}”
}

希望这有帮助

但是我们需要在每个模块中定义它,如果我必须为整个平台实现,并且我有不同的资源模块,我应该在每个模块main.tf文件中创建它吗?