كيفية إنشاء جهاز Linux ظاهري باستخدام قوالب Azure Resource Manager

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات مقياس مرنة

تعرف على كيفية إنشاء جهاز Linux الظاهري باستخدام قالب Azure Resource Manager وAzure CLI من Azure Cloud shell. لإنشاء جهاز Windows ظاهري، راجع إنشاء جهاز Windows ظاهري من قالب Resource Manager.

البديل هو نشر القالب من مدخل Microsoft Azure. حدد زر التوزيع إلى Azure لفتح القالب في المدخل.

زر لنشر قالب Resource Manager إلى Azure.

نظرة عامة على القوالب

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

Quickstart template

إشعار

ينشئ القالب المتوفر جهازا ظاهريا من الجيل 2 من Azure بشكل افتراضي.

إشعار

يتم تمكين مصادقة SSH فقط بشكل افتراضي عند استخدام قالب التشغيل السريع. عند المطالبة، قم بتوفير قيمة مفتاح SSH العام، مثل محتويات ~/.ssh/id_rsa.pub.

إذا لم يكن لديك زوج مفاتيح SSH، فبادر بإنشاء واستخدام زوج مفاتيح SSH لأجهزة Linux الظاهرية في Azure.

انقر فوق نسخ لإضافة قالب التشغيل السريع إلى الحافظة:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "projectName": {
      "type": "string",
      "metadata": {
        "description": "Specifies a name for generating resource names."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the location for all resources."
      }
    },
    "adminUsername": {
      "type": "string",
      "metadata": {
        "description": "Specifies a username for the Virtual Machine."
      }
    },
    "adminPublicKey": {
      "type": "string",
      "metadata": {
        "description": "Specifies the SSH rsa public key file as a string. Use \"ssh-keygen -t rsa -b 2048\" to generate your SSH key pairs."
      }
    },
    "vmSize": {
      "type": "string",
      "defaultValue": "Standard_D2s_v3",
      "metadata": {
        "description": "description"
      }
    }
  },
  "variables": {
    "vNetName": "[concat(parameters('projectName'), '-vnet')]",
    "vNetAddressPrefixes": "10.0.0.0/16",
    "vNetSubnetName": "default",
    "vNetSubnetAddressPrefix": "10.0.0.0/24",
    "vmName": "[concat(parameters('projectName'), '-vm')]",
    "publicIPAddressName": "[concat(parameters('projectName'), '-ip')]",
    "networkInterfaceName": "[concat(parameters('projectName'), '-nic')]",
    "networkSecurityGroupName": "[concat(parameters('projectName'), '-nsg')]",
    "networkSecurityGroupName2": "[concat(variables('vNetSubnetName'), '-nsg')]"
  },
  "resources": [
    {
      "type": "Microsoft.Network/networkSecurityGroups",
      "apiVersion": "2020-05-01",
      "name": "[variables('networkSecurityGroupName')]",
      "location": "[parameters('location')]",
      "properties": {
        "securityRules": [
          {
            "name": "ssh_rule",
            "properties": {
              "description": "Locks inbound down to ssh default port 22.",
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "destinationPortRange": "22",
              "sourceAddressPrefix": "*",
              "destinationAddressPrefix": "*",
              "access": "Allow",
              "priority": 123,
              "direction": "Inbound"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2020-05-01",
      "name": "[variables('publicIPAddressName')]",
      "location": "[parameters('location')]",
      "properties": {
        "publicIPAllocationMethod": "Dynamic"
      },
      "sku": {
        "name": "Basic"
      }
    },
    {
      "comments": "Simple Network Security Group for subnet [variables('vNetSubnetName')]",
      "type": "Microsoft.Network/networkSecurityGroups",
      "apiVersion": "2020-05-01",
      "name": "[variables('networkSecurityGroupName2')]",
      "location": "[parameters('location')]",
      "properties": {
        "securityRules": [
          {
            "name": "default-allow-22",
            "properties": {
              "priority": 1000,
              "access": "Allow",
              "direction": "Inbound",
              "destinationPortRange": "22",
              "protocol": "Tcp",
              "sourceAddressPrefix": "*",
              "sourcePortRange": "*",
              "destinationAddressPrefix": "*"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2020-05-01",
      "name": "[variables('vNetName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName2'))]"
      ],
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[variables('vNetAddressPrefixes')]"
          ]
        },
        "subnets": [
          {
            "name": "[variables('vNetSubnetName')]",
            "properties": {
              "addressPrefix": "[variables('vNetSubnetAddressPrefix')]",
              "networkSecurityGroup": {
                "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName2'))]"
              }
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2020-05-01",
      "name": "[variables('networkInterfaceName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]",
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
      ],
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]"
              },
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vNetName'), variables('vNetSubnetName'))]"
              }
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2021-11-01",
      "name": "[variables('vmName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "osProfile": {
          "computerName": "[variables('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "linuxConfiguration": {
            "disablePasswordAuthentication": true,
            "ssh": {
              "publicKeys": [
                {
                  "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]",
                  "keyData": "[parameters('adminPublicKey')]"
                }
              ]
            }
          }
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "Canonical",
            "offer": "0001-com-ubuntu-server-jammy",
            "sku": "22_04-lts-gen2",
            "version": "latest"
          },
          "osDisk": {
            "createOption": "fromImage"
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
            }
          ]
        }
      }
    }
  ]
}

يمكنك أيضًا تنزيل قالب أو إنشائه وتحديد المسار المحلي باستخدام المعلمة --template-file.

إنشاء قالب التشغيل السريع VM باستخدام Azure CLI

بعد الحصول على قالب التشغيل السريع أو إنشائه، أنشئ جهازا ظاهريا باستخدام Azure CLI.

يطلب الأمر التالي عدة أجزاء من الإدخال من المستخدم. يتضمن هذا ما يلي:

  • اسم مجموعة الموارد (resourceGroupName)
  • موقع مركز بيانات Azure الذي يستضيف الجهاز الظاهري (الموقع)
  • اسم للموارد المتعلقة بالجهاز الظاهري (projectName)
  • اسم المستخدم لمستخدم المسؤول (اسم المستخدم)
  • مفتاح SSH عام للوصول إلى المحطة الطرفية للجهاز الظاهري (مفتاح)

يتطلب إنشاء جهاز ظاهري Azure مجموعة موارد. تتضمن قوالب التشغيل السريع إنشاء مجموعة موارد كجزء من العملية.

لتشغيل البرنامج النصي CLI، انقر فوق Open Cloudshell. بمجرد أن يكون لديك حق الوصول إلى Azure Cloudshell، انقر فوق نسخ لنسخ الأمر، وانقر بزر الماوس الأيمن فوق shell، ثم حدد لصق.

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
echo "Enter the location (i.e. centralus):" &&
read location &&
echo "Enter the project name (used for generating resource names):" &&
read projectName &&
echo "Enter the administrator username:" &&
read username &&
echo "Enter the SSH public key:" &&
read key &&
az group create --name $resourceGroupName --location "$location" &&
az deployment group create --resource-group $resourceGroupName --template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-sshkey/azuredeploy.json --parameters projectName=$projectName adminUsername=$username adminPublicKey="$key" &&
az vm show --resource-group $resourceGroupName --name "$projectName-vm" --show-details --query publicIps --output tsv

يعرض السطر الأخير في الأمر عنوان IP العام للجهاز الظاهري الذي تم إنشاؤه حديثا. تحتاج إلى عنوان IP العام للاتصال بالجهاز الظاهري.

قم بالاتصال بالجهاز الظاهري

يمكنك بعد ذلك اتصال SSH إلى جهازك الظاهري كالمعتاد. قم بتوفير عنوان IP العام الخاص بك من الأمر السابق:

ssh <adminUsername>@<ipAddress>

قوالب أخرى

في هذا المثال، قمت بإنشاء جهاز ظاهري أساسي بنظام التشغيل Linux. لمزيد من قوالب Resource Manager التي تتضمن أطر عمل التطبيق أو إنشاء بيئات أكثر تعقيدا، استعرض قوالب Azure Quickstart.

لمعرفة المزيد حول إنشاء القوالب، اعرض بناء جملة JSON وخصائصها لأنواع الموارد التي قمت بتوزيعها:

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