Anwenden von Tags mit Python
Dieser Artikel beschreibt, wie Sie Python zum Markieren von Ressourcen, Ressourcengruppen und Abonnements verwenden. Weitere Informationen zu Tag-Empfehlungen und Einschränkungen finden Sie unter Verwenden von Tags zum Organisieren Ihrer Azure-Ressourcen und der Verwaltungshierarchie.
Voraussetzungen
Python 3.8 oder höher ist installiert. Informationen zum Installieren der aktuellen Version finden Sie unter Python.org
Die folgenden Azure-Bibliothekspakete für Python wurden in Ihrer virtuellen Umgebung installiert. Verwenden Sie zum Installieren beliebiger Pakete
pip install {package-name}
- azure-identity
- azure-mgmt-resource
Wenn Sie bereits ältere Versionen dieser Pakete in Ihrer virtuellen Umgebung installiert haben, müssen Sie sie möglicherweise mit
pip install --upgrade {package-name}
aktualisieren.In den Beispielen in diesem Artikel wird die CLI-basierte Authentifizierung (
AzureCliCredential
) verwendet. Abhängig von Ihrer Umgebung müssen Sie möglicherweise zuerstaz login
ausführen, um sich zu authentifizieren.Eine Umgebungsvariable mit Ihrer Azure-Abonnement-ID. Verwenden Sie zum Abrufen Ihrer Azure-Abonnement-ID Folgendes:
az account show --name 'your subscription name' --query id -o tsv
Um den Wert festzulegen, verwenden Sie die Option für Ihre Umgebung.
setx AZURE_SUBSCRIPTION_ID your-subscription-id
Hinweis
Wenn Sie nur in der aktuell ausgeführten Konsole auf die Umgebungsvariable zugreifen müssen, können Sie die Umgebungsvariable mit
set
anstelle vonsetx
festlegen.Nachdem Sie die Umgebungsvariablen hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden müssen, z. B. das Konsolenfenster. Wenn Sie beispielsweise Visual Studio als Editor verwenden, müssen Sie Visual Studio neu starten, bevor Sie das Beispiel ausführen.
Anwenden von Tags
Azure Python bietet die ResourceManagementClient.tags.begin_create_or_update_at_scope-Methode zum Anwenden von Tags. Sie ersetzt alle Tags der Ressource, Ressourcengruppe oder des Abonnements. Übergeben Sie beim Aufrufen des Befehls die Ressourcen-ID der Entität, die markiert werden soll.
Im folgenden Beispiel wird eine Gruppe von Tags auf ein Speicherkonto angewandt:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
storage_account_name = "demostore"
tags = {
"Dept": "Finance",
"Status": "Normal"
}
tag_resource = TagsResource(
properties={'tags': tags}
)
resource = resource_client.resources.get_by_id(
f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
"2022-09-01"
)
resource_client.tags.begin_create_or_update_at_scope(resource.id, tag_resource)
print(f"Tags {tag_resource.properties.tags} were added to resource with ID: {resource.id}")
Wenn Sie den Befehl erneut ausführen, jedoch dieses Mal mit anderen Tags, werden Sie feststellen, dass die früheren Tags verschwinden.
tags = {
"Team": "Compliance",
"Environment": "Production"
}
Um Tags zu einer Ressource hinzuzufügen, die bereits über Tags verfügt, verwenden Sie ResourceManagementClient.tags.begin_update_at_scope. Legen Sie im Objekt TagsPatchResource den operation
-Parameter auf Merge
fest.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
storage_account_name = "demostore"
tags = {
"Dept": "Finance",
"Status": "Normal"
}
tag_patch_resource = TagsPatchResource(
operation="Merge",
properties={'tags': tags}
)
resource = resource_client.resources.get_by_id(
f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
"2022-09-01"
)
resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)
print(f"Tags {tag_patch_resource.properties.tags} were added to existing tags on resource with ID: {resource.id}")
Beachten Sie, dass die vorhandenen Tags mit der Ergänzung der beiden neuen Tags wachsen.
Jeder Tagname kann nur einen Wert enthalten. Wenn Sie einen neuen Wert für ein Tag angeben, wird der alte Wert auch dann ersetzt, wenn Sie den Zusammenführungsvorgang verwenden. Im folgenden Beispiel wird das Tag Status
von Normal in Green geändert.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
storage_account_name = "demostore"
tags = {
"Status": "Green"
}
tag_patch_resource = TagsPatchResource(
operation="Merge",
properties={'tags': tags}
)
resource = resource_client.resources.get_by_id(
f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
"2022-09-01"
)
resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)
print(f"Tags {tag_patch_resource.properties.tags} were added to existing tags on resource with ID: {resource.id}")
Wenn Sie den Parameter operation
auf Replace
festlegen, werden die vorhandenen Tags durch die neue Gruppe von Tags ersetzt.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
storage_account_name = "demostore"
tags = {
"Project": "ECommerce",
"CostCenter": "00123",
"Team": "Web"
}
tag_patch_resource = TagsPatchResource(
operation="Replace",
properties={'tags': tags}
)
resource = resource_client.resources.get_by_id(
f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
"2022-09-01"
)
resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)
print(f"Tags {tag_patch_resource.properties.tags} replaced tags on resource with ID: {resource.id}")
Nur die neuen Tags verbleiben in der Ressource.
Diese Befehle können auch für Ressourcengruppen und Abonnements verwendet werden. Übergeben Sie den Bezeichner für die Ressourcengruppe oder das Abonnement, die Sie markieren möchten. Verwenden Sie zum Hinzufügen einer neuen Gruppe von Tags zu einer Ressourcengruppe Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
tags = {
"Dept": "Finance",
"Status": "Normal"
}
tag_resource = TagsResource(
properties={'tags': tags}
)
resource_group = resource_client.resource_groups.get(resource_group_name)
resource_client.tags.begin_create_or_update_at_scope(resource_group.id, tag_resource)
print(f"Tags {tag_resource.properties.tags} were added to resource group: {resource_group.id}")
Verwenden Sie zum Aktualisieren der Tags für eine Ressourcengruppe Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
tags = {
"CostCenter": "00123",
"Environment": "Production"
}
tag_patch_resource = TagsPatchResource(
operation="Merge",
properties={'tags': tags}
)
resource_group = resource_client.resource_groups.get(resource_group_name)
resource_client.tags.begin_update_at_scope(resource_group.id, tag_patch_resource)
print(f"Tags {tag_patch_resource.properties.tags} were added to existing tags on resource group: {resource_group.id}")
Verwenden Sie zum Aktualisieren der Tags für ein Abonnement Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
tags = {
"Team": "Web Apps"
}
tag_patch_resource = TagsPatchResource(
operation="Merge",
properties={'tags': tags}
)
resource_client.tags.begin_update_at_scope(f"/subscriptions/{subscription_id}", tag_patch_resource)
print(f"Tags {tag_patch_resource.properties.tags} were added to subscription: {subscription_id}")
Eine Ressourcengruppe kann ggf. mehrere Ressourcen mit dem gleichen Namen enthalten. In diesem Fall können Sie die einzelnen Ressourcen jeweils mit den folgenden Befehlen festlegen:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
tags = {
"Dept": "IT",
"Environment": "Test"
}
tag_patch_resource = TagsPatchResource(
operation="Merge",
properties={'tags': tags}
)
resources = resource_client.resources.list_by_resource_group(resource_group_name, filter="name eq 'sqlDatabase1'")
for resource in resources:
resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)
print(f"Tags {tag_patch_resource.properties.tags} were added to resource: {resource.id}")
Auflisten von Tags
Um die Tags für eine Ressource, eine Ressourcengruppe oder ein Abonnement abzurufen, verwenden Sie die Methode ResourceManagementClient.tags.get_at_scope, und übergeben Sie die Ressourcen-ID für die Entität.
Verwenden Sie zum Anzeigen der Tags für eine Ressource Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_group_name = "demoGroup"
storage_account_name = "demostorage"
resource_client = ResourceManagementClient(credential, subscription_id)
resource = resource_client.resources.get_by_id(
f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
"2022-09-01"
)
resource_tags = resource_client.tags.get_at_scope(resource.id)
print (resource_tags.properties.tags)
Verwenden Sie zum Anzeigen der Tags für eine Ressourcengruppe Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group = resource_client.resource_groups.get("demoGroup")
resource_group_tags = resource_client.tags.get_at_scope(resource_group.id)
print (resource_group_tags.properties.tags)
Verwenden Sie zum Anzeigen der Tags für ein Abonnement Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
subscription_tags = resource_client.tags.get_at_scope(f"/subscriptions/{subscription_id}")
print (subscription_tags.properties.tags)
Auflisten nach Tag
Verwenden Sie zum Abrufen von Ressourcen mit einem bestimmten Tagnamen und -wert Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resources = resource_client.resources.list(filter="tagName eq 'CostCenter' and tagValue eq '00123'")
for resource in resources:
print(resource.name)
Verwenden Sie zum Abrufen von Ressourcen mit einem bestimmten Tagnamen und einem beliebigen Tagwert Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resources = resource_client.resources.list(filter="tagName eq 'Dept'")
for resource in resources:
print(resource.name)
Verwenden Sie zum Abrufen von Ressourcengruppen mit einem bestimmten Tagnamen und -wert Folgendes:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_groups = resource_client.resource_groups.list(filter="tagName eq 'CostCenter' and tagValue eq '00123'")
for resource_group in resource_groups:
print(resource_group.name)
Entfernen von Tags
Um bestimmte Tags zu entfernen, legen Sie operation
auf Delete
fest. Übergeben Sie die Ressourcen-IDs der Tags, die Sie löschen möchten.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "demoGroup"
storage_account_name = "demostore"
tags = {
"Dept": "IT",
"Environment": "Test"
}
tag_patch_resource = TagsPatchResource(
operation="Delete",
properties={'tags': tags}
)
resource = resource_client.resources.get_by_id(
f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
"2022-09-01"
)
resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)
print(f"Tags {tag_patch_resource.properties.tags} were removed from resource: {resource.id}")
Die angegebenen Tags werden entfernt.
Um alle Tags zu entfernen, verwenden Sie die Methode ResourceManagementClient.tags.begin_delete_at_scope.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
subscription = resource_client.subscriptions.get(subscription_id)
resource_client.tags.begin_delete_at_scope(subscription.id)
Nächste Schritte
- Nicht alle Ressourcentypen unterstützen Tags. Um festzustellen, ob Sie ein Tag auf einen Ressourcentyp anwenden können, lesen Sie Tagunterstützung für Azure-Ressourcen.
- Empfehlungen zum Implementieren einer Tagstrategie finden Sie unter Leitfaden zur Entscheidungsfindung für Ressourcenbenennung und -markierung.
- Weitere Informationen zu Azure-Tag-Empfehlungen und -Einschränkungen finden Sie unter Verwenden von Tags zur Organisation Ihrer Azure-Ressourcen und der Verwaltungshierarchie.