Procedura per creare una macchina virtuale Linux con i modelli di Azure Resource Manager

Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili

Informazioni su come creare una macchina virtuale Linux usando un modello di Azure Resource Manager e l'interfaccia della riga di comando di Azure da Azure Cloud Shell. Per creare una macchina virtuale Windows, vedere Creare una macchina virtuale Windows da un modello di Resource Manager.

Un'alternativa consiste nel distribuire il modello dal portale di Azure. Per aprire il modello nel portale, selezionare il pulsante Distribuisci in Azure .

Pulsante per distribuire il modello di Resource Manager in Azure.

Panoramica dei modelli

I modelli di Azure Resource Manager sono file JSON che definiscono l'infrastruttura e la configurazione della soluzione Azure. Usando il modello è possibile distribuire ripetutamente la soluzione nel corso del ciclo di vita garantendo al contempo che le risorse vengano distribuite in uno stato coerente. Per altre informazioni sul formato del modello e su come crearlo, vedere Avvio rapido: Creare e distribuire modelli di Azure Resource Manager usando il portale di Azure. Per visualizzare la sintassi JSON per i tipi di risorse, vedere Define resources in Azure Resource Manager templates (Definire le risorse nei modelli di Azure Resource Manager).

Modello di avvio rapido

Nota

Il modello fornito crea una macchina virtuale di prima generazione di Azure per impostazione predefinita.

Nota

Solo l'autenticazione SSH è abilitata per impostazione predefinita quando si usa il modello di avvio rapido. Quando richiesto, specificare il valore della chiave pubblica SSH, ad esempio il contenuto di ~/.ssh/id_rsa.pub.

Se non si ha una coppia di chiavi SSH, creare e usare una coppia di chiavi SSH per le macchine virtuali Linux in Azure.

Fare clic su Copia per aggiungere il modello di avvio rapido negli Appunti:

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

È anche possibile scaricare o creare un modello e specificare il percorso locale con il parametro --template-file.

Creare una macchina virtuale modello di avvio rapido con l'interfaccia della riga di comando di Azure

Dopo aver acquisito o creato un modello di avvio rapido, creare una macchina virtuale con essa usando l'interfaccia della riga di comando di Azure.

Il comando seguente richiede diversi input dall'utente. tra cui:

  • Nome del gruppo di risorse (resourceGroupName)
  • Posizione del data center di Azure che ospita la macchina virtuale (posizione)
  • Nome per le risorse correlate alla macchina virtuale (projectName)
  • Nome utente per l'utente amministratore (nome utente)
  • Una chiave SSH pubblica per l'accesso al terminale della macchina virtuale (chiave)

La creazione di una macchina virtuale di Azure richiede un gruppo di risorse. I modelli di avvio rapido includono la creazione di gruppi di risorse come parte del processo.

Per eseguire lo script dell'interfaccia della riga di comando, fare clic su Apri CloudShell. Dopo aver ottenuto l'accesso ad Azure CloudShell, fare clic su Copia per copiare il comando, fare clic con il pulsante destro del mouse sulla shell e quindi scegliere Incolla.

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

L'ultima riga nel comando mostra l'indirizzo IP pubblico della macchina virtuale appena creata. È necessario l'indirizzo IP pubblico per connettersi alla macchina virtuale.

Connettersi alla macchina virtuale

È quindi possibile usare la connessione SSH alla VM nel modo usuale. Specificare il proprio indirizzo IP pubblico dal comando precedente:

ssh <adminUsername>@<ipAddress>

Altri modelli

In questo esempio è stata creata una VM Linux di base. Per altri modelli di Resource Manager che includono framework applicazione o creare ambienti più complessi, vedere Modelli di avvio rapido di Azure.

Per altre informazioni sulla creazione di modelli, vedere la sintassi e le proprietà JSON dei tipi di risorse distribuiti:

Passaggi successivi

  • Per informazioni su come sviluppare modelli di Resource Manager, vedere Documentazione di Resource Manager in Azure.
  • Per visualizzare gli schemi delle macchine virtuali di Azure, vedere Informazioni di riferimento sui modelli di Azure.
  • Per altri esempi di modelli di macchina virtuale, vedere Modelli di avvio rapido di Azure.