Применение тегов с помощью шаблонов ARM
В этой статье описывается, как использовать шаблоны azure Resource Manager (шаблоны ARM) для добавления тегов к ресурсам, группам ресурсов и подпискам во время развертывания. Рекомендации и ограничения тегов см. в статье Использование тегов для упорядочения ресурсов Azure и иерархии управления.
Примечание
Теги, назначаемые посредством шаблона ARM или файла Bicep, перезапишут любые существующие теги.
Применить значения
В следующем примере показано развертывание учетной записи хранения с тремя тегами. Двум тегам (Dept
и Environment
) присваиваются литеральные значения. Одному тегу (LastDeployed
) присваивается параметр, который по умолчанию приравнивается к текущей дате.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"utcShort": {
"type": "string",
"defaultValue": "[utcNow('d')]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[concat('storage', uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"tags": {
"Dept": "Finance",
"Environment": "Production",
"LastDeployed": "[parameters('utcShort')]"
},
"properties": {}
}
]
}
Применить объект
Можно определить параметр объекта, который хранит несколько тегов, и применить этот объект к элементу тега. Такой подход дает больше гибкости, чем в предыдущем примере, поскольку объект может иметь различные свойства. Каждое свойство в объекте становится отдельным тегом ресурса. В следующем примере содержится параметр с именем tagValues
, который применяется к элементу тега.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"tagValues": {
"type": "object",
"defaultValue": {
"Dept": "Finance",
"Environment": "Production"
}
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[concat('storage', uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"tags": "[parameters('tagValues')]",
"properties": {}
}
]
}
Применить строку JSON
Для хранения большого количества значений в одном теге примените строку JSON, представляющую значения. Целая строка JSON сохраняется как один тег, длина которого не может превышать 256 символов. В следующем примере приведен один тег с именем CostCenter
, содержащий несколько значений из строки JSON.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[concat('storage', uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"tags": {
"CostCenter": "{\"Dept\":\"Finance\",\"Environment\":\"Production\"}"
},
"properties": {}
}
]
}
Применить теги из группы ресурсов
Чтобы применить теги из группы ресурсов к ресурсу, используйте функцию resourceGroup(). При получении значения тега используйте синтаксис tags[tag-name]
вместо синтаксиса tags.tag-name
, поскольку некоторые символы некорректно анализируются в точечной нотации.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[concat('storage', uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"tags": {
"Dept": "[resourceGroup().tags['Dept']]",
"Environment": "[resourceGroup().tags['Environment']]"
},
"properties": {}
}
]
}
Применить теги к группам ресурсов или подпискам
Можно добавить теги к группе ресурсов или подписке, развернув тип ресурса Microsoft.Resources/tags
. Теги можно применить к целевой группе ресурсов или подписке, которую требуется развернуть. При каждом развертывании шаблона заменяются все предыдущие теги.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"tagName": {
"type": "string",
"defaultValue": "TeamName"
},
"tagValue": {
"type": "string",
"defaultValue": "AppTeam1"
}
},
"resources": [
{
"type": "Microsoft.Resources/tags",
"name": "default",
"apiVersion": "2021-04-01",
"properties": {
"tags": {
"[parameters('tagName')]": "[parameters('tagValue')]"
}
}
}
]
}
Чтобы применить теги к группе ресурсов, используйте Azure PowerShell или Azure CLI. Выполните развертывание в группе ресурсов, к которой нужно применить теги.
New-AzResourceGroupDeployment -ResourceGroupName exampleGroup -TemplateFile https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json
az deployment group create --resource-group exampleGroup --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json
Чтобы применить теги к подписке, используйте PowerShell или Azure CLI. Выполните развертывание в подписке, к которой нужно применить теги.
New-AzSubscriptionDeployment -name tagresourcegroup -Location westus2 -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json
az deployment sub create --name tagresourcegroup --location westus2 --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/tags.json
Дополнительные сведения о развертываниях в подписках см. в статье Создание групп ресурсов и ресурсов на уровне подписки.
Следующий шаблон добавляет теги из объекта в группу ресурсов или в подписку.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"tags": {
"type": "object",
"defaultValue": {
"TeamName": "AppTeam1",
"Dept": "Finance",
"Environment": "Production"
}
}
},
"resources": [
{
"type": "Microsoft.Resources/tags",
"apiVersion": "2021-04-01",
"name": "default",
"properties": {
"tags": "[parameters('tags')]"
}
}
]
}
Дальнейшие действия
- Не все типы ресурсов поддерживают теги. Сведения о возможности применения тегов к типу ресурса см. в статье о поддержке тегов ресурсами Azure.
- Рекомендации по реализации стратегии присвоения тегов см. в разделе Руководство по принятию решений о присвоении имен и тегов для ресурсов.
- Рекомендации и ограничения тегов см. в статье Использование тегов для упорядочения ресурсов Azure и иерархии управления.