在 AWS 的 Terraform 标签中组合变量值和显式定义的变量值

Fra*_*ise 9 terraform terraform-provider-aws

目前,我正在研究使 AWS 资源的 Terraform 标签更加模块化的要求。在这种情况下,每个资源都会有一个唯一的标签“功能”,而要附加的其余标签将适用于所有资源。我想做的是将独特的“功能”值与每个资源的其他标签结合起来。

这是我到目前为止所得到的:

tags = {
Resource = "Example",
"${var.tags}
Run Code Online (Sandbox Code Playgroud)

该标签值在变量.tf文件中定义为映射,如下所示:

variable "tags" {
type        = map
description = "Tags for infrastructure resources."
}
Run Code Online (Sandbox Code Playgroud)

并在tfvars文件中填充:

tags = {
    "Product"     = "Name",
    "Application" = "App",
    "Owner"       = "Email"
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行TF Plan时,出现错误:

Expected an attribute value, introduced by an equals sign ("=").
Run Code Online (Sandbox Code Playgroud)

在 Terraform 中如何组合变量?在此先感谢您的帮助。

小智 11

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

tags = "${merge(var.resource_tags, {a="bb"})}"
Run Code Online (Sandbox Code Playgroud)


Fra*_*ise 8

经过进一步测试后发现了这一点。干得好:

tags = "${merge(var.tags, 
                map("Product", "Product Name", 
                    "App", "${var.environment}")
               )
         }"
Run Code Online (Sandbox Code Playgroud)

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