نشر الموارد باستخدام Bicep وAzure PowerShell

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

المتطلبات الأساسية

تحتاج إلى ملف Bicep للنشر. يجب أن يكون الملف محلياً.

تحتاج إلى Azure PowerShell وأن تكون متصلاً بـ Azure:

إذا لم يكن لديك PowerShell مثبتًا، فيمكنك استخدام Azure Cloud Shell. لمزيد من المعلومات، راجع نشر ملفات Bicep من Azure Cloud Shell.

الأذونات المطلوبة

لتوزيع ملف Bicep أو قالب ARM، يلزم الوصول إلى الكتابة على الموارد التي تستخدمها والوصول إلى جميع العمليات على نوع المورد Microsoft.Resources/deployments. على سبيل المثال، لتوزيع جهاز ظاهري، تحتاج إلى أذونات Microsoft.Compute/virtualMachines/write وMicrosoft.Resources/deployments/*. عملية "ماذا لو" لها متطلبات الإذن نفسها.

للحصول على قائمة بالأدوار والأذونات، انظر أدوار Azure المضمنة.

نطاق النشر

يمكنك توجيه عملية النشر إلى مجموعة موارد أو اشتراك أو مجموعة إدارة أو مستأجر. اعتماداً على نطاق النشر، يمكنك استخدام أوامر مختلفة.

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

نشر ملف Bicep المحلي

يمكنك نشر ملف Bicep من الجهاز المحلي أو ملف مُخزن خارجياً. يصف هذا القسم نشر ملف Bicep محلي.

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

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

لنشر ملف Bicep محلي، استخدم -TemplateFile مفتاح التبديل في أمر النشر.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile <path-to-bicep>

قد يستغرق النشر عدة دقائق حتى يكتمل.

نشر ملف Bicep عن بُعد

حالياً، لا يدعم Azure PowerShell نشر ملفات Bicep عن بُعد. يمكنك استخدام Bicep CLI من أجل إنشاء ملف Bicep إلى قالب JSON، ثم تحميل ملف JSON إلى الموقع البعيد.

المعلمات

لتمرير قيم المعلمات، يمكنك استخدام معلمات مضمنة أو ملف معلمات. يمكن أن يكون ملف المعلمات إما ملف معلمات Bicep أو ملف معلمات JSON.

المعلمات المُضمنة

لتمرير معلمات مُضمنة، قم بتوفير أسماء المعلمة مع الأمر New-AzResourceGroupDeployment. على سبيل المثال، لتمرير سلسلة صفيف إلى ملف Bicep، استخدم:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -exampleString "inline string" `
  -exampleArray $arrayParam

يمكنك استخدام المعلمة TemplateParameterObject للتمرير عبر hashtable الذي يحتوي على معلمات القالب.

$params = @{
  exampleString = "inline string"
  exampleArray = "value1", "value2"
}

New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -TemplateParameterObject $params

يمكنك أيضاً الحصول على محتويات الملف وتوفير هذا المحتوى كمعلمة مُضمنة.

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

يُعد الحصول على قيمة معلمة من ملف مفيداً عندما تحتاج إلى توفير قيم التكوين. على سبيل المثال، يمكنك توفير قيم تهيئة السحابة لجهاز Linux ظاهري.

إذا كنت بحاجة إلى تمرير في صفيف من الكائنات، قم بإنشاء جداول التجزئة في PowerShell وأضفها إلى الصفيف. قم بتمرير هذا الصفيف كمعلمة أثناء النشر.

$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -exampleArray $subnetArray

ملفات معلمات Bicep

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

باستخدام الإصدار 10.4.0 من Azure PowerShell أو أحدث، وإصدار Bicep CLI 0.22.X أو أعلى، يمكنك نشر ملف Bicep باستخدام ملف معلمة Bicep. مع العبارة using داخل ملف معلمات Bicep، ليست هناك حاجة لتوفير -TemplateFile مفتاح التبديل عند تحديد ملف معلمة Bicep للتبديل -TemplateParameterFile .

يوضح المثال التالي ملف معلمات يسمى storage.bicepparam. الملف موجود في نفس الدليل حيث يتم تشغيل الأمر.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateParameterFile storage.bicepparam

لمزيد من المعلومات حول ملف المعلمات، راجع إنشاء ملف معلمات Resource Manager.

ملفات معلمات JSON

يمكن أن يكون ملف معلمات JSON ملفا محليا أو ملفا خارجيا مع URI يمكن الوصول إليه. لمزيد من المعلومات حول ملف المعلمات، راجع إنشاء ملف معلمات Resource Manager.

لتمرير ملف معلمات محلي، استخدم TemplateParameterFile مفتاح التبديل مع ملف معلمات JSON:

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\BicepFiles\storage.bicep `
  -TemplateParameterFile c:\BicepFiles\storage.parameters.json

لتمرير ملف معلمات خارجي، استخدم المعلمة TemplateParameterUri :

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\BicepFiles\storage.bicep `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json

لا تدعم .bicepparam المعلمة TemplateParameterUri الملفات، بل تدعم ملفات معلمات JSON فقط.

يمكنك استخدام المعلمات المضمنة وملف معلمات الموقع في نفس عملية النشر. لمزيد من المعلومات، راجع أسبقية المعلمة.

معاينة التغييرات

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

نشر مواصفات القالب

حاليا، لا يدعم Azure PowerShell إنشاء مواصفات القالب من خلال توفير ملفات Bicep. ومع ذلك، يمكنك إنشاء ملف Bicep باستخدام المورد Microsoft.Resources/templateSpecss لنشر مواصفات قالب. تعرض إنشاء عينة مواصفات قالب كيفية إنشاء مواصفات قالب في ملف Bicep. يمكنك أيضاً إنشاء ملف Bicep إلى JSON باستخدام Bicep CLI، ثم إنشاء مواصفات قالب باستخدام قالب JSON.

اسم التوزيع

عند نشر ملف Bicep، يمكنك إعطاء النشر اسماً. يمكن أن يساعدك هذا الاسم في استرداد النشر من محفوظات النشر. إذا لم تقم بتوفير اسم للنشر، يتم استخدام اسم ملف Bicep. على سبيل المثال، إذا قمت بنشر Bicep المسماة main.bicep ولم تقم بتحديد اسم نشر، يتم تسمية النشر بـ main.

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

لإنشاء اسماً فريداً، يمكنك تعيين رقم عشوائي.

$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix

أو إضافة قيمة تاريخ.

$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"

إذا قمت بتشغيل عمليات النشر المتزامنة إلى نفس مجموعة الموارد بنفس اسم النشر، فسيتم إكمال النشر الأخير فقط. تُستبدل أي عمليات نشر تحمل نفس الاسم، ولم تكتمل بعد، بعملية النشر الأخيرة. على سبيل المثال، إذا قمت بتشغيل نشر اسمه newStorage ينشر حساب تخزين مسمى storage1، وفي نفس الوقت قمت بتشغيل نشر آخر يسمى newStorage ينشر حساب تخزين مسمى storage2، فإنك تنشر حساب تخزين واحد فقط. يتم تسمية حساب التخزين الناتج بـ storage2.

ومع ذلك،، إذا قمت بتشغيل نشر اسمه newStorage ينشر حساب تخزين مسمى storage1، وبمجرد اكتماله قمت بتشغيل نشر آخر يسمى newStorage ينشر حساب تخزين مسمى storage2، فإنك تنشر حسابيّ تخزين. أحدهما يسمى storage1، والآخر يسمى storage2. ولكن لديك إدخال واحد فقط في محفوظات النشر.

عند تحديد اسم فريد لكل نشر، يمكنك تشغيلهم بشكل متزامن دون تعارض. إذا قمت بتشغيل نشر اسمه newStorage1 ينشر حساب تخزين مسمى storage1، وفي نفس الوقت قمت بتشغيل نشر آخر اسمه newStorage2 ينشر حساب تخزين مسمى storage2، فسيكون لديك حسابان للتخزين وإدخالان في محفوظات النشر.

لتجنب تعارض مع عمليات التوزيع المتزامنة ولضمان إدخالات فريدة في محفوظات التوزيع، قم بإعطاء كل توزيع اسمًا فريدًا.

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