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

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

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

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

تعيين نطاق

يُحدد نطاق ملف 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@2019-06-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@2020-05-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@2021-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@2019-06-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

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

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

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

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