Jak utworzyć maszynę wirtualną z systemem Linux przy użyciu szablonów usługi Azure Resource Manager

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

Dowiedz się, jak utworzyć maszynę wirtualną z systemem Linux przy użyciu szablonu usługi Azure Resource Manager i interfejsu wiersza polecenia platformy Azure z poziomu usługi Azure Cloud Shell. Aby utworzyć maszynę wirtualną z systemem Windows, zobacz Tworzenie maszyny wirtualnej z systemem Windows na podstawie szablonu usługi Resource Manager.

Alternatywą jest wdrożenie szablonu z witryny Azure Portal. Aby otworzyć szablon w portalu, wybierz przycisk Wdróż na platformie Azure .

Button to deploy the Resource Manager template to Azure.

Omówienie szablonów

Szablony usługi Azure Resource Manager to pliki JSON definiujące infrastrukturę i konfigurację rozwiązania platformy Azure. Dzięki szablonowi można wielokrotnie wdrażać rozwiązanie w całym jego cyklu życia z gwarancją spójnego stanu zasobów po każdym wdrożeniu. Aby dowiedzieć się więcej o formacie szablonu i sposobie jego konstruowania, zobacz Szybki start: tworzenie i wdrażanie szablonów usługi Azure Resource Manager przy użyciu witryny Azure Portal. Aby wyświetlić składnię JSON dla typów zasobów, zobacz Define resources in Azure Resource Manager templates (Definiowanie zasobów w szablonach usługi Azure Resource Manager).

Szablon szybkiego startu

Uwaga

Podany szablon domyślnie tworzy maszynę wirtualną generacji 2 platformy Azure.

Uwaga

Tylko uwierzytelnianie SSH jest domyślnie włączone podczas korzystania z szablonu szybkiego startu. Po wyświetleniu monitu podaj wartość własnego klucza publicznego SSH, na przykład zawartość pliku ~/.ssh/id_rsa.pub.

Jeśli nie masz pary kluczy SSH, utwórz parę kluczy SSH i użyj pary kluczy SSH dla maszyn wirtualnych z systemem Linux na platformie Azure.

Kliknij pozycję Kopiuj , aby dodać szablon szybkiego startu do schowka:

{
  "$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'))]"
            }
          ]
        }
      }
    }
  ]
}

Możesz również pobrać lub utworzyć szablon i określić ścieżkę lokalną za pomocą parametru --template-file .

Tworzenie maszyny wirtualnej szablonu szybkiego startu przy użyciu interfejsu wiersza polecenia platformy Azure

Po uzyskaniu lub utworzeniu szablonu szybkiego startu utwórz maszynę wirtualną przy użyciu interfejsu wiersza polecenia platformy Azure.

Następujące polecenie żąda kilku fragmentów danych wejściowych od użytkownika. Są to:

  • Nazwa grupy zasobów (resourceGroupName)
  • Lokalizacja centrum danych platformy Azure, które hostuje maszynę wirtualną (lokalizację)
  • Nazwa zasobów związanych z maszyną wirtualną (projectName)
  • Nazwa użytkownika administratora (nazwa użytkownika)
  • Publiczny klucz SSH na potrzeby uzyskiwania dostępu do terminalu (klucza) maszyny wirtualnej

Tworzenie maszyny wirtualnej platformy Azure wymaga grupy zasobów. Szablony szybkiego startu obejmują tworzenie grupy zasobów w ramach procesu.

Aby uruchomić skrypt interfejsu wiersza polecenia, kliknij pozycję Otwórz program CloudShell. Po uzyskaniu dostępu do programu Azure CloudShell kliknij polecenie Kopiuj, aby skopiować polecenie, kliknij prawym przyciskiem myszy powłokę, a następnie wybierz polecenie Wklej.

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

Ostatni wiersz polecenia zawiera publiczny adres IP nowo utworzonej maszyny wirtualnej. Aby nawiązać połączenie z maszyną wirtualną, potrzebny jest publiczny adres IP.

Nawiązywanie połączenia z maszyną wirtualną

Następnie możesz połączyć się przy użyciu protokołu SSH z maszyną wirtualną w zwykły sposób. Podaj własny publiczny adres IP z poprzedniego polecenia:

ssh <adminUsername>@<ipAddress>

Inne szablony

W tym przykładzie utworzono podstawową maszynę wirtualną z systemem Linux. Aby uzyskać więcej szablonów usługi Resource Manager zawierających struktury aplikacji lub tworzyć bardziej złożone środowiska, przejrzyj szablony szybkiego startu platformy Azure.

Aby dowiedzieć się więcej na temat tworzenia szablonów, wyświetl składnię i właściwości JSON dla wdrożonych typów zasobów:

Następne kroki

  • Aby dowiedzieć się, jak opracowywać szablony usługi Resource Manager, zobacz dokumentację usługi Azure Resource Manager.
  • Aby wyświetlić schematy maszyn wirtualnych platformy Azure, zobacz Dokumentacja szablonów platformy Azure.
  • Aby wyświetlić więcej przykładów szablonów maszyn wirtualnych, zobacz Szablony szybkiego startu platformy Azure.