نمط ملف متغير مشترك

قلل من تكرار القيم المشتركة في ملفات Bicep الخاصة بك. بدلاً من ذلك، قم بتحميل هذه القيم من ملف JSON مشترك داخل ملف Bicep الخاص بك. عند استخدام الصفائف، اجمع القيم المشتركة مع القيم الخاصة بالنشر في التعليمة البرمجية لـ Bicep.

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

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

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

حل

قم بإنشاء ملف JSON يتضمن المتغيرات التي تريد مشاركتها. استخدم loadJsonContent()الدالة لتحميل الملف والوصول إلى المتغيرات. بالنسبة لمتغيرات الصفيف، استخدم concat()الدالة لدمج القيم المشتركة مع أي قيم مخصصة لمورد معين.

مثال 1: بادئات التسمية

افترض أن لديك عدة ملفات Bicep تحدد الموارد. تحتاج إلى استخدام بادئة تسمية متسقة لجميع مواردك.

حدد ملف JSON يتضمن بادئات التسمية الشائعة التي تنطبق عبر شركتك:

{
  "storageAccountPrefix": "stg",
  "appServicePrefix": "app"
}

في ملف Bicep الخاص بك، أعلن عن متغير يقوم باستيراد بادئات التسمية المشتركة:

var sharedNamePrefixes = loadJsonContent('./shared-prefixes.json')

عند تحديد أسماء الموارد الخاصة بك، استخدم الاستيفاء النصي لسلسلة بادئات الاسم المشترك مع لاحقات الاسم الفريد:

var appServiceAppName = '${sharedNamePrefixes.appServicePrefix}-myapp-${uniqueString(resourceGroup().id)}'
var storageAccountName = '${sharedNamePrefixes.storageAccountPrefix}myapp${uniqueString(resourceGroup().id)}'

مثال 2: قواعد مجموعة أمان الشبكة

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

حدد ملف JSON يتضمن قواعد الأمان العامة التي تنطبق عبر شركتك:

{
  "securityRules": [
    {
      "name": "Allow_RDP_from_company_IP_address",
      "properties": {
        "description": "Allow inbound RDP from the company's IP address range.",
        "protocol": "Tcp",
        "sourceAddressPrefix": "203.0.113.0/24",
        "sourcePortRange": "*",
        "destinationAddressPrefix": "VirtualNetwork",
        "destinationPortRange": "3389",
        "access": "Allow",
        "priority": 100,
        "direction": "Inbound"
      }
    },
    {
      "name": "Allow_VirtualNetwork_to_Storage",
      "properties": {
        "description": "Allow outbound connections to the Azure Storage service tag.",
        "protocol": "Tcp",
        "sourceAddressPrefix": "VirtualNetwork",
        "sourcePortRange": "*",
        "destinationAddressPrefix": "Storage",
        "destinationPortRange": "*",
        "access": "Allow",
        "priority": 100,
        "direction": "Outbound"
      }
    }
    // other rules here
  ]
}

في ملف Bicep الخاص بك، قم بتعريف متغير يقوم باستيراد قواعد الأمان المشتركة:

var sharedRules = loadJsonContent('./shared-rules.json', 'securityRules')

أنشئ صفيف متغير يمثل القواعد المخصصة لمجموعة NSG المحددة هذه:

var customRules = [
  {
    name: 'Allow_Internet_HTTPS_Inbound'
    properties: {
      description: 'Allow inbound internet connectivity for HTTPS only.'
      protocol: 'Tcp'
      sourcePortRange: '*'
      destinationPortRange: '443'
      sourceAddressPrefix: 'Internet'
      destinationAddressPrefix: 'VirtualNetwork'
      access: 'Allow'
      priority: 400
      direction: 'Inbound'
    }
  }
]

تعريف مورد NSG. استخدم الدالة concat()لدمج الصفائف معًا وتعيين الخاصيةsecurityRules:

resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
  name: nsgName
  location: location
  properties: {
    securityRules: concat(sharedRules, customRules)
  }
}

الاعتبارات

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

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

تعرف على نمط مجموعة التكوين.