نمط مجموعة التكوين

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

السياق والمشكلة

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

يمكنك إنشاء معلمات لكل إعداد تكوين، ولكن هذا الأسلوب له بعض العيوب:

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

حل

تكوين معلمة واحدة لتحديد نوع البيئة. استخدم متغيراً لتحديد التكوين تلقائياً لكل مورد بناءً على قيمة المعلمة.

إشعار

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

مثال

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

الخاصية بيئات غير إنتاجية بيئات التشغيل
خطة App Service
اسم وحدة حفظ المخزون S2 P2V3
السعة (عدد المثيلات) 1 3
تطبيق خدمة التطبيقات
قيد التشغيل دائمًا مُعطل مُمَكّن
حساب التخزين
اسم وحدة حفظ المخزون Standard_LRS Standard_ZRS

يمكنك استخدام نمط مجموعة التكوين لهذا النموذج.

اقبل معلمة واحدة تشير إلى نوع البيئة، مثل الإنتاج أو غير الإنتاج. استخدم مصمم المعلمة @allowed للتأكد من أن مستخدمي النموذج يوفرون القيم التي تتوقعها فقط:

@allowed([
  'Production'
  'NonProduction'
])
param environmentType string = 'NonProduction'

ثم قم بإنشاء متغير خريطة ، وهو كائن يحدد التكوين المحدد اعتماداً على نوع البيئة. لاحظ أن المتغير يحتوي على كائنين باسم Production وNonProduction. تطابق هذه الأسماء القيم المسموح بها للمعامل في المثال السابق:

var environmentConfigurationMap = {
  Production: {
    appServicePlan: {
      sku: {
        name: 'P2V3'
        capacity: 3
      }
    }
    appServiceApp: {
      alwaysOn: false
    }
    storageAccount: {
      sku: {
        name: 'Standard_ZRS'
      }
    }
  }
  NonProduction: {
    appServicePlan: {
      sku: {
        name: 'S2'
        capacity: 1
      }
    }
    appServiceApp: {
      alwaysOn: false
    }
    storageAccount: {
      sku: {
        name: 'Standard_LRS'
      }
    }
  }
}

عند تحديد الموارد، استخدم خريطة التكوين لتحديد خصائص المورد:

resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
  name: appServicePlanName
  location: location
  sku: environmentConfigurationMap[environmentType].appServicePlan.sku
}

resource appServiceApp 'Microsoft.Web/sites@2022-09-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
    siteConfig: {
      alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
    }
  }
}

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: environmentConfigurationMap[environmentType].storageAccount.sku
}

الاعتبارات

  • في متغير الخريطة، ضع في اعتبارك تجميع الخصائص حسب المصدر لتبسيط تعريفها.
  • في متغير الخريطة، يمكنك تحديد قيم الخصائص الفردية (مثل الخاصية alwaysOn في المثال)، أو متغيرات الكائن التي تعين خاصية كائن (مثل خصائص SKU في المثال).
  • ضع في اعتبارك استخدام مجموعة تكوين مع شروط الموارد . يمكّن هذا رمز Bicep الخاص بك من نشر موارد معينة لبيئات معينة، وليس في بيئات أخرى.

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

تعرف على نمط الملف المتغير المشترك .