如何使用Terraform更新Azure订阅标签?

2lpgd968  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在尝试在订阅级别(而不是资源或资源组)上管理Azure标记。我们是not创建Terraform订阅,我们不能。创建订阅后,我们将为该订阅创建一个配置模板。在那里,我们管理诸如访问控制和所有权记录之类的事情。下面是订阅的标准配置模板。

module "subscription-project-pegasus" {
  source                     = "./modules/subscription/"

  subscription_access = [
    {
      aad_group = "all-employees-group"
      role      = "Reader"
    },
    {
      spn = "spn-pegasus"
      role = "Contributor"
    }
  ]

  ownership = {
    team = "Team Pegasus",
    pagerduty_id = "pegasus"
  }
}

我想在这里添加另一个可以在订阅级别应用的tags对象。

tags = {
    owner = "pegasus"
    environment = "nonprod"
  }

自定义模块./modules/subscriptions使用azurerm_role_assignment模块提供角色分配。但是,除了主要用于提供订阅的主azurerm_subscription模块之外,我找不到可以进行标记的模块。如果我使用这个,我相信Terraform将开始跟踪订阅的状态,这将是不理想的。
我正在寻找一种方法来添加这些标签的订阅级别,而不使用azurerm_subscription模块。请指教!

ryhaxcpt

ryhaxcpt1#

我尝试在不使用azurerm_subscription模块的情况下使用Terraform添加/更新Azure订阅标签,并成功地提供了需求。
如果您希望在订阅级别上管理标记而不使用azurerm_subscription模块(由于其状态跟踪),则可以使用local-exec provider来运行Azure CLI命令以将标记添加到订阅。

我的地形配置

main.tf

variable "subscription_id" {
  description = "The ID of the Azure subscription."
  type        = string
}

variable "tags" {
  description = "A map of tags to assign to the resource."
  type        = map(string)
  default     = {}
}

resource "null_resource" "subscription_tags" {
  provisioner "local-exec" {
    command = <<EOT
      az account set --subscription "${var.subscription_id}"
      az tag create --resource-id "/subscriptions/${var.subscription_id}" --tags ${join(" ", [for k, v in var.tags : "${k}=${v}"])}
    EOT
  }

  triggers = {
    tags = jsonencode(var.tags)
  }
}

输出:

这里我使用vinay作为所有者名称,env作为non-prod

相关问题