Cara membuat komputer virtual Linux dengan templat Azure Resource Manager

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

Mempelajari cara membuat komputer virtual Linux (VM) dengan menggunakan templat Azure Resource Manager dan Azure CLI dari shell Azure Cloud. Untuk membuat komputer virtual Windows, lihat Membuat komputer virtual Windows dari templat Resource Manager.

Alternatifnya adalah menyebarkan templat dari portal Microsoft Azure. Untuk membuka templat di portal, pilih tombol Sebarkan ke Azure.

Button to deploy the Resource Manager template to Azure.

Ikhtisar templat

Templat Azure Resource Manager adalah file JSON yang menentukan infrastruktur dan konfigurasi solusi Azure Anda. Dengan menggunakan templat, Anda dapat berulang kali menyebarkan solusi Anda sepanjang siklus hidupnya dan yakin bahwa sumber daya Anda disebarkan dalam status konsisten. Untuk mempelajari selengkapnya tentang format templat dan cara Anda membuatnya, lihat Mulai Cepat: Membuat dan menggunakan templat Azure Resource Manager dengan menggunakan portal Microsoft Azure. Untuk menampilkan sintaks JSON untuk jenis sumber daya, lihat Menentukan sumber daya dalam templat Azure Resource Manager.

Templat mulai cepat

Catatan

Templat yang disediakan membuat VM Azure Generation 2 secara default.

Catatan

Hanya autentikasi SSH yang diaktifkan secara default saat menggunakan templat mulai cepat. Ketika diminta, berikan nilai kunci publik SSH Anda sendiri, seperti isi ~/.ssh/id_rsa.pub.

Jika Anda tidak memiliki pasangan kunci SSH, buat dan gunakan pasangan kunci SSH untuk VM Linux di Azure.

Klik Salin untuk menambahkan templat mulai cepat ke clipboard Anda:

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

Anda juga dapat mengunduh atau membuat templat dan menentukan jalur lokal dengan parameter --template-file.

Membuat VM templat mulai cepat dengan Azure CLI

Setelah memperoleh atau membuat templat mulai cepat, buat VM dengan templat tersebut menggunakan Azure CLI.

Perintah berikut meminta beberapa bagian input dari pengguna. Ini termasuk:

  • Nama Grup Sumber Daya (resourceGroupName)
  • Lokasi pusat data Azure yang menghosting VM (lokasi)
  • Nama untuk sumber daya yang terkait dengan VM (projectName)
  • Nama pengguna untuk pengguna administrator (nama pengguna)
  • Kunci SSH publik untuk mengakses terminal VM (kunci)

Membuat komputer virtual Azure memerlukan grup sumber daya. Templat mulai cepat menyertakan pembuatan grup sumber daya sebagai bagian dari proses.

Untuk menjalankan skrip CLI, klik Buka Cloudshell. Setelah Anda memiliki akses ke Azure Cloudshell, klik Salin untuk menyalin perintah, klik kanan shell, lalu pilih Tempel.

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

Baris terakhir dalam perintah menunjukkan alamat IP publik VM yang baru dibuat. Anda memerlukan alamat IP publik untuk terhubung ke komputer virtual.

Hubungkan ke komputer virtual

Kemudian Anda dapat SSH ke VM Anda seperti biasa. Berikan alamat IP publik Anda sendiri dari perintah sebelumnya:

ssh <adminUsername>@<ipAddress>

Templat lainnya

Dalam contoh ini, Anda membuat VM Linux dasar. Untuk templat Resource Manager lainnya yang menyertakan kerangka kerja aplikasi atau membuat lingkungan yang lebih kompleks, telusuri Templat Mulai Cepat Azure.

Untuk mempelajari pembuatan templat lebih lanjut, lihat sintaks dan properti JSON untuk jenis sumber daya yang Anda sebarkan:

Langkah berikutnya