إضافة مرونة إلى قالب Azure Resource Manager باستخدام المعلمات والمخرجات

مكتمل

في الوحدة الأخيرة، قمت بإنشاء قالب Azure Resource Manager (ARM) وإضافة حساب تخزين Azure إليه. ربما لاحظت أن هناك مشكلة في القالب. اسم حساب التخزين يتضمن التعليمات البرمجية. يمكنك استخدام هذا القالب فقط لنشر حساب التخزين نفسه في كل مرة. لنشر حساب تخزين باسم مختلف، سيتعين عليك إنشاء قالب جديد، وهو ليس طريقة عملية لأتمتة عمليات النشر الخاصة بك. حساب التخزين SKU مشفر ضمنيًا، مما يعني أنك لا يمكن أن تنوِّع نوع حساب التخزين لبيئات مختلفة. تذكر أنه في السيناريو الخاص بنا، قد يكون لكل عملية نشر نوع مختلف من حساب التخزين. يمكنك جعل القالب قابلاً لإعادة الاستخدام أكثر عن طريق إضافة معلمة لحساب تخزين SKU.

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

معلمات قالب ARM

تتيح لك معلمات قالب ARM تخصيص النشر من خلال توفير قيم مصممة خصيصا لبيئة معينة. على سبيل المثال، يمكنك تمرير قيم مختلفة استنادًا إلى ما إذا كنت تقوم بالنشر إلى بيئة التطوير أو الاختبار أو الإنتاج أو غير ذلك. على سبيل المثال، يستخدم القالب السابق SKU gحساب تخزين Standard_LRS. يمكنك إعادة استخدام هذا القالب لعمليات النشر الأخرى التي تقوم بإنشاء حساب تخزين بجعل اسم حساب التخزين SKU معلمة. ثم، يمكنك تمرير اسم SKU الذي تريده لهذا النشر المعين عند نشر القالب. يمكنك القيام بهذه الخطوة إما في سطر الأوامر أو باستخدام ملف معلمة.

في 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-parameters>,
    "metadata": {
      "description": "<description-of-the-parameter>"
    }
  }
}

أنواع المعلمات المسموح بها هي:

  • سلسلة
  • secureString
  • الأعداد الصحيحة
  • boolean
  • كائن
  • secureObject
  • صفيف

توصيات لاستخدام المعلمات

استخدام معلمات للإعدادات التي تختلف وفقا للبيئة؛ على سبيل المثال، SKU أو الحجم أو السعة. استخدم المعلمات أيضًا لأسماء الموارد التي تريد تحديدها بنفسك لتعريف سهل أو للامتثال لاصطلاحات التسمية الداخلية. قم بتوفير وصف لكل معلمة، واستخدم القيم الافتراضية كلما أمكن ذلك.

لأسباب أمنية، لا تقم أبدا بترميز أو توفير قيم افتراضية لأسماء المستخدمين و/أو كلمات المرور في القوالب. دائمًا استخدام المعلمات لأسماء المستخدمين وكلمات المرور (أو الأسرار). استخدام secureString لكافة كلمات المرور والأسرار. إذا قمت بتمرير البيانات الحساسة في كائن JSON، فاستخدم نوع secureObject . لا يمكن قراءة أو تجميع معلمات القالب مع أنواع SecureString أو secureObject بعد نشر المصدر.

استخدام المعلمات في قالب ARM

في قسم المعلمات من قالب ARM، حدد المعلمات التي يمكنك إدخالها عند نشر الموارد. يمكنك تحديد 256 معلمة في قالب.

فيما يلي مثال لملف قالب مع معلمة لحساب التخزين SKU المحدد في قسم القالب parameters . يمكنك توفير معلمة افتراضية ليتم استخدامها إذا لم يتم تحديد قيمة عند التنفيذ.

"parameters": {
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
      "Standard_LRS",
      "Standard_GRS",
      "Standard_ZRS",
      "Premium_LRS"
    ],
    "metadata": {
      "description": "Storage Account type"
    }
  }
}

ثم استخدم المعلمة في تعريف المصدر. يتشكل بناء الجملة من [parameters('name of the parameter')]. ستستخدم الدالة parameters . ستتعرف على المزيد حول الوظائف في الوحدة النمطية التالية.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2023-05-01",
    "name": "learntemplatestorage123",
    "location": "[resourceGroup().location]",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true
    }
  }
]

عند نشر القالب، يمكنك توفير قيمة للمعلمة . لاحظ السطر الأخير في الأمر التالي:

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

مخرجات قالب ARM

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

"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 (اختياري) قيمة منطقية تشير إلى ما إذا كانت قيمة الإخراج هذه قد تم إرجاعها أم لا. عند حدوث ذلك، يتم تضمين القيمة في إخراج النشر. إذا كانت القيمة خاطئة، يتم تخطي قيمة الإخراج لهذا التوزيع. عند عدم التحديد، تكون القيمة الافتراضية صحيحة.
النوع نوع قِيمة الإخراج.
قيمة (اختياري) تعبير لغة قالب يتم تقييمه ويُعاد كقيمة إخراج.
نسخ (اختياري) يستخدم النسخ لإرجاع أكثر من قيمة واحدة لإخراج.

استخدام المخرجات في قالب ARM

فيما يلي مثال لإخراج نقاط نهاية حساب التخزين:

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

لاحظ جزء reference للتعبير. تحصل هذه الوظيفة على حالة وقت التشغيل لحساب التخزين.

نشر قالب ARM مرة أخرى

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