التمرين - إعادة بناء القالب الخاص بك لاستخدام الوحدات النمطية
في هذا التمرين، ستقوم بتحديث قالب Bicep الذي قمت بإنشائه مسبقًا بحيث يستخدم وحدة لموارد Azure App Service. تساعد الوحدات النمطية في الحفاظ على أن يكون هدف القالب الأساسي أكثر وضوحاً. يمكنك إعادة استخدام الوحدة النمطية لـ App Service في قوالب أخرى إذا اخترت ذلك.
أثناء العملية، ستقوم بما يلي:
- إضافة وحدة نمطية جديدة ونقل موارد App Service إليها.
- الرجوع إلى الوحدة النمطية من قالب Bicep الأساسي.
- إضافة مخرج لاسم مضيف تطبيق App Service، ثم إصداره من عمليات نشر الوحدة النمطية والقالب.
- اختبار النشر للتأكد من صلاحية القالب.
إضافة ملف وحدة نمطية جديد
في Visual Studio Code، قم بإنشاء مجلد جديد باسم modules في المجلد نفسه حيث قمت بإنشاء ملف main.bicep. في المجلد modules، قم بإنشاء ملف باسم appService.bicep. احفظ الملف.
أضف المحتوى التالي إلى الملف appService.bicep:
param location string param appServiceAppName string @allowed([ 'nonprod' 'prod' ]) param environmentType string var appServicePlanName = 'toy-product-launch-plan' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1' resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
لاحظ أنك قمت بنسخ المعلمات والمتغيرات من قالب main.bicep الخاص بك، لأن قالب appService.bicep يحتاج إلى أن يكون مستقلاً.
حفظ التغييرات على الملف. لاحظ أن Visual Studio Code لا يظهر لك أي خطوط متعرجة باللون الأحمر للإشارة إلى تحذيرات بشأن المتغيرات المفقودة، أو المعلمات المفقودة، أو الموارد غير الصالحة.
إضافة مرجعاً إلى الوحدة النمطية من القالب الأصل
الآن بعد أن كانت لديك وحدة نمطية كاملة لنشر موارد App Service، يمكنك الرجوع إلى الوحدة النمطية داخل القالب الأصل. نظراً لأن الوحدة النمطية تقوم بتوزيع موارد App Service، يمكنك حذف الموارد والمتغيرات المقترنة من القالب الأصل.
في الملف main.bicep، احذف موارد App Service وتعريفات المتغير
appServicePlanName
وappServicePlanSkuName
. لا تحذف معلمات App Service، لأنك لا تزال بحاجة إليها. وكذلك، لا تحذف معلمات حساب التخزين، أو المتغيرات، أو الموارد.بأسفل ملف main.bicep، أضف تعليمات Bicep البرمجية التالية:
module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName environmentType: environmentType } }
لاحظ أنك تقوم بتحديد معلمات الوحدة النمطية الخاصة بك عن طريق الرجوع إلى المعلمات الموجودة في القالب الأصل.
حفظ التغييرات على الملف.
إضافة اسم المضيف كمخرج
أضف تعليمات Bicep البرمجية التالية بأسفل ملف appService.bicep:
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
تعلن هذه التعليمة البرمجية أن إخراج هذه الوحدة النمطية، والتي سيتم تسميتها
appServiceAppHostName
، سيكون من النوعstring
. سيحصل المخرج على قيمته من خاصيةdefaultHostName
الخاصة بتطبيق App Service.حفظ التغييرات على الملف.
يتم إعلان هذا الإخراج ضمن ملف Bicep الذي سنستخدمه كوحدة، لذلك سيكون متوفراً فقط للقالب الأصل. تحتاج أيضا إلى إرجاع الإخراج إلى الشخص الذي نشر القالب.
افتح ملف main.bicep وأضف التعليمات البرمجية التالية إلى أسفل الملف:
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
لاحظ أنه يتم الإعلان عن هذا الإخراج بطريقة مشابهة للإخراج الموجود في الوحدة النمطية. ولكن هذه المرة، أنت تشير إلى إخراج الوحدة النمطية بدلاً من خاصية المورد.
حفظ التغييرات على الملف.
التحقق من ملف Bicep لديك
بعد الانتهاء من كافة التغييرات السابقة، يجب أن يبدو الملف main.bicep مثل هذا المثال:
param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
@allowed([
'nonprod'
'prod'
])
param environmentType string
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
module appService 'modules/appService.bicep' = {
name: 'appService'
params: {
location: location
appServiceAppName: appServiceAppName
environmentType: environmentType
}
}
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
يجب أن يبدو ملف appService.bicep لديك مثل هذا المثال:
param location string
param appServiceAppName string
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
إذا لم يتطابق أي من الملفين مع المثال، قم بنسخ المثال أو ضبط القالب لديك ليطابق المثال.
نشر قالب Bicep المحدث
قم بتشغيل أمر Azure CLI التالي في المحطة الطرفية.
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
قم بتشغيل أمر Azure PowerShell التالي في المحطة الطرفية.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
تحقق من النشر
في المستعرض لديك، ارجع إلى مدخل Azure. انتقل إلى مجموعة الموارد الخاصة بك، وستلاحظ وجود اثنين من عمليات النشر الناجحة الآن.
حدد رابط "2 Succeeded". لاحظ أن لديك عملية نشر تسمى main في القائمة، ونشر جديد يسمى appService.
حدد عملية النشر باسم main، ثم حدد Deployment details لتوسيع قائمة الموارد التي تم توزيعها.
لاحظ أن عملية نشر الوحدة النمطية لدينا تظهر في القائمة.
حدد علامة تبويب "Outputs". لاحظ أنه يوجد مخرج باسم "appServiceAppHostName" يشمل اسم المضيف الخاص بتطبيق App Service لديك. انسخ اسم المضيف إلى الحافظة لديك.
افتح علامة تبويب مستعرض جديدة والصق اسم المضيف الذي نسخته. يجب أن تظهر صفحة ترحيب App Service الافتراضية.
تهانينا! لقد نجحت في نشر الأساسيات لتطبيق رائع.