فهم بنية وبناء جملة قوالب 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 (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 2.0، راجع languageVersion 2.0.
إصدار المحتوى ‏‏نعم‬ نسخة من القالب (مثل 1.0.0.0). يمكنك تقديم أي قيمة لهذا العنصر. استخدم هذه القيمة لتوثيق التغييرات الهامة في القالب الخاص بك. عند نشر الموارد باستخدام القالب، يمكن استخدام هذه القيمة للتأكد من استخدام القالب الصحيح.
apiProfile لا إصدار API يعمل كمجموعة من إصدارات API لأنواع الموارد. يمكنك استخدام هذه القيمة لتجنب الحاجة إلى تحديد إصدارات API لكل مصدر في القالب. عند تحديد إصدار ملف تعريف API وعدم تحدد إصدار API لنوع المورد، يستخدم Resource Manager إصدار API لنوع المورد المعرف في ملف التعريف.

تُعد خاصية ملف تعريف API مفيدة بشكل خاص عند نشر قالب إلى بيئات مختلفة، مثل Azure Stack وAzure العمومي. استخدم إصدار ملف تعريف API للتأكد من أن القالب يستخدم تلقائياً إصدارات معتمدة في كلتا البيئتين. للحصول على قائمة بإصدارات ملف تعريف API الحالية وإصدارات API للموارد المعرفة في ملف التعريف، راجع ملف تعريف 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>"
    }
  }
}
اسم العنصر المطلوب ‏‏الوصف
parameter-name ‏‏نعم‬ اسم المعلمة. يجب أن يكون معرّف JavaScript صالحًا.
النوع ‏‏نعم‬ نوع قيمة المعلمة. الأنواع والقيم المسموح بها هي string وsecurestring وint وbool وobject وsecureObject وarray. راجع أنواع البيانات في قوالب ARM.
defaultValue لا القيمة الظاهرية للمعلمة، إذا لم يتم توفير قيمة للمعلمة.
القيم المسموح بها لا صفيف من القيم المسموح بها للمعلمة للتأكد من توفير القيمة الصحيحة.
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()]".
parameter-name لا اسم المعلمة التي سيتم استخدامها داخل الوظيفة المخصصة.
قيمة المعلمة لا نوع قيمة المعلمة. الأنواع والقيم المسموح بها هي 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>"
    ]
  }
]
اسم العنصر المطلوب ‏‏الوصف
condition لا قيمة منطقية تشير إلى ما إذا كان المورد قد تم توفيره أثناء هذا النشر. عند 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>
    }
  }
}
اسم العنصر المطلوب ‏‏الوصف
output-name ‏‏نعم‬ اسم قيمة الإخراج. يجب أن يكون معرّف JavaScript صالحًا.
condition لا القيمة المنطقية التي تشير إلى ما إذا كان سيتم إرجاع قيمة الإخراج هذه أم لا. عند 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.

لا يتم دعم السلاسل متعددة الأسطر عند نشر القالب عبر مدخل 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 الدالة مجموعة فرعية محدودة من الخصائص. راجع النشر.
  • إذا تم استخدام مورد عمليات النشر في نشر اسم رمزي، فاستخدم apiVersion 2020-09-01 أو أحدث.
  • في تعريف المورد، لم تعد هناك حاجة إلى قيم الهروب المزدوج داخل تعبير. راجع أحرف الإلغاء.

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