عمليات توزيع مجموعة الموارد باستخدام ملفات Bicep

توضح هذه المقالة كيفية تعيين نطاق باستخدام Bicep عند التوزيع إلى مجموعة موارد.

الموارد المدعومة

يمكن نشر معظم الموارد إلى مجموعة موارد. للحصول على قائمة بالموارد المتوفرة، راجع مرجع قالب مدير ARM.

عين نطاق

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

targetScope = 'resourceGroup'

ولكن، لا تقتضي الضرورة تعيين النطاق الهدف إلى مجموعة الموارد؛ حيث يُستخدم هذا النطاق بشكل افتراضي.

أوامر التوزيع

لنشر إلى مجموعة موارد، استخدم أوامر توزيع مجموعة الموارد.

بالنسبة لـنظام Azure CLI، استخدم الأمر إنشاء مجموعة نشر في az. ينشر المثال التالي قالب لإنشاء مجموعة موارد. مجموعة الموارد التي تحددها في --resource-groupالمعلمة هي مجموعة الموارد المستهدفة.

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-file main.bicep \
  --parameters storageAccountType=Standard_GRS

للحصول على مزيد من المعلومات التفصيلية حول أوامر النشر وخيارات نشر قوالب ARM، راجع:

نطاقات التوزيع

عند النشر إلى مجموعة موارد، يمكنك نشر الموارد إلى:

  • مجموعة الموارد الهدف لعملية التوزيع
  • مجموعات موارد أخرى في نفس الاشتراك أو الاشتراكات الأخرى
  • أي اشتراك في المستأجر
  • مستأجر مجموعة الموارد

يمكن تحديد نطاق مورد ملحق لهدف مختلف عن هدف النشر.

يجب أن يكون لدى المستخدم الذي يقوم بتوزيع القالب حق الوصول إلى النطاق المحدد.

يوضح هذا القسم كيفية تحديد النطاقات المختلفة. يمكنك دمج هذه النطاقات المختلفة في قالب واحد.

نطاق لاستهداف مجموعة الموارد

لتوزيع الموارد إلى مجموعة الموارد الهدف، أضف هذه الموارد إلى ملف Bicep.

// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  ...
}

للحصول على قالب توضيحي، راجع التوزيع لمجموعة موارد الهدف.

تحديد نطاق لمجموعة موارد مختلفة

لنشر الموارد إلى مجموعة موارد ليست مجموعة الموارد الهدف، أضف وحدة نمطية. استخدم الدالة resourceGroup لتعيين الخاصية scope لهذه الوحدة.

إذا كانت مجموعة الموارد في اشتراك مختلف، فأدخل معرف الاشتراك، واسم مجموعة الموارد. إذا كانت مجموعة الموارد في نفس الاشتراك المستخدم في التوزيع الحالي، فأدخل اسم مجموعة الموارد فقط. إذا لم تحدد اشتراكا في الدالة resourceGroup، يتم استخدام الاشتراك الحالي.

يوضح المثال التالي الوحدة النمطية التي تستهدف مجموعة موارد في اشتراك مختلف.

param otherResourceGroup string
param otherSubscriptionID string

// module deployed to different subscription and resource group
module exampleModule 'module.bicep' = {
  name: 'otherSubAndRG'
  scope: resourceGroup(otherSubscriptionID, otherResourceGroup)
}

يعرض المثال التالي الوحدة النمطية التي تستهدف مجموعة موارد في نفس الاشتراك.

param otherResourceGroup string

// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
  name: 'otherRG'
  scope: resourceGroup(otherResourceGroup)
}

للحصول على قالب توضيحي، راجع التوزيع لمجموعة موارد الهدف.

نطاق للاشتراك

لنشر الموارد إلى اشتراك، أضف وحدة نمطية. استخدم الدالة subscription لتعيين الخاصية scope الخاصة بها.

للتوزيع إلى الاشتراك الحالي، استخدم وظيفة الاشتراك بدون معلمة.


// module deployed at subscription level
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription()
}

للتوزيع إلى اشتراك مختلف، حدد معرف الاشتراك كمعلمة في دالة الاشتراك.

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(otherSubscriptionID)
}

للحصول على مثال قالب، راجع إنشاء مجموعة موارد باستخدام Bicep.

نطاق للمستأجر

لإنشاء موارد في المستأجر، أضف الوحدة النمطية. استخدم الدالة tenant لتعيين الخاصية scope الخاصة بها.

يجب أن يكون لدى المستخدم الذي يقوم بنشر القالب حق الوصول المطلوب للنشر لدى المستأجر.

يتضمن المثال التالي وحدة نمطية التي يتم نشرها إلى المستأجر.

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

وبدلاً من استخدام وحدة نمطية، يمكنك تعيين النطاق tenant() لبعض أنواع الموارد. يقوم المثال التالي بنشر مجموعة إدارة في المستأجر.

param mgName string = 'mg-${uniqueString(newGuid())}'

// ManagementGroup deployed at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

لمزيد من المعلومات، راجع مجموعة الإدارة.

النشر إلى مجموعة الموارد المستهدفة

لتوزيع الموارد في مجموعة الموارد الهدف، حدد هذه الموارد في قسمresources القالب. يقوم القالب التالي بإنشاء حساب تخزين في مجموعة الموارد المحددة في عملية النشر.

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

النشر إلى مجموعات موارد متعددة

يمكنك التوزيع إلى أكثر من مجموعة موارد في ملف Bicep واحد.

إشعار

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

المثال التالي بنشر حسابات التخزين اثنين. يتم نشر حساب التخزين الأول إلى مجموعة الموارد المحددة في عملية النشر. يوزع حساب التخزين الثاني إلى مجموعة الموارد المحددة فيsecondResourceGroupوsecondSubscriptionIDومعلمات.

@maxLength(11)
param storagePrefix string

param firstStorageLocation string = resourceGroup().location

param secondResourceGroup string
param secondSubscriptionID string = ''
param secondStorageLocation string

var firstStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
var secondStorageName = '${storagePrefix}${uniqueString(secondSubscriptionID, secondResourceGroup)}'

module firstStorageAcct 'storage.bicep' = {
  name: 'storageModule1'
  params: {
    storageLocation: firstStorageLocation
    storageName: firstStorageName
  }
}

module secondStorageAcct 'storage.bicep' = {
  name: 'storageModule2'
  scope: resourceGroup(secondSubscriptionID, secondResourceGroup)
  params: {
    storageLocation: secondStorageLocation
    storageName: secondStorageName
  }
}

تستخدم كلتا الوحدتين نفس ملف Bicep المسمى storage.bicep.

param storageLocation string
param storageName string

resource storageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

إنشاء مجموعة الموارد

للحصول على معلومات حول إنشاء مجموعات الموارد، راجع إنشاء مجموعة موارد باستخدام Bicep.

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

للتعرف على النطاقات الأخرى، راجع: