تكرار الإخراج في قوالب ARM

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

يمكنك أيضاً استخدام النسخ معالموارد،خصائص في مورد، والمخرجات.

تلميح

نوصي باستخدام Bicep لأنها تقدم نفس الإمكانات التي توفرها قوالب ARM ولأن بناء الجملة أسهل في الاستخدام. لمعرفة المزيد، راجع التكرارات الحلقية.

بناء الجملة

قم بإضافة copy العنصر إلى قسم الإخراج من القالب الخاص بك لإرجاع عدد من العناصر. يحتوي عنصر النسخ على التنسيق العام التالي:

"copy": {
  "count": <number-of-iterations>,
  "input": <values-for-the-output>
}

تحدد⁧count⁩الخاصية عدد التكرارات التي تريدها للمتغير.

تحددinputالخاصية الخصائص التي تريد تكرارها. إنشاء صفيف من العناصر التي تم إنشاؤها من القيمة في⁧input⁩الخاصية. يمكن أن يكون خاصية واحدة (مثل سلسلة)، أو عنصر بخصائص عدة.

حدود النسخ

لا يمكن أن يتجاوز العدد 800.

لا يمكن أن يكون العدد رقماً سالباً. يمكن أن يكون صفراً إذا قمت بتوزيع القالب باستخدام إصدار حديث من Azure CLI، أو PowerShell، أو REST API. تحديداً، يجب عليك استخدام:

  • Azure PowerShell⁧⁩2.6⁧⁩أو أحدث
  • Azure CLI⁧⁩2.0.74⁧⁩أو أحدث
  • إصدار REST API ⁩2019-05-10⁦ أو أحدث
  • ⁩في عمليات التوزيع المرتبط⁧⁩يجب استخدام إصدار API⁧⁩2019-05-10⁧⁩أو أحدث لنوع مورد التوزيع

لا تدعم الإصدارات السابقة من PowerShell وCLI وAPI REST صفرا للعد.

تكرار المخرجات

ينشئ المثال التالي عددا متغيرا من حسابات التخزين ويقوم بإرجاع نقطة نهاية لكل حساب تخزين:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageCount": {
      "type": "int",
      "defaultValue": 2
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[parameters('storageCount')]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}{1}', copyIndex(), variables('baseName'))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ],
  "outputs": {
    "storageEndpoints": {
      "type": "array",
      "copy": {
        "count": "[parameters('storageCount')]",
        "input": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
      }
    }
  }
}

يرجع القالب السابق صفيف بالقيم التالية:

[
  "https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
  "https://1storagecfrbqnnmpeudi.blob.core.windows.net/"
]

المثال التالي بإرجاع ثلاث خصائص من حسابات التخزين الجديدة.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageCount": {
      "type": "int",
      "defaultValue": 2
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[length(range(0, parameters('storageCount')))]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}{1}', range(0, parameters('storageCount'))[copyIndex()], variables('baseName'))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ],
  "outputs": {
    "storageInfo": {
      "type": "array",
      "copy": {
        "count": "[length(range(0, parameters('storageCount')))]",
        "input": {
          "id": "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', copyIndex(), variables('baseName')))]",
          "blobEndpoint": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]",
          "status": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).statusOfPrimary]"
        }
      }
    }
  }
}

يقوم المثال السابق بإرجاع صفيف بالقيم التالية:

[
  {
    "id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/0storagecfrbqnnmpeudi",
    "blobEndpoint": "https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
    "status": "available"
  },
  {
    "id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/1storagecfrbqnnmpeudi",
    "blobEndpoint": "https://1storagecfrbqnnmpeudi.blob.core.windows.net/",
    "status": "available"
  }
]

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