استخدام حلقات متغيّر ومخرجات

مكتمل

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

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

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

في هذه الوحدة، ستتعلم كيفية استخدام الحلقات مع المتغيرات والمخرجات.

إشعار

يتم عرض الأوامر في هذه الوحدة لتوضيح المفاهيم. لا تشغّل الأوامر الآن. ستتدرب على ما تتعلمه هنا قريبا.

حلقات متغيّرة

باستخدام حلقات متغيّرة، يمكنك إنشاء صفيف، والذي يمكنك استخدامه بعد ذلك من خلال ملف Bicep الخاص بك. كما تفعل مع الحلقات الأخرى، يمكنك استخدام الكلمة الأساسية for لإنشاء حلقة متغيّر:

var items = [for i in range(1, 5): 'item${i}']

ينشئ المثال السابق صفيفًا يحتوي على القيم item1 وitem2 وitem3 وitem4 وitem5.

عادة ما تستخدم حلقات متغيرة لإنشاء كائنات أكثر تعقيدا يمكنك استخدامها بعد ذلك ضمن إعلان المورد. إليك كيفية استخدام حلقات متغيّر لإنشاء خاصية subnets:

param addressPrefix string = '10.10.0.0/16'
param subnets array = [
  {
    name: 'frontend'
    ipAddressRange: '10.10.0.0/24'
  }
  {
    name: 'backend'
    ipAddressRange: '10.10.1.0/24'
  }
]

var subnetsProperty = [for subnet in subnets: {
  name: subnet.name
  properties: {
    addressPrefix: subnet.ipAddressRange
  }
}]

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-08-01' = {
  name: 'teddybear'
  location: resourceGroup().location
  properties:{
    addressSpace:{
      addressPrefixes:[
        addressPrefix
      ]
    }
    subnets: subnetsProperty
  }
}

يوضح هذا المثال استخداما فعالا للحلقات المتغيرة: تحويل معلمة تحتوي على قيم بسيطة وسهلة الفهم إلى كائن أكثر تعقيدا يتوافق مع التعريف المطلوب لمورد Azure. يمكنك استخدام حلقات متغيرة لتمكين المعلمات لتحديد المعلومات الرئيسية التي سيتم تغييرها فقط لكل عنصر في القائمة. ثم يمكنك بعد ذلك استخدام تعبيرات Bicep أو القيم الافتراضية لتعيين الخصائص الأخرى المطلوبة لهذا المورد.

حلقات المخرجات

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

كما تفعل مع التكرارات الحلقية الأخرى، استخدم for الكلمة الأساسية لتحديد حلقة إخراج:

var items = [
  'item1'
  'item2'
  'item3'
  'item4'
  'item5'
]

output outputItems array = [for i in range(0, length(items)): items[i]]

ستستخدم عادة حلقات المخرجات بالتزامن مع حلقات أخرى داخل القالب. على سبيل المثال، لننظر إلى ملف Bicep الذي ينشر مجموعة من حسابات التخزين إلى مناطق Azure المحددة بواسطة المعلمة locations:

param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

resource storageAccounts 'Microsoft.Storage/storageAccounts@2021-09-01' = [for location in locations: {
  name: 'toy${uniqueString(resourceGroup().id, location)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

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

إشعار

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

output storageEndpoints array = [for i in range(0, length(locations)): {
  name: storageAccounts[i].name
  location: storageAccounts[i].location
  blobEndpoint: storageAccounts[i].properties.primaryEndpoints.blob
  fileEndpoint: storageAccounts[i].properties.primaryEndpoints.file
}]

تنبيه

لا تستخدم المخرجات لإرجاع الأسرار، مثل مفاتيح الوصول أو كلمات المرور. يتم تسجيل المخرجات، وهي غير مصممة لمعالجة البيانات الآمنة.