在 AWS 的 Terraform 标签中组合变量值和明确定义的变量值

Combine Variable Values and Explicitly Defined Variable Values in Terraform Tags for AWS

目前,我正在处理一项要求,使 AWS 资源的 Terraform 标签更加模块化。在这种情况下,将有一个标签 'Function' 对每个资源都是唯一的,其余要附加的标签将应用于所有资源。我想要做的是将每个资源的唯一 'Function' 值与其他标签结合起来。

这是我目前得到的:

tags = {
Resource = "Example",
"${var.tags}

这个标签值在 variables.tf 文件中定义为一个地图,如下所示:

variable "tags" {
type        = map
description = "Tags for infrastructure resources."
}

并在 tfvars 文件中填充:

tags = {
    "Product"     = "Name",
    "Application" = "App",
    "Owner"       = "Email"
}

当我 运行 TF 计划 时,我收到一个错误:

Expected an attribute value, introduced by an equals sign ("=").

如何在 Terraform 中像这样组合变量?预先感谢您的帮助。

经过进一步测试后发现了这一点。给你:

tags = "${merge(var.tags, 
                map("Product", "Product Name", 
                    "App", "${var.environment}")
               )
         }"

因此,重申一下:此代码将合并一个 map 标签变量,这些标签(在我的例子中)适用于具有标签(产品和应用程序)的许多资源每个基础设施资源都是唯一的。希望这对将来的人有帮助。地球改造愉快。

在我的 tfvars 文件中创建值对我不起作用... 这是我的方法....

我在 variables.tf 文件中创建了一个单独的变量,以便在标记过程中调用..

我的标签默认变量是来自父模块的 imported/pass。 因此它不需要指定任何默认数据。 子模块中的额外标记在 sub_tags 变量中完成..

imported/passed from parent/root module

variable "tags" {
    type = "map"
}

tags in the child module

variable "sub_tags"{
    type = "map"
    default = {
      Extra_Tags_key = "extra tagging value"
    }
}

在需要额外标记的资源中..我这样称呼它

 tags   = "${merge(var.tags, var.sub_tags)}"

这对我很有用

我尝试使用地图,它确实适用于新版本。 下面几行对我有用:

tags = "${merge(var.resource_tags, {a="bb"})}"