تطبيق العلامات باستخدام Bicep

توضح هذه المقالة كيفية استخدام Bicep لوضع علامة على الموارد ومجموعات الموارد والاشتراكات أثناء النشر. للحصول على توصيات العلامات والقيود، راجع استخدام العلامات لتنظيم موارد Azure والتسلسل الهرمي للإدارة.

إشعار

ستستبدل العلامات التي تطبقها من خلال ملف Bicep أي علامات موجودة على المورد. إذا كنت ترغب في الاحتفاظ بالعلامات الموجودة، فستحتاج إلى تضمينها بشكل صريح في القالب.

تطبيق القيم

ينشر المثال التالي حساب تخزين مع ثلاث علامات. يتم تعيين علامتين (DeptوEnvironment) إلى قيم حرفية. يتم تعيين علامة واحدة (LastDeployed) إلى المعلمة التي لا تفي بالتاريخ الحالي.

param location string = resourceGroup().location
param utcShort string = utcNow('d')

resource stgAccount 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  tags: {
    Dept: 'Finance'
    Environment: 'Production'
    LastDeployed: utcShort
  }
}

تطبيق كائن

يمكنك تحديد معلمة عنصر تقوم بتخزين العديد من العلامات وتطبيق هذا العنصر على عنصر العلامة. يوفر هذا الأسلوب مرونة أكثر من المثال السابق، لأن الكائن يمكن أن يكون له خصائص مختلفة. تصبح كل خاصية في الكائن علامة منفصلة للمورد. يحتوي المثال التالي على معلمة تسمى tagValues التي تطبقها على عنصر العلامة.

param location string = resourceGroup().location
param tagValues object = {
  Dept: 'Finance'
  Environment: 'Production'
}

resource stgAccount 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  tags: tagValues
}

تطبيق سلسلة JSON

لتخزين العديد من القيم في علامة واحدة، تطبق سلسلة JSON التي تمثل القيم. يتم تخزين سلسلة JSON بأكملها كعلامة واحدة لا يمكن أن تتجاوز 256 حرفًا. يحتوي المثال التالي على علامة واحدة مسماةCostCenterتحتوي على قيم متعددة من سلسلة JSON:

param location string = resourceGroup().location

resource stgAccount 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  tags: {
    CostCenter: '{"Dept":"Finance","Environment":"Production"}'
  }
}

تطبيق علامات من مجموعة الموارد

لتطبيق العلامات من مجموعة الموارد على المورد، يمكنك أيضًا استخدام الوظيفة(resourceGroup) عندما تحصل على قيمة العلامة، استخدم بناء الجملة tags[tag-name] بدلاً من بناء الجملة tags.tag-name، لأن بعض الأحرف لم يتم توزيعها بشكل صحيح في الترميز النقطي.

param location string = resourceGroup().location

resource stgAccount 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  tags: {
    Dept: resourceGroup().tags['Dept']
    Environment: resourceGroup().tags['Environment']
  }
}

تطبيق علامات على مجموعات الموارد أو الاشتراكات

يمكنك إضافة علامات إلى مجموعة موارد أو اشتراك عن طريق نشر Microsoft.Resources/tagsنوع المورد. يمكنك تطبيق العلامات على مجموعة الموارد المستهدفة أو الاشتراك الذي تريد توزيعه. في كل مرة تقوم فيها بنشر القالب، يمكنك استبدال أي علامات سابقة.

param tagName string = 'TeamName'
param tagValue string = 'AppTeam1'

resource applyTags 'Microsoft.Resources/tags@2021-04-01' = {
  name: 'default'
  properties: {
    tags: {
      '${tagName}': tagValue
    }
  }
}

يضيف Bicep التالي العلامات من عنصر إلى الاشتراك الذي تقوم بالنشر إليه. للمزيد من المعلومات عن عمليات التوزيع على مستوى الاشتراك، يُرجى الرجوع إلى إنشاء موارد ومجموعات موارد على مستوى الاشتراك.

targetScope = 'subscription'

param tagObject object = {
  TeamName: 'AppTeam1'
  Dept: 'Finance'
  Environment: 'Production'
}

resource applyTags 'Microsoft.Resources/tags@2021-04-01' = {
  name: 'default'
  properties: {
    tags: tagObject
  }
}

قراءة العلامات

يمكنك قراءة العلامات الموجودة باتباع الأساليب التالية.

تحذير

tags لم يتم تعيين الخاصية على Microsoft.Resources/tags المورد إذا لم يتم تعيين علامات. لتجنب الأخطاء، تأكد من استخدام عامل التشغيل safe-dereference (.?) على properties.

resource readTags 'Microsoft.Resources/tags@2021-04-01' existing = {
  name: 'default'
}
var tagValue = readTags.properties?.tags?.myTag

// Equivalent to above:
var tagValue2 = reference(subscriptionResourceId('Microsoft.Resources/tags', 'default'), '2021-04-01', 'Full').properties.?tags.?myTag2

الخطوات التالية