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

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

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

تلميح

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

بناء الجملة

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

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

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

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

حدود النسخ

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

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

  • إصدار 2.6 من Azure PowerShell أو إصدار أحدث
  • إصدار 2.0.74 من Azure CLI أو إصدار أحدث
  • إصدار 2019-05-10 من واجهة برمجة تطبيقات REST أو إصدار أحدث
  • يجب أن تستخدم عمليات النشر المرتبطة إصدار 2019-05-10 من واجهة برمجة التطبيقات أو إصدار أحدث لنوع مورد النشر

الإصدارات السابقة من PowerShell وCLI وواجهة برمجة تطبيقات 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"
  }
]

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