التشغيل السريع: إنشاء مواصفات قالب وتوزيعها باستخدام Bicep
مقالة 10/18/2023
3 من المساهمين
الملاحظات
في هذه المقالة
يوضح هذا التشغيل السريع كيفية إنشاء مواصفات قالب وتوزيعها باستخدام ملف Bicep. يتم توزيع مواصفات قالب إلى مجموعة موارد بحيث يمكن للأشخاص في مؤسستك توزيع الموارد في Microsoft Azure. تتيح لك مواصفات القالب مشاركة قوالب التوزيع دون الحاجة إلى منح المستخدمين حق الوصول لتغيير ملف Bicep. يستخدم مثال مواصفات القالب هذا ملف Bicep لتوزيع حساب تخزين.
عند إنشاء مواصفات قالب، يتم نقل وظائف ملف Bicep إلى JavaScript Object Notation (JSON). تستخدم مواصفات القالب JSON لتوزيع موارد Azure. حالياً، لا يمكنك استيراد ملف Bicep من مدخل Microsoft Azure لإنشاء مورد مواصفات قالب.
المتطلبات الأساسية
إنشاء ملف Bicep
إنشاء مواصفات قالب من قالب Bicep محلي. انسخ النموذج التالي واحفظه على جهاز الكمبيوتر لديك كـ main.bicep . تستخدم الأمثلة المسار C:\templates\main.bicep . يمكنك استخدام مسار مختلف، ولكنك ستحتاج إلى تغيير الأوامر.
يتم استخدام ملف Bicep التالي في علامتي التبويب PowerShell وCLI . تستخدم علامة التبويب ملف Bicep قالبًا مختلفًا يجمع بين Bicep وJSON لإنشاء مواصفات قالب وتوزيعها.
@allowed([
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'
@description('Location for all resources.')
param location string = resourceGroup().location
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountNameOutput string = storageAccount.name
إنشاء مواصفات القالب
تشير مواصفات القالب إلى نوع مورد يسمى Microsoft.Resources/templateSpecs. لإنشاء مواصفات قالب، استخدم Azure CLI أو Azure PowerShell أو ملف Bicep.
يستخدم هذا المثال اسم templateSpecRG
لمجموعة الموارد. يمكنك استخدام اسم مختلف، ولكنك ستحتاج إلى تغيير الأوامر.
إنشاء مجموعة موارد جديدة لاحتواء مواصفات القالب.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
إنشاء مواصفات القالب في مجموعة الموارد تلك. إعطاء المواصفات قالب جديد اسم storageSpec .
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
إنشاء مجموعة موارد جديدة لاحتواء مواصفات القالب.
az group create \
--name templateSpecRG \
--location westus2
إنشاء مواصفات القالب في مجموعة الموارد تلك. إعطاء المواصفات قالب جديد اسم storageSpec .
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
يمكنك إنشاء مواصفات قالب باستخدام ملف Bicep، ولكن mainTemplate
يجب أن يكون في JSON. لا يستخدم قالب JSON بناء جملة JSON القياسي. على سبيل المثال، لا توجد فواصل نهاية السطر، ويتم استبدال علامات الاقتباس المزدوجة بعلامات اقتباس مفردة، ويتم استخدام الشرطة المائلة الخلفية (\
) للخروج من علامات الاقتباس المفردة داخل التعبيرات.
انسخ القالب التالي واحفظه على جهاز الكمبيوتر لديك كـ main.bicep .
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '1.0'
@description('Location for all resources.')
param location string = resourceGroup().location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
location: location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
location: location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'location': {
'type': 'string'
'defaultValue': '[resourceGroup().location]'
'metadata': {
'description': 'Location for all resources.'
}
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', \'storage\', uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2022-09-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
استخدم Azure PowerShell أو Azure CLI لإنشاء مجموعة موارد جديدة.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
إنشاء مواصفات القالب في مجموعة الموارد تلك. اسم مواصفات القالب storageSpec ورقم الإصدار 1.0
هي معلمات في ملف Bicep.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
مواصفات قالب التوزيع
استخدم مواصفات القالب لتوزيع حساب تخزين. يستخدم هذا المثال اسم storageRG
لمجموعة الموارد. يمكنك استخدام اسم مختلف، ولكنك ستحتاج إلى تغيير الأوامر.
قم بإنشاء مجموعة موارد لاحتواء حساب التخزين الجديد.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
الحصول على معرف المورد من المواصفات القالب.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
نشر القالب المحدد.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
يمكنك توفير المعلمات تماما كما تفعل لتوزيع ملف Bicep. إعادة توزيع مواصفات القالب باستخدام معلمة لنوع حساب التخزين.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
قم بإنشاء مجموعة موارد لاحتواء حساب التخزين الجديد.
az group create \
--name storageRG \
--location westus2
الحصول على معرف المورد من المواصفات القالب.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
إشعار
هناك مشكلة معروفة في الحصول على معرف مواصفات قالب وتعيينه إلى متغير في Windows PowerShell.
نشر القالب المحدد.
az deployment group create \
--resource-group storageRG \
--template-spec $id
يمكنك توفير المعلمات تماما كما تفعل لتوزيع ملف Bicep. إعادة توزيع مواصفات القالب باستخدام معلمة لنوع حساب التخزين.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType="Standard_GRS"
لتوزيع مواصفات قالب باستخدام ملف Bicep، استخدم وحدة. ترتبط الوحدة بمواصفات قالب موجود. لمزيد من المعلومات، راجع ملف في مواصفات القالب .
انسخ وحدة Bicep التالية، واحفظها على جهاز الكمبيوتر لديك كـ storage.bicep .
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
استبدل <subscriptionId>
في الوحدة. استخدم Azure PowerShell أو Azure CLI للحصول على معرف اشتراكك.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
استخدم Azure PowerShell أو Azure CLI لإنشاء مجموعة موارد جديدة لحساب التخزين.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
قم بتوزيع مواصفات القالب باستخدام Azure PowerShell أو Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
يمكنك إضافة معلمة وإعادة توزيع مواصفات القالب بنوع حساب تخزين مختلف. انسخ العينة، واستبدل ملف storage.bicep . بعد ذلك، قم بإعادة توزيع التوزيع الخاص بمواصفات القالب.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
storageAccountType: 'Standard_GRS'
}
}
منح حق الوصول
إذا كنت تريد السماح للمستخدمين الآخرين في مؤسستك بنشر مواصفات القالب، فستحتاج إلى منحهم حق الوصول للقراءة. يمكنك تعيين دور القارئ إلى مجموعة Microsoft Entra لمجموعة الموارد التي تحتوي على مواصفات القالب التي تريد مشاركتها. لمزيد من المعلومات، راجع البرنامج التعليمي: منح وصول مجموعة إلى موارد Azure باستخدام Azure PowerShell .
تحديث ملف Bicep
بعد إنشاء مواصفات القالب، قررت تحديث ملف Bicep. لمتابعة الأمثلة الموجودة في علامتي التبويب PowerShell أو CLI ، انسخ العينة واستبدل ملف main.bicep .
تحدد المعلمة storageNamePrefix
قيمة بادئة لاسم حساب التخزين. يقوم المتغير storageAccountName
بتسلسل البادئة بسلسلة فريدة.
@allowed([
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'
@description('Location for all resources.')
param location string = resourceGroup().location
@maxLength(11)
@description('The storage account name prefix.')
param storageNamePrefix string = 'storage'
var storageAccountName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountNameOutput string = storageAccount.name
تحديث إصدار مواصفات القالب
بدلاً من إنشاء مواصفات قالب جديدة للقالب المنقح، أضف إصداراً جديداً يسمى 2.0
إلى مواصفات القالب الموجودة. يمكن للمستخدمين الاختيار لتوزيع أي إصدار.
أنشئ إصدارًا جديدًا من مواصفات القالب.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
لنشر الإصدار الجديد، احصل على معرف المورد 2.0
للإصدار.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
قم بتوزيع الإصدار الجديد، واستخدم storageNamePrefix
لتحديد بادئة لاسم حساب التخزين.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
أنشئ إصدارًا جديدًا من مواصفات القالب.
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
لنشر الإصدار الجديد، احصل على معرف المورد 2.0
للإصدار.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
قم بتوزيع الإصدار الجديد، واستخدم storageNamePrefix
لتحديد بادئة لاسم حساب التخزين.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
أنشئ إصدارًا جديدًا من مواصفات القالب. انسخ العينة واستبدل ملف main.bicep .
تحدد المعلمة storageNamePrefix
قيمة بادئة لاسم حساب التخزين. يقوم المتغير storageAccountName
بتسلسل البادئة بسلسلة فريدة.
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '2.0'
@description('Location for all resources.')
param location string = resourceGroup().location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
location: location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
location: location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'location': {
'type': 'string'
'defaultValue': '[resourceGroup().location]'
'metadata': {
'description': 'Location for all resources.'
}
}
'storageNamePrefix': {
'type': 'string'
'defaultValue': 'storage'
'metadata': {
'description': 'The storage account name prefix.'
}
'maxLength': 11
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', toLower(parameters(\'storageNamePrefix\')), uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2022-09-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
لإضافة الإصدار الجديد إلى مواصفات القالب، قم بتوزيع القالب باستخدام Azure CLI أو Azure PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
انسخ وحدة Bicep التالية، واحفظها على جهاز الكمبيوتر لديك كـ storage.bicep .
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
استبدل <subscriptionId>
في الوحدة. استخدم Azure PowerShell أو Azure CLI للحصول على معرف اشتراكك.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
قم بتوزيع مواصفات القالب باستخدام Azure PowerShell أو Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
تنظيف الموارد
لتنظيف الموارد التي قمت بتوزيعها في هذا التشغيل السريع، احذف كلتا مجموعتي الموارد. سيتم حذف مجموعة الموارد، ومواصفات القالب، وحسابات التخزين.
استخدم Azure CLI أو Azure PowerShell لحذف مجموعات الموارد.
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
الخطوات التالية