التمرين - إعادة بناء القالب الخاص بك لاستخدام الوحدات النمطية

مكتمل

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

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

  • إضافة وحدة نمطية جديدة ونقل موارد App Service إليها.
  • الرجوع إلى الوحدة النمطية من قالب Bicep الأساسي.
  • إضافة مخرج لاسم مضيف تطبيق App Service، ثم إصداره من عمليات نشر الوحدة النمطية والقالب.
  • اختبار النشر للتأكد من صلاحية القالب.

إضافة ملف وحدة نمطية جديد

  1. في Visual Studio Code، قم بإنشاء مجلد جديد باسم modules في المجلد نفسه حيث قمت بإنشاء ملف main.bicep. في المجلد modules، قم بإنشاء ملف باسم appService.bicep. احفظ الملف.

  2. أضف المحتوى التالي إلى الملف 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 يحتاج إلى أن يكون مستقلاً.

  3. حفظ التغييرات على الملف. لاحظ أن Visual Studio Code لا يظهر لك أي خطوط متعرجة باللون الأحمر للإشارة إلى تحذيرات بشأن المتغيرات المفقودة، أو المعلمات المفقودة، أو الموارد غير الصالحة.

إضافة مرجعاً إلى الوحدة النمطية من القالب الأصل

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

  1. في الملف main.bicep، احذف موارد App Service وتعريفات المتغير appServicePlanName وappServicePlanSkuName. لا تحذف معلمات App Service، لأنك لا تزال بحاجة إليها. وكذلك، لا تحذف معلمات حساب التخزين، أو المتغيرات، أو الموارد.

  2. بأسفل ملف main.bicep، أضف تعليمات Bicep البرمجية التالية:

    module appService 'modules/appService.bicep' = {
      name: 'appService'
      params: {
        location: location
        appServiceAppName: appServiceAppName
        environmentType: environmentType
      }
    }
    

    لاحظ أنك تقوم بتحديد معلمات الوحدة النمطية الخاصة بك عن طريق الرجوع إلى المعلمات الموجودة في القالب الأصل.

  3. حفظ التغييرات على الملف.

إضافة اسم المضيف كمخرج

  1. أضف تعليمات Bicep البرمجية التالية بأسفل ملف appService.bicep:

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    تعلن هذه التعليمة البرمجية أن إخراج هذه الوحدة النمطية، والتي سيتم تسميتها appServiceAppHostName، سيكون من النوع string. سيحصل المخرج على قيمته من خاصية defaultHostName الخاصة بتطبيق App Service.

  2. حفظ التغييرات على الملف.

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

  3. افتح ملف main.bicep وأضف التعليمات البرمجية التالية إلى أسفل الملف:

    output appServiceAppHostName string = appService.outputs.appServiceAppHostName
    

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

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

التحقق من ملف 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

تحقق من النشر

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

  2. حدد رابط "2 Succeeded". لاحظ أن لديك عملية نشر تسمى main في القائمة، ونشر جديد يسمى appService.

    Screenshot of the Azure portal interface for the deployments, with the two deployments listed and succeeded statuses.

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

    لاحظ أن عملية نشر الوحدة النمطية لدينا تظهر في القائمة.

    Screenshot of the Azure portal interface for the specific deployment, with one resource listed.

  4. حدد علامة تبويب "Outputs". لاحظ أنه يوجد مخرج باسم "appServiceAppHostName" يشمل اسم المضيف الخاص بتطبيق App Service لديك. انسخ اسم المضيف إلى الحافظة لديك.

    Screenshot of the Azure portal interface for the specific deployment's outputs.

  5. افتح علامة تبويب مستعرض جديدة والصق اسم المضيف الذي نسخته. يجب أن تظهر صفحة ترحيب App Service الافتراضية.

    Screenshot of the default App Service welcome page.

تهانينا! لقد نجحت في نشر الأساسيات لتطبيق رائع.