فهم هيكل وصياغة قوالب ARM

توضح هذه المقالة بنية قالب Azure Resource Manager (قالب ARM). يعرض الأقسام المختلفة للقالب والخصائص المتوفرة في تلك الأقسام.

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

تلميح

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

للتعرف على عناصر ملف Bicep، راجع فهم البنية وبناء الجملة لملفات Bicep.

قالب

في أبسط هيكل، يحتوي القالب على العناصر التالية:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "",
  "contentVersion": "",
  "apiProfile": "",
  "definitions": { },
  "parameters": { },
  "variables": { },
  "functions": [ ],
  "resources": [ ], /* or "resources": { } with languageVersion 2.0 */
  "outputs": { }
}
اسم العنصر مطلوب الوصف
المخطط $ نعم موقع ملف مخطط JavaScript Object Notation (JSON) الذي يصف إصدار لغة القالب. يعتمد رقم الإصدار الذي تستخدمه على نطاق النشر ومحرر JSON.

إذا كنت تستخدم Visual Studio Code مع ملحق أدوات Azure Resource Manager، فاستخدم أحدث إصدار لعمليات توزيع مجموعة الموارد:
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

قد لا يتمكن المحررون الآخرون (بما في ذلك Visual Studio) من معالجة هذا المخطط. لهؤلاء المحررين، استخدم:
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

لتوزيع الاشتراك، استخدم:
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

لعمليات توزيع مجموعة الإدارة، استخدم:
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

بالنسبة لعمليات توزيع المستأجر، استخدم:
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion لا إصدار اللغة من القالب. لعرض تحسينات languageVersion 2.0، راجع languageVersion 2.0.
⁧⁩contentVersion⁧⁩ نعم إصدار النموذج (مثل 1.0.0.0). يمكنك تقديم أي قيمة لهذا العنصر. استخدم هذه القيمة لتوثيق التغييرات المهمة في القالب الخاص بك. عند نشر الموارد باستخدام القالب، يمكن استخدام هذه القيمة للتأكد من استخدام القالب الصحيح.
ملف التعريف لا إصدار API يعمل كمجموعة من إصدارات API لأنواع الموارد. استخدم هذه القيمة لتجنب الاضطرار إلى تحديد إصدارات API لكل مورد في القالب. عندما تحدد إصدار ملف تعريف API ولا تحدد إصدار API لنوع المورد، يستخدم Resource Manager إصدار API لنوع المورد المحدد في ملف التعريف.

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

لمزيد من المعلومات، راجع تتبع الإصدارات باستخدام ملفات تعريف واجهة برمجة التطبيقات.
التعاريف لا المخططات المستخدمة للتحقق من صحة قيم الصفيف والعنصر. التعريفات مدعومة فقط في languageVersion 2.0.
⁩المعلمات⁧ لا القيم التي يتم توفيرها عند تنفيذ النشر لتخصيص نشر المورد.
المتغيرات⁧ لا القيم التي يتم استخدامها كأجزاء JSON في القالب لتبسيط تعبيرات لغة القالب.
⁩الوظائف⁧ لا الوظائف المعرفة من قِبل المستخدم والمتاحة داخل القالب.
الموارد⁧ نعم أنواع الموارد التي يتم توزيعها أو تحديثها في مجموعة موارد أو اشتراك.
⁩النتائج⁧ لا القيم التي تم إرجاعها بعد النشر.

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

التعريفات

في definitions قسم من القالب، حدد المخططات المستخدمة للتحقق من صحة قيم الصفيف والعنصر. Definitions يمكن استخدام فقط مع languageVersion 2.0.

"definitions": {
  "<definition-name": {
    "type": "<data-type-of-definition>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the-type-definition>"
    }
  }
}
اسم العنصر مطلوب الوصف
اسم التعريف نعم اسم تعريف النوع. يجب أن يكون معرف JavaScript صالحاً.
النوع نعم نوع تعريف النوع. الأنواع والقيم المسموح بها هي string وsecurestring وint وbool وobject وsecureObject وarray. راجع أنواع البيانات في قوالب ARM.
القيم المسموح بها لا صفيف القيم المسموح بها لتعريف النوع للتأكد من توفير القيمة الصحيحة.
minValue لا الحد الأدنى لقيمة تعريفات نوع int، هذه القيمة شاملة.
maxValue لا الحد الأقصى لقيمة تعريفات نوع int، هذه القيمة شاملة.
minLength لا الحد الأدنى لطول السلسلة والسلسلة الآمنة وتعريفات نوع الصفيف، هذه القيمة شاملة.
maxLength لا الحد الأقصى لطول تعريفات السلسلة والسلسلة الآمنة ونوع الصفيف، تكون هذه القيمة شاملة.
بادئةItems لا مخطط التحقق من صحة عنصر صفيف في نفس الفهرس.
العناصر لا المخطط الذي يتم تطبيقه على جميع عناصر الصفيف الذي يكون فهرسه أكبر من أكبر فهرس للقيد prefixItems ، أو منطقي للتحكم في عناصر الصفيف الذي يكون فهرسه أكبر من أكبر فهرس للقيد prefixItems .
خصائص لا مخطط التحقق من صحة الكائن.
additionalProperties لا المخطط الذي يتم تطبيقه على جميع الخصائص غير المذكورة في القيد properties ، أو منطقي لقبول أي خاصية غير محددة في القيد properties .
مميز لا المخطط الذي يجب تطبيقه استنادا إلى خاصية تمييزية.
القيم الخاليه لا قيمة منطقية تشير إلى أن القيمة قد تكون خالية أو محذفة.
الوصف لا وصف تعريف النوع الذي يتم عرضه للمستخدمين من خلال المدخل. لمزيد من المعلومات، راجع التعليقات في القوالب.

للحصول على أمثلة حول كيفية استخدام تعريفات النوع، راجع تعريفات النوع في قوالب ARM.

في Bicep، راجع أنواع البيانات المعرفة من قبل المستخدم.

المعلمات

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

الخصائص المتوفرة لمعلمة هي:

"parameters": {
  "<parameter-name>" : {
    "type" : "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the parameter>"
    }
  }
}
اسم العنصر مطلوب الوصف
اسم المعلمة نعم اسم المعلمة. يجب أن يكون معرف JavaScript صالحاً.
النوع نعم نوع قيمة المعلمة. الأنواع والقيم المسموح بها هي string وsecurestring وint وbool وobject وsecureObject وarray. راجع أنواع البيانات في قوالب ARM.
القيمة الظاهرية لا القيمة الظاهرية للمعلمة، إذا لم يتم توفير قيمة للمعلمة.
القيم المسموح بها لا صفيف من القيم المسموح بها للمعلمة للتأكد من توفير القيمة الصحيحة.
minValue لا الحد الأدنى لقيمة معلمات نوع int، هذه القيمة شاملة.
maxValue لا الحد الأقصى لقيمة معلمات نوع int، هذه القيمة شاملة.
minLength لا الحد الأدنى لطول معلمات السلسلة والسلسلة الآمنة ونوع الصفيف، هذه القيمة شاملة.
maxLength لا الحد الأقصى لطول معلمات السلسلة والسلسلة الآمنة ونوع الصفيف، هذه القيمة شاملة.
البادئةItems لا تعريف النوع للتحقق من صحة عنصر صفيف في نفس الفهرس. prefixItems مدعوم فقط في languageVersion 2.0.
العناصر لا المخطط الذي يتم تطبيقه على جميع عناصر الصفيف الذي يكون فهرسه أكبر من أكبر فهرس للقيد prefixItems ، أو منطقي للتحكم في عناصر الصفيف الذي يكون فهرسه أكبر من أكبر فهرس للقيد prefixItems . items مدعوم فقط في languageVersion 2.0.
خصائص لا مخطط التحقق من صحة الكائن. properties مدعوم فقط في languageVersion 2.0.
additionalProperties لا المخطط الذي يتم تطبيقه على جميع الخصائص غير المذكورة في القيد properties ، أو منطقي لقبول أي خاصية غير محددة في القيد properties . additionalProperties مدعوم فقط في languageVersion 2.0.
مميز لا المخطط الذي يجب تطبيقه استنادا إلى خاصية تمييزية. discriminator مدعوم فقط في languageVersion 2.0.
القيم الخاليه لا قيمة منطقية تشير إلى أن القيمة قد تكون خالية أو محذفة. nullable مدعوم فقط في languageVersion 2.0.
الوصف لا وصف المعلمة التي يتم عرضها للمستخدمين من خلال المدخل. لمزيد من المعلومات، راجع التعليقات في القوالب.

للحصول على أمثلة حول كيفية استخدام المعلمات، راجع المعلمات في قوالب ARM.

في Bicep، راجع المعلمات.

المتغيرات

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

يوضح المثال التالي الخيارات المتاحة لتعريف متغير:

"variables": {
  "<variable-name>": "<variable-value>",
  "<variable-name>": {
    <variable-complex-type-value>
  },
  "<variable-object-name>": {
    "copy": [
      {
        "name": "<name-of-array-property>",
        "count": <number-of-iterations>,
        "input": <object-or-value-to-repeat>
      }
    ]
  },
  "copy": [
    {
      "name": "<variable-array-name>",
      "count": <number-of-iterations>,
      "input": <object-or-value-to-repeat>
    }
  ]
}

للحصول على معلومات حول استخدام copy لإنشاء عدة قيم لمتغير، راجع تكرار المتغير.

للحصول على أمثلة حول كيفية استخدام المتغيرات، راجع المتغيرات في نموذج ARM.

في Bicep، راجع المتغيرات.

الوظائف

ضمن القالب الخاص بك، يمكنك إنشاء الوظائف الخاصة بك. هذه الوظائف متاحة للاستخدام في القالب الخاص بك. عادة، تقوم بتعريف التعبيرات المعقدة التي لا تريد تكرارها في القالب الخاص بك. يمكنك إنشاء الوظائف المعرفة من قِبل المستخدم من التعبيرات والوظائف التي يتم دعمها في القوالب.

عند تحديد وظيفة المستخدم، هناك بعض القيود:

  • لا يمكن للدالة الوصول إلى المتغيرات.
  • يمكن للوظيفة فقط استخدام المعلمات التي تم تحديدها في الوظيفة. عندما تستخدم وظيفة المعلمات ضمن وظيفة محددة بواسطة المستخدم، فأنت مقيد بمعلمات هذه الوظيفة.
  • لا يمكن للوظيفة استدعاء وظائف أخرى يحددها المستخدم.
  • لا يمكن للدالة استخدام الوظيفة المرجعية.
  • لا يمكن أن تحتوي معلمات الوظيفة على قيم ظاهرية.
"functions": [
  {
    "namespace": "<namespace-for-functions>",
    "members": {
      "<function-name>": {
        "parameters": [
          {
            "name": "<parameter-name>",
            "type": "<type-of-parameter-value>"
          }
        ],
        "output": {
          "type": "<type-of-output-value>",
          "value": "<function-return-value>"
        }
      }
    }
  }
],
اسم العنصر مطلوب الوصف
مساحة الاسم نعم Namespace للوظائف المخصصة. تُستخدم لتجنب تعارض التسمية مع وظائف القالب.
اسم وظيفة نعم اسم الوظيفة المخصصة. عند استدعاء الوظيفة، ادمج اسم الوظيفة مع مساحة الاسم. على سبيل المثال، لاستدعاء وظيفة باسم uniqueName في contoso مساحة الاسم، استخدم "[contoso.uniqueName()]".
اسم المعلمة لا اسم المعلمة التي سيتم استخدامها داخل الوظيفة المخصصة.
قيمة المعلمة لا نوع قيمة المعلمة. الأنواع والقيم المسموح بها هي string وsecurestring وint وbool وobject وsecureObject وarray.
نوع المخرج نعم نوع قيمة الإخراج. تدعم قيم الإخراج نفس الأنواع مثل معلمات إدخال الوظيفة.
قيمة الانتاج نعم تعبير لغة القالب الذي يتم تقييمه وإعادته من الوظيفة.

للحصول على أمثلة حول كيفية استخدام الوظائف المخصصة، راجع الوظائف المعرفة من قِبل المستخدم في نموذج ARM.

في Bicep، لا يتم دعم الدوال المعرفة من قِبل المستخدم. يدعم Bicep وظائفوعوامل تشغيل مختلفة.

الموارد

في قسم resources، تحدد الموارد التي يتم توزيعها أو تحديثها. أنت مقيد ب 800 مورد في قالب.

تحدد الموارد بالبنية التالية:

"resources": [
  {
    "condition": "<true-to-deploy-this-resource>",
    "type": "<resource-provider-namespace/resource-type-name>",
    "apiVersion": "<api-version-of-resource>",
    "name": "<name-of-the-resource>",
    "comments": "<your-reference-notes>",
    "location": "<location-of-resource>",
    "dependsOn": [
        "<array-of-related-resource-names>"
    ],
    "tags": {
        "<tag-name1>": "<tag-value1>",
        "<tag-name2>": "<tag-value2>"
    },
    "identity": {
      "type": "<system-assigned-or-user-assigned-identity>",
      "userAssignedIdentities": {
        "<resource-id-of-identity>": {}
      }
    },
    "sku": {
        "name": "<sku-name>",
        "tier": "<sku-tier>",
        "size": "<sku-size>",
        "family": "<sku-family>",
        "capacity": <sku-capacity>
    },
    "kind": "<type-of-resource>",
    "scope": "<target-scope-for-extension-resources>",
    "copy": {
        "name": "<name-of-copy-loop>",
        "count": <number-of-iterations>,
        "mode": "<serial-or-parallel>",
        "batchSize": <number-to-deploy-serially>
    },
    "plan": {
        "name": "<plan-name>",
        "promotionCode": "<plan-promotion-code>",
        "publisher": "<plan-publisher>",
        "product": "<plan-product>",
        "version": "<plan-version>"
    },
    "properties": {
        "<settings-for-the-resource>",
        "copy": [
            {
                "name": ,
                "count": ,
                "input": {}
            }
        ]
    },
    "resources": [
        "<array-of-child-resources>"
    ]
  }
]
اسم العنصر مطلوب الوصف
الحالة لا قيمة منطقية تشير إلى ما إذا كان المورد قد تم توفيره أثناء هذا التوزيع. عند true، يتم إنشاء المورد أثناء النشر. عندما false، يتم تخطي المورد لهذا النشر. راجع الحالة .
النوع نعم نوع المورد. هذه القيمة هي تركيبة من مساحة الاسم لموفر المورد ونوع المورد مثل Microsoft.Storage/storageAccounts. لتحديد القيم المتاحة، راجع مرجع القالب. بالنسبة للمورد الفرعي، يعتمد تنسيق النوع على ما إذا كان متداخلاً داخل المورد الأصلي أو معرف خارج المورد الأصلي. راجع تعيين اسم ونوع الموارد التابعة.
apiVersion نعم إصدار من واجهة برمجة تطبيقات REST يستخدم لإنشاء المورد. عند إنشاء قالب جديد، قم بتعيين هذه القيمة على أحدث إصدار من المورد الذي تقوم بتوزيعه. طالما أن القالب يعمل حسب الحاجة، استمر في استخدام إصدار API نفسه. من خلال الاستمرار في استخدام نفس إصدار واجهة برمجة التطبيقات، فإنك تقلل من مخاطر تغيير إصدار جديد لواجهة برمجة التطبيقات طريقة عمل النموذج الخاص بك. ضع في اعتبارك تحديث إصدار API فقط عندما تريد استخدام ميزة جديدة يتم تقديمها في إصدار لاحق. لتحديد القيم المتاحة، راجع مرجع القالب.
الاسم نعم اسم المورد. يجب أن يتبع الاسم قيود مكون URI المحددة في RFC3986. تقوم خدمات Azure التي تعرض اسم المورد لأطراف خارجية بالتحقق من صحة الاسم للتأكد من أنه ليس محاولة انتحال هوية أخرى. بالنسبة للمورد الفرعي، يعتمد تنسيق الاسم على ما إذا كان متداخلاً داخل المورد الأصلي أو معرف خارج المورد الأصلي. راجع تعيين اسم ونوع الموارد التابعة.
تعليقات لا ملاحظاتك لتوثيق الموارد في القالب الخاص بك. لمزيد من المعلومات، راجع التعليقات في القوالب.
الموقع يتفاوت المواقع الجغرافية المدعومة للمورد المقدم. يمكنك تحديد أي من المواقع المتاحة، ولكن عادةً ما يكون من المنطقي اختيار موقع قريب من المستخدمين. عادة، من المنطقي أيضاً وضع الموارد التي تتفاعل مع بعضها البعض في نفس المنطقة. تتطلب معظم أنواع الموارد موقعاً، لكن بعض الأنواع (مثل تعيين الدور) لا تتطلب موقعاً. راجع تعيين موقع المورد .
dependsOn لا الموارد التي يجب توزيعها قبل توزيع هذا المورد. يقوم مدير الموارد بتقييم التبعيات بين الموارد وتوزيعها بالترتيب الصحيح. عندما لا تعتمد الموارد على بعضها البعض، يتم توزيعها بالتوازي. يمكن أن تكون القيمة قائمة مفصولة بفواصل لأسماء الموارد أو المعرفات الفريدة للمورد. سرد الموارد التي تم نشرها في هذا القالب فقط. يجب أن تكون الموارد التي لم يتم تحديدها في هذا القالب موجودة بالفعل. تجنب إضافة التبعيات غير الضرورية لأنها قد تؤدي إلى إبطاء التوزيع وإنشاء تبعيات دائرية. للحصول على إرشادات حول تعيين التبعيات، راجع تحديد ترتيب توزيع الموارد في قوالب ARM.
العلامات لا العلامات المرتبطة بالمورد. قم بتطبيق العلامات لتنظيم الموارد بشكل منطقي عبر اشتراكك.
الهوية لا تُدعم بعض الموارد الهويات المدارة لدعم موارد Azure تمتلك هذه الموارد عنصر تحديد الهوية في المستوى الجذري لتعريف المورد. يمكنك تعيين ما إذا كانت الهوية معينة من قِبل المستخدم أو معينة من قِبل النظام. بالنسبة للهويات المعينة من قِبل المستخدم، قم بتوفير قائمة معرفات الموارد للهويات. تعيين المفتاح إلى معرف المورد والقيمة إلى كائن فارغ. لمزيد من المعلومات، راجع تكوين الهويات المدارة لموارد Azure على Azure VM باستخدام القوالب .
sku لا تسمح بعض الموارد بتوزيع القيم التي تحدد SKU. على سبيل المثال، يمكنك تحديد نوع التكرار لحساب التخزين.
نوع لا تسمح بعض الموارد بقيمة تحدد نوع المورد الذي توزعه. على سبيل المثال، يمكنك تحديد نوع مثيل Azure Cosmos DB المراد إنشاؤه.
النطاق لا خاصية النطاق متاحة فقط لـ أنواع موارد الملحق. استخدمه عند تحديد نطاق مختلف عن نطاق التوزيع. راجع تعيين نطاق لموارد الملحق في قوالب ARM.
نسخ لا إذا كانت هناك حاجة إلى أكثر من مثيل واحد، فسيتم إنشاء عدد الموارد. الوضع الظاهري متوازٍ. حدد الوضع التسلسلي عندما لا تريد توزيع جميع الموارد أو الموارد في نفس الوقت. لمزيد من المعلومات، راجع إنشاء العديد من مثيلات الموارد في Azure Resource Manager.
تخطيط لا تسمح بعض الموارد بالقيم التي تحدد خطة التوزيع, على سبيل المثال، يمكنك تحديد صورة السوق لجهاز ظاهري.
خصائص لا إعدادات التكوين الخاصة بالموارد. قيم الخصائص هي نفس القيم التي تقدمها في نص الطلب لعملية REST API (طريقة PUT) لإنشاء المورد. يمكنك أيضاً تحديد مصفوفة نسخ لإنشاء عدة مثيلات للخاصية. لتحديد القيم المتاحة، راجع مرجع القالب.
موارد لا الموارد التابعة التي تعتمد على المورد الذي يتم تحديده. قم بتوفير أنواع الموارد المسموح بها فقط بواسطة مخطط المورد الرئيسي. الاعتماد على المورد الأصلي ليس ضمنياً. يجب عليك تحديد تلك التبعية صراحة. راجع تعيين اسم ونوع الموارد التابعة.

لدعم الاسم الرمزي Bicep في قوالب ARM JSON، أضف languageVersion بالإصدار 2.0 أو الأحدث، وغير تعريف المورد من صفيف إلى عنصر.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

لمزيد من المعلومات، راجع المورد

في Bicep، راجع الموارد.

المخرجات

في قسم outputs، تحدد القيم التي يتم إرجاعها من التوزيع. عادةً ما تقوم بإرجاع القيم من الموارد التي تم توزيعها. تقتصر على 64 مخرجا في القالب.

يوضح المثال التالي بنية تعريف الإخراج:

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
اسم العنصر مطلوب الوصف
اسم المخرج نعم اسم قيمة الإخراج. يجب أن يكون معرف JavaScript صالحاً.
الشرط لا القيمة المنطقية التي تشير إلى ما إذا كان سيتم إرجاع قيمة الإخراج هذه أم لا. عند true، يتم تضمين القيمة في إخراج النشر. عندما false، يتم تخطي قيمة الإخراج لهذا النشر. في حالة عدم تحديدها، تكون القيمة الافتراضية هي true.
النوع نعم نوع قيمة الإخراج. تدعم قيم الإخراج نفس الأنواع مثل معلمات إدخال القالب. إذا قمت بتحديد securestring لنوع الإخراج، فلن يتم عرض القيمة في محفوظات التوزيع ولا يمكن استردادها من قالب آخر. لاستخدام قيمة سرية في أكثر من نموذج واحد، قم بتخزين السر في Key Vault والإشارة إلى السر في ملف المعلمة. لمزيد من المعلومات، راجع استخدام Azure Key Vault لتمرير قيمة المعلمة الآمنة أثناء التوزيع.
القيمة لا تعبير لغة القالب الذي يتم تقييمه وإعادته كقيمة إخراج. حدد إما قيمة أو نسخة.
نسخ لا يُستخدم لإرجاع أكثر من قيمة لمخرج. حدد قيمة أو نسخة. لمزيد من المعلومات، راجع تكرار الإخراج في قوالب ARM.

للحصول على أمثلة حول كيفية استخدام النواتج، راجع المخرجات في نموذج ARM .

في Bicep، راجع المخرجات.

التعليقات وبيانات التعريف

لديك بعض الخيارات لإضافة التعليقات وبيانات التعريف إلى القالب الخاص بك.

التعليقات

للتعليقات المضمنة، يمكنك استخدام // أو /* ... */. في Visual Studio Code، احفظ ملفات المعلمات مع التعليقات كنوع ملف JSON مع التعليقات (JSONC)، وإلا فستتلقى رسالة خطأ تقول "التعليقات غير مسموح بها في JSON".

ملاحظة

عند استخدام Azure CLI لنشر القوالب مع التعليقات، استخدم الإصدار 2.3.0 أو إصداراً أحدث، وحدد --handle-extended-json-format رمز التبديل.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[parameters('location')]", //defaults to resource group location
  "dependsOn": [ /* storage account and network interface must be deployed first */
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

في Visual Studio Code، يمكن لـ ملحق Azure Resource Manager Tools اكتشاف قالب ARM تلقائياً وتغيير وضع اللغة. إذا رأيت Azure Resource Manager Template في الركن السفلي الأيسر من Visual Studio Code، فيمكنك استخدام التعليقات المضمنة. لم تعد التعليقات المضمنة مميزة على أنها غير صالحة.

لقطة شاشة ل Visual Studio Code في وضع قالب Azure Resource Manager.

في Bicep، راجع التعليقات.

بيانات التعريف

يمكنك إضافة كائن metadata في أي مكان تقريباً في القالب الخاص بك. يتجاهل Resource Manager الكائن، لكن محرر JSON الخاص بك قد يحذرك من أن الخاصية غير صالحة. في الكائن، حدد الخصائص التي تحتاجها.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "comments": "This template was developed for demonstration purposes.",
    "author": "Example Name"
  },

بالنسبة إلى parameters، أضف كائن metadata بخاصية description.

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "User name for the Virtual Machine."
    }
  },

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

لقطة شاشة تعرض تلميح المعلمة في مدخل Microsoft Azure.

بالنسبة إلى resources، أضف عنصر comments أو كائن metadata. يوضح المثال التالي كلاً من عنصر comments وكائن metadata.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "[format('{0}{1}', 'storage', uniqueString(resourceGroup().id))]",
    "comments": "Storage account used to store VM disks",
    "location": "[parameters('location')]",
    "metadata": {
      "comments": "These tags are needed for policy compliance."
    },
    "tags": {
      "Dept": "[parameters('deptName')]",
      "Environment": "[parameters('environment')]"
    },
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "properties": {}
  }
]

بالنسبة إلى outputs، أضف كائن metadata إلى قيمة الإخراج.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]",
    "metadata": {
      "comments": "Return the fully qualified domain name"
    }
  },

لا يمكنك إضافة كائن metadata إلى الوظائف المعرفة من قِبل المستخدم.

سلاسل متعددة الخطوط

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

ملاحظة

لنشر قوالب بسلاسل متعددة الخطوط، استخدم Azure PowerShell أو Azure CLI. بالنسبة إلى CLI، استخدم الإصدار 2.3.0 أو أحدث، وحدد مفتاح التبديل --handle-extended-json-format.

لا يتم دعم السلاسل متعددة الأسطر عند نشر القالب عبر مدخل Microsoft Azure أو خط تدفق DevOps أو واجهة برمجة تطبيقات REST.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

في Bicep، راجع مجموعة السلاسل الخطية.

languageVersion 2.0

ملاحظة

لا ينصح باستخدام أي languageVersion ينتهي في في -experimental بيئات الإنتاج لأنه يمكن تغيير الوظائف التجريبية في أي وقت.

ملاحظة

لا يتعرف الإصدار الحالي من ملحق Azure Resource Manager Tools ل Visual Studio Code على التحسينات التي تم إجراؤها في languageVersion 2.0.

لاستخدام languageVersion 2.0، أضف "languageVersion": "2.0" إلى القالب الخاص بك:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

التحسينات والتغييرات التي تأتي مع languageVersion 2.0:

  • استخدم الاسم الرمزي في قالب ARM JSON. لمزيد من المعلومات، راجع استخدام الاسم الرمزي.
  • استخدم الاسم الرمزي في حلقات نسخ المورد. راجع استخدام اسم رمزي.
  • استخدم الاسم الرمزي في dependsOn الصفائف. راجع DependsOn و Depend on resources in a loop.
  • استخدم اسما رمزيا بدلا من اسم المورد في الدالة reference . راجع المرجع.
  • دالة references() التي ترجع صفيفا من العناصر التي تمثل حالات وقت تشغيل مجموعة الموارد. راجع المراجع.
  • استخدم خاصية المورد "الموجودة" للإعلان عن الموارد الموجودة ل ARM لقراءة مورد بدلا من توزيعه. راجع الإعلان عن الموارد الموجودة.
  • إنشاء أنواع معرفة من قبل المستخدم. راجع تعريف النوع.
  • قيود إضافية للتحقق من صحة النوع التجميعي لاستخدامها في المعلماتوالمخرجات.
  • القيمة الافتراضية للخاصية expressionEvaluationOptions هي inner. تم حظر القيمة outer . راجع نطاق تقييم التعبير في القوالب المتداخلة.
  • ترجع deployment الدالة مجموعة فرعية محدودة من الخصائص. راجع التوزيع.
  • إذا تم استخدام مورد Deployments في توزيع اسم رمزي، فاستخدم apiVersion 2020-09-01 أو أحدث.
  • في تعريف المورد، لم تعد هناك حاجة إلى قيم الهروب المزدوج داخل تعبير. راجع إلغاء الأحرف.

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