التمرين - إضافة معلمات ومتغيرات إلى قالب Bicep الخاص بك

مكتمل

في هذا التمرين، ستقوم بتحديث قالب Bicep الذي قمت بإنشائه مسبقاً بحيث يقوم بالتالي:

  • قبول المعلمات الخاصة بمواقع الموارد وأسمائها
  • استخدام قواعد العمل الخاصة بك لتحديد وحدات SKU المناسبة للموارد التي يتم توزيعها

أثناء العملية، ستقوم بما يلي:

  • تحديث القالب لتضمين معلمة location
  • تحديث القالب لتضمين المعلمات والمتغيرات لأسماء الموارد
  • استخدام التعبيرات لتعيين القيم الافتراضية للمعلمات
  • تحديث القالب لتضمين متغيرات وحدة SKU لكل مورد
  • اختبار التوزيع للتأكد من صلاحية القالب

إضافة معلمات اسم الموقع والموارد

  1. في ملف main.bicep الموجود في Visual Studio Code، أضف التعليمات البرمجية التالية إلى أعلى الملف:

    param location string = 'westus3'
    param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

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

    لاحظ أنك تستخدم تعبيرات تتضمن استنتاج سلسلة والدالة uniqueString() لتعريف قيم المعلمات الافتراضية. يمكن للشخص الذي يقوم بنشر هذا القالب تجاوز قيم المعلمات الافتراضية عن طريق تحديد القيم في وقت النشر، ولكن لا يمكنه تجاوز قيم المتغيرات.

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

    تلميح

    أنت تحدد أنه يجب تعيين المعلمة location إلى westus3. عادةً، يمكنك إنشاء موارد في نفس موقع مجموعة الموارد باستخدام الخاصية resourceGroup().location. ولكن عند العمل مع بيئة الاختبار المعزولة Microsoft Learn، تحتاج إلى استخدام مناطق Azure معينة لا تتطابق مع موقع مجموعة الموارد.

  2. اعثر على الأماكن الموجودة بداخل تعريفات الموارد حيث يتم تعيين الخصائص location وname، وقم بتحديثها لاستخدام قيم المعلمة. بعد الانتهاء، يجب أن تظهر تعريفات الموارد الموجودة بداخل ملف Bicep كما يلي:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2021-08-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: 'Standard_LRS'
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2021-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2021-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    
  3. احفظ التغييرات إلى الملف.

تعيين وحدات SKU تلقائياً لكل نوع من أنواع البيئات

  1. في ملف main.bicep الموجود في Visual Studio Code، أضف المعلمة التالية لـ Bicep بأسفل المعلمات التي قمت بإنشائها في المهمة السابقة:

    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    

    لاحظ أنك تقوم بتعريف معلمة بمجموعة من القيم المسموح بها، ولكنك لا تحدد قيمة افتراضية لهذه المعلمة.

  2. أسفل السطر الذي يقوم بتعريف المتغير appServicePlanName قم بإضافة تعريفات المتغير التالية:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    

    لاحظ أنك تقوم بتعيين قيم المتغيرات هذه باستخدام العامل الثلاثي للتعبير عن بعض العمليات المنطقية if/then/else logic.

  3. اعثر على الأماكن الموجودة بداخل تعريفات الموارد حيث يتم تعيين خصائص sku، وقم بتحديثها لاستخدام قيم المعلمة. بعد الانتهاء، يجب أن تبدو تعريفات الموارد في ملف Bicep لديك كما يلي:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2021-08-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: storageAccountSkuName
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2021-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2021-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    لاحظ أنك لم تقم بتعيين معلمات لكل شيء. لقد قمت بتعيين بعض الخصائص في تعريفات الموارد مباشرةً، إذ إنك تعرف أن ذلك لن يتغير بين عمليات التوزيع.

  4. احفظ التغييرات إلى الملف.

نشر قالب Bicep المحدث

قم بتشغيل أمر Azure CLI التالي في المحطة الطرفية. يشبه ذلك الأمر الذي قمت بتشغيله من قبل.

az deployment group create \
  --template-file main.bicep \
  --parameters environmentType=nonprod

قم بتشغيل أمر Azure PowerShell التالي في المحطة الطرفية. يشبه ذلك الأمر الذي قمت بتشغيله من قبل.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -environmentType nonprod

لاحظ أنك قمت بتحديد القيمة بوضوح للمعلمة environmentType عند تنفيذ النشر. لا تحتاج إلى تحديد جميع قيم المعلمات الأخرى لأنها تحتوي على إعدادات افتراضية ذات معنى.

التحقق من عملية نشرك

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

  2. حدد رابط "1 Succeeded".

  3. حدد عملية النشر باسم "main"، ثم حدد "Deployment details" لتوسيع قائمة الموارد التي تم نشرها.

    Screenshot of the Azure portal interface for the specific deployment, with storage account and App Service resources listed with generated names..

  4. لاحظ أنه تم توزيع تطبيق App Service جديد وحساب تخزين بأسماء تم إنشاؤها عشوائيًا.