Adding tags to resources

Adding tags to resources helps you to organize our resources and to automate some tasks. Here is a small intro on how to use tags in the Azure portal, in templates, and with PowerShell. In this article we will use tags only for virtual machines, but you can add tags to any resource created with the Azure Resource Manager (including resource groups).

Tags are simple name-value pairs that we can define the way we like it. An (often used) example is the tagging of a resource with the appropriate cost center (like „Department“ = „Sales“), or to separate development from production („Environment“ = „Test“), or whatever else you have in mind to organize.

Portal

If you look at the resource in the portal, there is a „Tags“ entry. Click on it (1), enter a name-value pair (2), and hit „Save“ (3). That’s it. You can choose from previously used tags by selecting from the dropdown menu.

using tags
Using tags in the Azure portal

Here I used the name „purpose“ and the value „blog-example“ to make it easier to delete resources that I needed for screenshots… 🙂

You can add more tags to a resource, up to 15 per resource. And there is a main „Tags“ menu (1) that you can use to search across all your resources for special tags (2):

Templates

When using templates to deploy resources (which is a very good idea by the way…) simply add them (as a list) into the template:

...
    "resources": [
    {
      "apiVersion": "2016-01-01",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "tags": {
        "Dept": "Finance",
        "Environment": "Production"
      },
...

Here I set two tags, „Dept“ and „Environment“, at a storage resource. This is really simple… and of course those resources and tags can be found via the portal also. If you use parameters for the tags, you will be – as usual – prompted before the deployment to enter values for those tags.

...
    "resources": [
    {
      "apiVersion": "2016-01-01",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[concat('storage', uniqueString(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "tags": {
        "Dept": "[parameters('DepartmentTag')]",
        "Environment": "[parameters('EnvironmentTag')]"
      },
...

Note that it is not possible to set tags on resource groups with a template, only to resources. If you want to add tags to resource groups, you must do this via the portal or PowerShell.

PowerShell

Tags are a property of a resource or a resource group object. To list them, simply enter Get-AzureRmResourceGroup (or Get-AzResourceGroup) and you get something like this:

C:> Get-AzureRmResourceGroup -Name test01-rg

ResourceGroupName : test01-rg
Location          : germanycentral
ProvisioningState : Succeeded
Tags              :
                    Name     Value
                    =======  ===============
                    purpose  unknown
                    status   unknown/unknown

ResourceId        : /subscriptions/06(...)/resourceGroups/test01-rg

Similar for a resource inside a resource group:

C:> Get-AzureRmResource -ResourceGroupName test01-rg -ResourceName rw01-vm1

Name              : rw01-vm1
ResourceId        : /subscriptions/06(...)/virtualMachines/rw01-vm1
ResourceName      : rw01-vm1
ResourceType      : Microsoft.Compute/virtualMachines
ResourceGroupName : test01-rg
Location          : germanycentral
SubscriptionId    : 06d(...)
Tags              : {purpose}

Tags are „dictionary“ objects, so we can work with them once we saved the object:

C:> $tags = (Get-AzureRmResource -ResourceGroupName test01-rg -ResourceName rw01-vm1).Tags
C:> $tags

Name                           Value
----                           -----
purpose                        VM

We can add name/value pairs:

C:> $tags.Add("status","active")
C:> $tags

Name                           Value
----                           -----
purpose                        VM
status                         active

We can modify them (like adding some text):

C:> $tags.Item("status") += " (do not delete)"
C:> $tags

Name                           Value
----                           -----
purpose                        VM
status                         active (do not delete)

or we can delete pairs:

C:> $tags.Remove("status")

Once we are finished with modifying the dictionary object, we can write it back by using the „Set-“ instead of the „Get-“ cmdlet:

C:> Set-AzureRmResource -ResourceGroupName test01-rg -ResourceName rw01-vm1 -Tags $tags

C:> Set-AzureRmResourceGroup -Name test01-rg -Tags $tags

Summary

Tags are a great way to organize resources just the way you like it. And if you think further, it is easy to assign tasks to all resources with a special value for a key, like garbage collection for all resources with "Status" = "delete me".

To be consequent, use Azure policies to make sure that all your resources or resource groups have at least one tag.

2 Kommentare zu „Adding tags to resources

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s