使用标记整理 Azure 资源

可将标记应用于 Azure 资源,以便按类别在逻辑上对它们进行组织。 每个标记包含一个名称和一个值。 例如,可以对生产中的所有资源应用名称“Environment”和值“Production”。

应用标记以后,即可使用该标记名称和值检索订阅中的所有资源。 使用标记可以从不同资源组中检索相关资源。 需要为计费或管理目的组织资源时,此方法可能很有用。

以下限制适用于标记:

  • 每个资源或资源组最多可以有 15 个标记名称值对。 此限制仅适用于直接应用到资源组或资源的标记。 资源组可以包含多个资源,这些资源每个都有 15 个标记名称值对。 如果有超过 15 个需要与资源关联的值,请将 JSON 字符串用于标记值。 JSON 字符串可以包含多个应用于单个标记名称的值。 本文介绍了一个将 JSON 字符串分配给标记的示例。
  • 标记名称不能超过 512 个字符,标记值不能超过 256 个字符。 对于存储帐户,标记名称不能超过 128 个字符,标记值不能超过 256 个字符。
  • 应用于资源组的标记不会被该资源组中的资源继承。
  • 不能将标记应用到云服务等经典资源。
  • 标记名称不能包含以下字符:<>%&\?/

Note

本文介绍如何删除设备或服务中的个人数据,并且可为 GDPR 下的任务提供支持。 如需关于 GDPR 的常规信息,请参阅服务信任门户的 GDPR 部分

PowerShell

本文中的示例需要版本 6.0 或更高版本的 Azure PowerShell。 如果没有版本 6.0 或更高版本,请更新版本

若要查看资源组的现有标记,请使用:

(Get-AzureRmResourceGroup -Name examplegroup).Tags

该脚本返回以下格式:

Name                           Value
----                           -----
Dept                           IT
Environment                    Test

若要查看具有指定资源 ID 的资源的现有标记,请使用:

(Get-AzureRmResource -ResourceId /subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>).Tags

或者,若要查看具有指定名称和资源组的资源的现有标记,请使用:

(Get-AzureRmResource -ResourceName examplevnet -ResourceGroupName examplegroup).Tags

若要获取具有特定标记的资源组,请使用:

(Get-AzureRmResourceGroup -Tag @{ Dept="Finance" }).ResourceGroupName

若要获取具有特定标记的资源,请使用:

(Get-AzureRmResource -Tag @{ Dept="Finance"}).Name

若要获取具有特定标记名称的资源,请使用:

(Get-AzureRmResource -TagName Dept).Name

每次将标记应用到某个资源或资源组时,都会覆盖该资源或资源组中的现有标记。 因此,必须根据该资源或资源组是否包含现有标记来使用不同的方法。

若要将标记添加到不包含现有标记的资源组,请使用:

Set-AzureRmResourceGroup -Name examplegroup -Tag @{ Dept="IT"; Environment="Test" }

若要将标记添加到包含现有标记的资源组,请检索现有标记,添加新标记,然后重新应用标记:

$tags = (Get-AzureRmResourceGroup -Name examplegroup).Tags
$tags.Add("Status", "Approved")
Set-AzureRmResourceGroup -Tag $tags -Name examplegroup

若要将标记添加到不包含现有标记的资源,请使用:

$r = Get-AzureRmResource -ResourceName examplevnet -ResourceGroupName examplegroup
Set-AzureRmResource -Tag @{ Dept="IT"; Environment="Test" } -ResourceId $r.ResourceId -Force

若要将标记添加到包含现有标记的资源,请使用:

$r = Get-AzureRmResource -ResourceName examplevnet -ResourceGroupName examplegroup
$r.Tags.Add("Status", "Approved") 
Set-AzureRmResource -Tag $r.Tags -ResourceId $r.ResourceId -Force

要将资源组中的所有标记应用于其资源,并且不保留资源上的现有标记,请使用以下脚本:

$groups = Get-AzureRmResourceGroup
foreach ($g in $groups)
{
    Get-AzureRmResource -ResourceGroupName $g.ResourceGroupName | ForEach-Object {Set-AzureRmResource -ResourceId $_.ResourceId -Tag $g.Tags -Force }
}

要将资源组中的所有标记应用于其资源,并且保留资源上不重复的现有标记,请使用以下脚本:

$group = Get-AzureRmResourceGroup "examplegroup"
if ($group.Tags -ne $null) {
    $resources = Get-AzureRmResource -ResourceGroupName $group.ResourceGroupName
    foreach ($r in $resources)
    {
        $resourcetags = (Get-AzureRmResource -ResourceId $r.ResourceId).Tags
        if ($resourcetags)
        {
            foreach ($key in $group.Tags.Keys)
            {
                if (-not($resourcetags.ContainsKey($key)))
                {
                    $resourcetags.Add($key, $group.Tags[$key])
                }
            }
            Set-AzureRmResource -Tag $resourcetags -ResourceId $r.ResourceId -Force
        }
        else
        {
            Set-AzureRmResource -Tag $group.Tags -ResourceId $r.ResourceId -Force
        }
    }
}

若要删除所有标记,请传递一个空哈希表:

Set-AzureRmResourceGroup -Tag @{} -Name examplegroup

Azure CLI

若要查看资源组的现有标记,请使用:

az group show -n examplegroup --query tags

该脚本返回以下格式:

{
  "Dept"        : "IT",
  "Environment" : "Test"
}

或者,若要查看具有指定名称、类型和资源组的资源的现有标记,请使用:

az resource show -n examplevnet -g examplegroup --resource-type "Microsoft.Network/virtualNetworks" --query tags

循环访问资源集合时,可能想要按资源 ID 显示资源。 本文稍后介绍一个完整的示例。 若要查看具有指定资源 ID 的资源的现有标记,请使用:

az resource show --id <resource-id> --query tags

若要获取具有特定标记的资源组,请使用 az group list

az group list --tag Dept=IT

若要获取具有特定标记和值的所有资源,请使用 az resource list

az resource list --tag Dept=Finance

每次将标记应用到某个资源或资源组时,都会覆盖该资源或资源组中的现有标记。 因此,必须根据该资源或资源组是否包含现有标记来使用不同的方法。

若要将标记添加到不包含现有标记的资源组,请使用:

az group update -n examplegroup --set tags.Environment=Test tags.Dept=IT

若要将标记添加到不包含现有标记的资源,请使用:

az resource tag --tags Dept=IT Environment=Test -g examplegroup -n examplevnet --resource-type "Microsoft.Network/virtualNetworks"

若要将标记添加到已带标记的资源,请检索现有标记,重新格式化该值,然后重新应用现有标记和新标记:

jsonrtag=$(az resource show -g examplegroup -n examplevnet --resource-type "Microsoft.Network/virtualNetworks" --query tags)
rt=$(echo $jsonrtag | tr -d '"{},' | sed 's/: /=/g')
az resource tag --tags $rt Project=Redesign -g examplegroup -n examplevnet --resource-type "Microsoft.Network/virtualNetworks"

要将资源组中的所有标记应用于其资源,并且 不保留资源上的现有标记,请使用以下脚本:

groups=$(az group list --query [].name --output tsv)
for rg in $groups
do
  jsontag=$(az group show -n $rg --query tags)
  t=$(echo $jsontag | tr -d '"{},' | sed 's/: /=/g')
  r=$(az resource list -g $rg --query [].id --output tsv)
  for resid in $r
  do
    az resource tag --tags $t --id $resid
  done
done

若要将资源组中的所有标记应用于其资源,并且保留资源上的现有标记,请使用以下脚本:

groups=$(az group list --query [].name --output tsv)
for rg in $groups
do
  jsontag=$(az group show -n $rg --query tags)
  t=$(echo $jsontag | tr -d '"{},' | sed 's/: /=/g')
  r=$(az resource list -g $rg --query [].id --output tsv)
  for resid in $r
  do
    jsonrtag=$(az resource show --id $resid --query tags)
    rt=$(echo $jsonrtag | tr -d '"{},' | sed 's/: /=/g')
    az resource tag --tags $t$rt --id $resid
  done
done

模板

要在部署过程中标记资源,请将 tags 元素添加到要部署的资源。 提供标记名称和值。

将文本值应用到标记名称

以下示例显示了具有设置为文本值的两个标记(DeptEnvironment)的存储帐户:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
    {
      "apiVersion": "2016-01-01",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "tags": {
        "Dept": "Finance",
        "Environment": "Production"
      },
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": { }
    }
    ]
}

将对象应用到标记元素

可以定义一个存储多个标记的对象参数,并将该对象应用于标记元素。 对象中的每个属性会成为资源的单独标记。 以下示例有一个名为 tagValues 的参数,该标记应用于标记元素。

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "tagValues": {
      "type": "object",
      "defaultValue": {
        "Dept": "Finance",
        "Environment": "Production"
      }
    }
  },
  "resources": [
    {
      "apiVersion": "2016-01-01",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "tags": "[parameters('tagValues')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ]
}

将 JSON 字符串应用到标记名称

要将多个值存储在单个标记中,请应用表示这些值的 JSON 字符串。 整个 JSON 字符串存储为一个标记,该标记不能超过 256 个字符。 以下示例有一个名为 CostCenter 的标记,其中包含 JSON 字符串中的多个值:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
    {
      "apiVersion": "2016-01-01",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "tags": {
        "CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
      },
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": { }
    }
    ]
}

门户

  1. 若要查看资源或资源组的标记,请选择“标记”图标。

    在资源和资源组边栏选项卡上选择标记

  2. 此时显示资源的现有标记。 如果以前未应用标记,则该列表为空。

    在资源和资源组边栏选项卡上显示现有标记

  3. 若要添加标记,请键入名称和值,或者从下拉菜单中选择一个现有的名称和值。 选择“保存”。

    添加新标记

  4. 若要查看具有某个标记值的所有资源,请选择 >(“更多服务”),并在筛选文本框中输入“标记”字样。 从可用选项中选择“标记”。

    通过“浏览”中心查找标记

  5. 此时显示订阅中标记的摘要。

    显示所有标记

  6. 选择任一标记会显示带有该标记的资源和资源组。

    显示带标记的资源

  7. 选择“将边栏选项卡固定到仪表板”以便快速访问。

    将标记固定到仪表板

  8. 可以从仪表板选择固定的标记以查看具有该标记的资源。

    将标记固定到仪表板

REST API

Azure 门户和 PowerShell 均在后台使用资源管理器 REST API。 如果需要将标记集成到其他环境中,可对资源 ID 使用 GET 以获取标记,并使用 PATCH 调用更新标记集。

标记和计费

可使用标记对计费数据进行分组。 例如,如果要针对不同组织运行多个 VM,可以使用标记,对使用情况按成本中心进行分组。 还可使用标记根据运行时环境(例如,在生产环境中运行的 VM 的计费使用情况)对成本进行分类。

可以检索有关使用情况逗号分隔值 (CSV) 文件的信息。 可以从 Azure 帐户门户下载使用情况文件。 有关 REST API 操作,请参阅 Azure 计费 REST API 参考

为支持标记和计费的服务下载使用情况 CSV 时,标记将显示在“标记”列中。

在计费中查看标记

后续步骤