Python ile etiket uygulama
Bu makalede kaynakları, kaynak gruplarını ve abonelikleri etiketlemek için Python'ın nasıl kullanılacağı açıklanmaktadır. Etiket önerileri ve sınırlamaları için bkz . Azure kaynaklarınızı ve yönetim hiyerarşinizi düzenlemek için etiketleri kullanma.
Önkoşullar
Python 3.8 veya üzeri yüklü. En son sürümü yüklemek için bkz. Python.org
Sanal ortamınızda yüklü Python için aşağıdaki Azure kitaplık paketleri. Paketlerden herhangi birini yüklemek için
pip install {package-name}
- azure-identity
- azure-mgmt-resource
Bu paketlerin daha eski sürümleri sanal ortamınızda zaten yüklüyse, bunları
pip install --upgrade {package-name}
Bu makaledeki örneklerde CLI tabanlı kimlik doğrulaması (
AzureCliCredential
kullanılır). Ortamınıza bağlı olarak, kimlik doğrulaması yapmak için önce çalıştırmanızaz login
gerekebilir.Azure abonelik kimliğinizi içeren bir ortam değişkeni. Azure abonelik kimliğinizi almak için şunu kullanın:
az account show --name 'your subscription name' --query id -o tsv
Değeri ayarlamak için ortamınız için seçeneğini kullanın.
setx AZURE_SUBSCRIPTION_ID your-subscription-id
Not
Ortam değişkenine yalnızca geçerli çalışan konsolda erişmeniz gerekiyorsa ortam değişkenini yerine
setx
ileset
ayarlayabilirsiniz.Ortam değişkenlerini ekledikten sonra, konsol penceresi de dahil olmak üzere ortam değişkenini okuması gereken tüm çalışan programları yeniden başlatmanız gerekebilir. Örneğin, düzenleyici olarak Visual Studio kullanıyorsanız, örneği çalıştırmadan önce Visual Studio'yu yeniden başlatın.
Etiketleri uygulama
Azure Python, etiketleri uygulamak için ResourceManagementClient.tags.begin_create_or_update_at_scope yöntemini sunar. Kaynak, kaynak grubu veya abonelik üzerindeki tüm etiketlerin yerini alır. komutunu çağırdığınızda, etiketlemek istediğiniz varlığın kaynak kimliğini geçirin.
Aşağıdaki örnek bir depolama hesabına bir etiket kümesi uygular:
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}")
Komutu yeniden çalıştırırsanız ancak bu kez farklı etiketlerle çalışırsanız, önceki etiketlerin kaybolduğuna dikkat edin.
tags = {
"Team": "Compliance",
"Environment": "Production"
}
Etiketleri olan bir kaynağa etiket eklemek için ResourceManagementClient.tags.begin_update_at_scope kullanın. TagsPatchResource nesnesinde parametresini operation
olarak Merge
ayarlayın.
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}")
Mevcut etiketlerin iki yeni etiketin eklenmesiyle büyüdüğünü fark edin.
Her etiket adının yalnızca bir değeri olabilir. Bir etiket için yeni bir değer sağlarsanız, birleştirme işlemini kullansanız bile eski değerin yerini alır. Aşağıdaki örnek, etiketi Normal'den Yeşil'e değiştirirStatus
.
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}")
parametresini operation
Replace
olarak ayarladığınızda, yeni etiket kümesi mevcut etiketlerin yerini alır.
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}")
Kaynakta yalnızca yeni etiketler kalır.
Aynı komutlar kaynak grupları veya aboneliklerle de çalışır. Bunları etiketlemek istediğiniz kaynak grubunun veya aboneliğin tanımlayıcısına geçirin. Kaynak grubuna yeni bir etiket kümesi eklemek için şunu kullanın:
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}")
Bir kaynak grubunun etiketlerini güncelleştirmek için şunu kullanın:
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}")
Aboneliğin etiketlerini güncelleştirmek için şunu kullanın:
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}")
Bir kaynak grubunda aynı ada sahip birden fazla kaynağınız olabilir. Bu durumda, her kaynağı aşağıdaki komutlarla ayarlayabilirsiniz:
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}")
Etiketleri listeleme
Bir kaynağın, kaynak grubunun veya aboneliğin etiketlerini almak için ResourceManagementClient.tags.get_at_scope yöntemini kullanın ve varlığın kaynak kimliğini geçirin.
Bir kaynağın etiketlerini görmek için şunu kullanın:
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)
Bir kaynak grubunun etiketlerini görmek için şunu kullanın:
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)
Aboneliğin etiketlerini görmek için şunu kullanın:
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)
Etikete göre listele
Belirli bir etiket adına ve değerine sahip kaynakları almak için şunu kullanın:
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)
Herhangi bir etiket değerine sahip belirli bir etiket adına sahip kaynakları almak için şunu kullanın:
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)
Belirli bir etiket adına ve değerine sahip kaynak gruplarını almak için şunu kullanın:
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)
Etiketleri kaldırma
Belirli etiketleri kaldırmak için olarak Delete
ayarlayınoperation
. Silmek istediğiniz etiketlerin kaynak kimliklerini geçirin.
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}")
Belirtilen etiketler kaldırılır.
Tüm etiketleri kaldırmak için ResourceManagementClient.tags.begin_delete_at_scope yöntemini kullanın.
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)
Sonraki adımlar
- Tüm kaynak türleri etiketleri desteklemez. Bir kaynak türüne etiket uygulayıp uygulayamayacağınızı saptamak için bkz. Azure kaynakları için etiket desteği.
- Etiketleme stratejisi uygulama hakkında öneriler için bkz . Kaynak adlandırma ve etiketleme kararı kılavuzu.
- Etiket önerileri ve sınırlamaları için bkz . Azure kaynaklarınızı ve yönetim hiyerarşinizi düzenlemek için etiketleri kullanma.