تعرف على قوالب مجموعة مقياس الجهاز الظاهري

تعد قوالب Azure Resource Manager طريقة رائعة لتوزيع مجموعات من الموارد ذات الصلة. توضح سلسلة البرامج التعليمية هذه كيفية إنشاء قالب مجموعة تغيير سعة أساسي وكيفية تعديل هذا القالب ليناسب سيناريوهات مختلفة. كل الأمثلة تأتي من مستودع GitHub هذا.

الهدف من هذا القالب هو أن يكون بسيطاً. للحصول على أمثلة أكثر اكتمالاً لقوالب مجموعة تغيير السعة، راجع مستودع GitHub لقوالب تشغيل Azure السريع وابحث عن المجلدات التي تحتوي على السلسلة vmss.

إذا كنت معتاداً بالفعل على إنشاء قوالب، يمكنك التخطي إلى قسم "الخطوات التالية" لمعرفة كيفية تعديل هذا القالب.

تعريف $schema وcontentVersion

أولاً، حدد $schema وcontentVersion في القالب. يحدد العنصر $schema إصدار لغة القالب ويُستخدم في تمييز بناء الجملة على Visual Studio وميزات التحقق من الصحة المماثلة. لا يستخدم Azure العنصر contentVersion. بدلاً من ذلك، يساعدك على تتبع إصدار القالب.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  "contentVersion": "1.0.0.0",
}

تعريف المعلمات

بعد ذلك، حدد المعلمتين adminUsername وadminPassword. المعلمات هي قيم تحددها في وقت التوزيع. المعلمة adminUsername هي ببساطة نوع string، ولكن لأن adminPassword سر، أعطها النوع securestring. في وقت لاحق، يتم تمرير هذه المعلمات إلى تكوين مجموعة تغيير السعة.

  "parameters": {
    "adminUsername": {
      "type": "string"
    },
    "adminPassword": {
      "type": "securestring"
    }
  },

تعريف المتغيرات

تتيح لك قوالب Resource Manager أيضاً تحديد المتغيرات التي سيتم استخدامها لاحقاً في القالب. لا يستخدم المثال أي متغيرات، ولذا فإن كائن JSON فارغ.

  "variables": {},

تعريف الموارد

التالي هو قسم الموارد في القالب. يمكنك هنا تحديد ما تريد توزيعه بالفعل. على العكس من parameters وvariables (وهما عنصرا JSON)، resources هي قائمة JSON لعناصر JSON.

  "resources": [
    ...
  ]

تتطلب كل الموارد الخصائص type، وname، وapiVersion، وlocation. يحتوي المورد الأول لهذا المثال على النوع Microsoft.Network/virtualNetwork، والاسم myVnet، وapiVersion 2018-11-01. (للعثور على أحدث إصدار من واجهة برمجة التطبيقات لنوع مورد، راجع مرجع قالب Azure Resource Manager.)

{
  "type": "Microsoft.Network/virtualNetworks",
  "name": "myVnet",
  "apiVersion": "2018-11-01",
}

تحديد الموقع

لتحديد موقع الشبكة الظاهرية، استخدم دالة قالب Resource Manager. يجب أن تكون هذه الوظيفة داخل علامتي اقتباس وقوسين معقوفين هكذا: "[<template-function>]". في هذه الحالة، استخدم الدالة resourceGroup. لا تأخذ أي وسيطات وتقوم بإرجاع عنصر JSON مع بيانات تعريف عن مجموعة الموارد التي يتم توزيع هذا التوزيع عليها. يتم تعيين مجموعة الموارد بواسطة المستخدم في وقت التوزيع. ثم تتم فهرسة هذه القيمة إلى عنصر JSON هذا مع .location للحصول على الموقع من عنصر JSON.

  "location": "[resourceGroup().location]",

تحديد خصائص الشبكة الظاهرية

يحتوي كل مورد Resource Manager على قسم properties خاص به للتكوينات الخاصة بالمورد. في هذه الحالة، حدد أن الشبكة الظاهرية ينبغي أن تحتوي على شبكة فرعية واحدة باستخدام نطاق عنوان IP الخاص 10.0.0.0/16. يتم تضمين مجموعة تغيير سعة دائماً داخل شبكة فرعية واحدة. لا يمكن أن تشمل الشبكات الفرعية.

  {
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      },
      "subnets": [
        {
          "name": "mySubnet",
          "properties": {
            "addressPrefix": "10.0.0.0/16"
          }
        }
      ]
    }
  },

إضافة قائمة dependsOn

بالإضافة إلى خصائص type، name، apiVersion، وlocation، يمكن أن يحتوي كل مورد على قائمة dependsOn اختيارية من السلاسل. تحدد هذه القائمة الموارد الأخرى من هذا التوزيع التي يجب أن تنتهي قبل توزيع هذا المورد.

في هذه الحالة، هناك عنصر واحد فقط في القائمة، وهو الشبكة الظاهرية من المثال السابق. يمكنك تحديد هذه التبعية لأن مجموعة تغيير السعة تحتاج إلى وجود الشبكة قبل إنشاء أي أجهزة ظاهرية. وبهذه الطريقة، يمكن لمجموعة تغيير السعة أن تمنح هذه الأجهزة الظاهرية عناوين IP خاصة من نطاق عناوين IP المحدد مسبقاً في خصائص الشبكة. تنسيق كل سلسلة في قائمة dependsOn هو <type>/<name>. استخدم type وname نفسيهما المستخدمين سابقاً في تعريف مورد الشبكة الظاهرية.

  {
    "type": "Microsoft.Compute/virtualMachineScaleSets",
    "name": "myScaleSet",
    "apiVersion": "2019-03-01",
    "location": "[resourceGroup().location]",
    "dependsOn": [
      "Microsoft.Network/virtualNetworks/myVnet"
    ],
    ...
  }

تحديد خصائص مجموعة تغيير السعة

تحتوي مجموعات تغيير السعة على العديد من الخصائص لتخصيص الأجهزة الظاهرية في مجموعة تغيير السعة. للحصول على قائمة كاملة بهذه الخصائص، راجع مرجع القالب. بالنسبة لهذا البرنامج التعليمي، يتم تعيين عدد قليل فقط من الخصائص الشائعة الاستخدام.

توريد حجم الجهاز الظاهري وسعته

تحتاج مجموعة تغيير السعة إلى معرفة حجم الجهاز الظاهري المطلوب إنشاؤه ("اسم sku") وعدد هذه الأجهزة الظاهرية التي يجب إنشاؤها ("سعة sku"). لمعرفة أحجام الأجهزة الظاهرية المتوفرة، راجع وثائق أحجام الأجهزة الظاهرية.

  "sku": {
    "name": "Standard_A1",
    "capacity": 2
  },

اختر نوع التحديثات

تحتاج مجموعة تغيير السعة أيضاً إلى معرفة كيفية التعامل مع التحديثات على مجموعة تغيير السعة. حالياً، هناك ثلاثة خيارات، Manual، وRolling وAutomatic. لمزيد من المعلومات عن الاختلافات بين الاثنين، راجع الوثائق الخاصة بكيفية ترقية مجموعة تغيير سعة.

  "properties": {
    "upgradePolicy": {
      "mode": "Manual"
    },
  }

اختيار نظام تشغيل الجهاز الظاهري

تحتاج مجموعة تغيير السعة إلى معرفة نظام التشغيل الذي يجب وضعه على الأجهزة الظاهرية. هنا، قم بإنشاء الأجهزة الظاهرية مع نسخة Ubuntu 16.04-LTS مصححة بالكامل.

  "virtualMachineProfile": {
    "storageProfile": {
      "imageReference": {
        "publisher": "Canonical",
        "offer": "UbuntuServer",
        "sku": "16.04-LTS",
        "version": "latest"
      }
    },
  }

تحديد computerNamePrefix

تقوم مجموعة تغيير السعة بتوزيع أجهزة ظاهرية متعددة. بدلاً من تحديد اسم جهاز ظاهري، حدد computerNamePrefix. تقوم مجموعة تغيير السعة بإلحاق فهرس بالبادئة لكل جهاز ظاهري، بحيث تحتوي أسماء الأجهزة الظاهرية على النموذج <computerNamePrefix>_<auto-generated-index>.

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

 "osProfile": {
   "computerNamePrefix": "vm",
   "adminUsername": "[parameters('adminUsername')]",
   "adminPassword": "[parameters('adminPassword')]"
  },

تحديد تكوين شبكة الجهاز الظاهري

وأخيراً، حدد تكوين الشبكة للأجهزة الظاهرية في مجموعة تغيير السعة. في هذه الحالة، تحتاج فقط إلى تحديد معرف الشبكة الفرعية التي تم إنشاؤها مسبقاً. يخبر هذا مجموعة تغيير السعة بأن تضع واجهات الشبكة في هذه الشبكة الفرعية.

يمكنك الحصول على معرف الشبكة الظاهرية التي تحتوي على الشبكة الفرعية باستخدام دالة القالب resourceId. تأخذ هذه الدالة نوع المورد واسمه وترجع المعرف المؤهل بالكامل لذلك المورد. يحتوي هذا المعرف على النموذج: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/<resourceProviderNamespace>/<resourceType>/<resourceName>

ومع ذلك، فإن معرف الشبكة الظاهرية لا يكفي. قم بتوفير الشبكة الفرعية المحددة التي يجب أن تكون فيها الأجهزة الظاهرية لمجموعة تغيير السعة. للقيام بذلك، قم بسلسلة /subnets/mySubnet إلى معرف الشبكة الظاهرية. والنتيجة هي المعرف المؤهّل بالكامل للشبكة الفرعية. قم بهذه السلسلة باستخدام الدالة concat، التي تأخذ مجموعة من السلاسل وترجع تسلسلها.

  "networkProfile": {
    "networkInterfaceConfigurations": [
      {
        "name": "myNic",
        "properties": {
          "primary": "true",
          "ipConfigurations": [
            {
              "name": "myIpConfig",
              "properties": {
                "subnet": {
                  "id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
                }
              }
            }
          ]
        }
      }
    ]
  }

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

يمكنك توزيع القالب السابق باتباع وثائق Azure Resource Manager.

يمكنك بدء سلسلة البرامج التعليمية هذه من مقالة قالب مجموعة المقياس الأساسي.

يمكنك معرفة كيفية تعديل قالب مجموعة المقياس الأساسيلتوزيع مجموعة المقياس في شبكة ظاهرية موجودة.

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

يمكنك معرفة كيفية تعديل قالب مجموعة المقياس الأساسيلتوزيع مجموعة مقياس Linux بمقياس آلي يستند إلى الضيف.

لمزيدٍ من المعلومات عن مجموعات المقاييس، راجع صفحة نظرة عامة على مجموعة المقياس.