首页 文章

在TerraForm的中央部分定义标签

提问于
浏览
3

我正在玩Terraform一段时间,我想知道这是否可行 . 最佳做法是为您在AWS上创建的每个资源分配标签(例如) . 因此,您首先要做的是提出标记策略(例如,哪个业务部门,应用程序的名称,负责它的团队,......) .

但是,在Terraform中,这意味着您必须为每个资源重复每个标记块 . 这不是很方便,如果要更新其中一个标记名称,则必须更新您创建的每个资源 .

例如:

resource "aws_vpc" "vpc" {
  cidr_block = "${var.cidr}"

  tags {
    Name         = "${var.name}"
    Project      = "${var.projectname}"
    Environment  = "${var.environment}"
  }
}

如果我想在具有相同标签的VPC中创建子网和EC2,我必须重复该标签块 . 如果我想稍后更新其中一个标签名称,我必须单独更新每个资源,这非常耗时且乏味 .

是否有可能在集中位置创建一个标签块并参考?我在考虑模块,但这似乎不适合模块的定义 .

1 回答

  • 7

    您也可以从版本0.10.3尝试local values . 它允许您为表达式分配符号本地名称,以便在配置中多次使用它而不重复 .

    # Define the common tags for all resources
    locals {
      common_tags = {
        Component   = "awesome-app"
        Environment = "production"
      }
    }
    
    # Create a resource that blends the common tags with instance-specific tags.
    resource "aws_instance" "server" {
      ami           = "ami-123456"
      instance_type = "t2.micro"
    
      tags = "${merge(
        local.common_tags,
        map(
          "Name", "awesome-app-server",
          "Role", "server"
        )
      )}"
    }
    

相关问题