تدريب - إضافة معلمات ومخرجات إلى قالب Azure Resource Manager
في هذا التمرين، ستضيف معلمة لتعريف اسم حساب تخزين Azure أثناء النشر. ثم ستضيف معلمة لتحديد وحدات SKU لحساب التخزين المسموح بها، وتحديد أي واحدة لاستخدامها في هذا النشر. ستضيف أيضا فائدة إلى قالب Azure Resource Manager (قالب ARM) عن طريق إضافة إخراج يمكنك استخدامه لاحقا في عملية النشر.
إنشاء معلمات لقالب ARM
هنا، ستجعل قالب ARM الخاص بك أكثر مرونة عن طريق إضافة معلمات يمكن تعيينها في وقت التشغيل. إنشاء معلمة لقيمة storageName
.
في ملف azuredeploy.json في التعليمات البرمجية لـ Visual Studio، ضع المؤشر داخل الأقواس في سمة المعلمات. يبدو كما يلي:
"parameters":{},
حدد إدخال، ثم أدخل المعلمة. يمكنك مشاهدة قائمة بالقصاصات البرمجية ذات الصلة. اختر معلمة جديدة، والتي تضيف معلمة عامة إلى القالب. يبدو مثل هذا:
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
قم بتغيير المعلمة إلى من parameter1 إلى storageName واترك النوع كسلسلة. إضافة قيمة minLength من 3 وقيمة maxLength من 24. إضافة قيمة وصف لاسم مصدر تخزين Azure.
يجب أن تبدو كتلة المعلمة كما يلي:
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
استخدم المعلمة الجديدة في
resources
الكتلة في القيمتينname
وdisplayName
. سوف يبدو الملف بأكمله على النحو التالي:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } }, "functions": [], "variables": {}, "resources": [ { "name": "[parameters('storageName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS", "tier": "Standard" } } ], "outputs": {} }
احفظ الملف.
نشر قالب ARM المحدد بالمعلمات
هنا، ستقوم بتغيير اسم النشر ليعكس بشكل أفضل ما يفعله هذا النشر وملء قيمة للمعلمة الجديدة.
تشغيل الأوامر CLI Azure التالية في الوحدة الطرفية. هذه القصاصة البرمجية هي نفس التعليمات البرمجية التي استخدمتها سابقًا، ولكن يتم تغيير اسم النشر. تعبئة اسم فريد لمعلمة storageName
. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في الوحدة الأخيرة. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today
az deployment group create \
--name $DeploymentName \
--template-file $templateFile \
--parameters storageName={your-unique-name}
تشغيل الأوامر Azure PowerShell التالية في الوحدة الطرفية. هذه القصاصة البرمجية هي نفس التعليمات البرمجية التي استخدمتها سابقًا، ولكن يتم تغيير اسم النشر. تعبئة اسم فريد لمعلمة storageName
. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في الوحدة الأخيرة. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.
$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
-Name $deploymentName `
-TemplateFile $templateFile `
-storageName {your-unique-name}
تحقق من النشر
عند انتهاء النشر، ارجع إلى مدخل Microsoft Azure في المستعرض الخاص بك. انتقل إلى مجموعة الموارد الخاصة بك، وانظر إلى أن هناك الآن 3 عمليات نشر ناجحة. حدد هذا الارتباط.
لاحظ أن كافة عمليات النشر الثلاث موجودة في القائمة.
استكشاف نشر addnameparameter كما فعلت سابقًا.
إضافة معلمة أخرى للحد من القيم المسموح بها
هنا، ستستخدم المعلمات للحد من القيم المسموح بها للمعلمة.
ضع المؤشر بعد قوس الإغلاق للمعلمة
storageName
. إضافة فاصلة، وحدد إدخال.مرة أخرى، أدخل par وحدد new-parameter.
غير المعلمة العامة الجديدة إلى ما يلي:
"storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] }
هنا، ستقوم بإدراج القيم التي ستسمح بها هذه المعلمة. إذا كان القالب يعمل بقيمة غير مسموح بها، فسيفشل النشر.
إضافة تعليق إلى هذه المعلمة.
تدعم قوالب ARM تعليقات
//
و/* */
.تحديث الموارد لاستخدام معلمة
storageSKU
. الاستفادة من IntelliSense في التعليمات البرمجية Visual Studio لجعل هذه الخطوة أسهل."sku": { "name": "[parameters('storageSKU')]" }
سوف يبدو الملف بأكمله على النحو التالي:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } }, "storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] } }, "functions": [], "variables": {}, "resources": [ { "name": "[parameters('storageName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "[parameters('storageSKU')]", "tier": "Standard" } } ], "outputs": {} }
احفظ الملف.
نشر قالب ARM
هنا، سوف يتم النشر بنجاح باستخدام storageSKU
معلمة موجودة في القائمة المسموح بها. حينها، ستجرب نشر القالب مستخدمًا storageSKU
معلمة غير موجودة في القائمة المسموح بها. سيفشل النشر الثاني كما هو متوقع.
تشغيل الأوامر التالية لنشر القالب. تعبئة اسم فريد لمعلمة
storageName
. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_GRS storageName={your-unique-name}
السماح بإنهاء هذا النشر. تنجح عملية النشر هذه كما هو متوقع. تمنع القيم المسموح بها مستخدمي القالب من تمرير قيم المعلمات التي لا تعمل للمورد. دعونا نر ما يحدث عند توفير SKU غير صالح.
تشغيل الأوامر التالية لنشر القالب مع معلمة غير مسموح بها. هنا قمت بتغيير معلمة
storageSKU
إلى أساسية. تعبئة اسم فريد لمعلمةstorageName
. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Basic storageName={your-unique-name}
فشل هذا النشر. لاحظ الخطأ.
تشغيل الأوامر التالية لنشر القالب. تعبئة اسم فريد لمعلمة
storageName
. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_GRS
السماح بإنهاء هذا النشر. تنجح عملية النشر هذه كما هو متوقع. تمنع القيم المسموح بها مستخدمي القالب من تمرير قيم المعلمات التي لا تعمل للمورد. دعونا نر ما يحدث عند توفير SKU غير صالح.
تشغيل الأوامر التالية لنشر القالب مع معلمة غير مسموح بها. هنا قمت بتغيير معلمة
storageSKU
إلى أساسية. تعبئة اسم فريد لمعلمةstorageName
. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Basic
فشل هذا النشر. لاحظ الخطأ.
إضافة مخرج إلى قالب ARM
هنا، ستضيف إلى outputs
قسم من قالب ARM لإخراج نقاط النهاية لمورد حساب التخزين.
في ملف azuredeploy.json في التعليمات البرمجية لـ Visual Studio، ضع المؤشر داخل الأقواس في سمة المخرجات
"outputs":{},
.اضغط على مفتاح الإدخال Enter، ثم أدخل . ستحصل على قائمة بالمقتطفات ذات الصلة. حدد new-output. فإنه يضيف إخراجًا عامًا إلى القالب. سيبدو هكذا:
"outputs": { "output1": { "type": "string", "value": "value" }
قم بتغيير "output1" إلى "storageEndpoint"، ثم قم بتغيير قيمة
type
إلى "object". غير قيمةvalue
إلى "[reference(parameters('storageName')).primaryEndpoints]". هذا التعبير هو الذي ناقشناه في الوحدة السابقة الذي يحصل على بيانات نقطة النهاية. نظرا لأننا حددنا الكائن كنوع، فسيعيد الكائن بتنسيق JSON."outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
احفظ الملف.
نشر قالب ARM مع إخراج
هنا، ستقوم بنشر القالب ورؤية إخراج نقاط النهاية ك JSON. تعبئة اسم فريد لمعلمة storageName
. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.
تشغيل الأوامر التالية لنشر القالب. تأكد من استبدال {your-unique-name} بسلسلة فريدة لك.
templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addoutputs-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_LRS storageName={your-unique-name}
لاحظ الإخراج.
تشغيل الأوامر التالية لنشر القالب. تأكد من استبدال {your-unique-name} بسلسلة فريدة لك.
$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addOutputs-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_LRS
لاحظ الإخراج.
تحقق من نشر الإخراج
في مدخل Azure، انتقل إلى نشر addOutputs. يمكنك العثور على الإخراج الخاص بك هناك أيضًا.