Como criar uma máquina virtual Linux com modelos do Azure Resource Manager

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

Saiba como criar uma máquina virtual (VM) Linux usando um modelo do Azure Resource Manager e a CLI do Azure a partir do shell da Nuvem do Azure. Para criar uma máquina virtual do Windows, consulte Criar uma máquina virtual do Windows a partir de um modelo do Gerenciador de Recursos.

Uma alternativa é implantar o modelo a partir do portal do Azure. Para abrir o modelo no portal, selecione o botão Implantar no Azure .

Button to deploy the Resource Manager template to Azure.

Descrição geral dos modelos

Os modelos do Azure Resource Manager são ficheiros JSON que definem a infraestrutura e a configuração da sua solução do Azure. Ao utilizar um modelo, pode implementar repetidamente a solução durante o ciclo de vida da mesma e ter a confiança de que os recursos são implementados num estado consistente. Para saber mais sobre o formato do modelo e como constrói-lo, consulte Guia de início rápido: criar e implantar modelos do Azure Resource Manager usando o portal do Azure. Para ver a sintaxe JSON para tipos de recursos, consulte Define resources in Azure Resource Manager templates (Definir recursos nos modelos do Azure Resource Manager).

Modelo de início rápido

Nota

O modelo fornecido cria uma VM da Geração 2 do Azure por padrão.

Nota

Somente a autenticação SSH é habilitada por padrão ao usar o modelo de início rápido. Quando solicitado, forneça o valor de sua própria chave pública SSH, como o conteúdo de ~/.ssh/id_rsa.pub.

Se você não tiver um par de chaves SSH, crie e use um par de chaves SSH para VMs Linux no Azure.

Clique em Copiar para adicionar o modelo de início rápido à área de transferência:

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

Você também pode baixar ou criar um modelo e especificar o caminho local com o --template-file parâmetro.

Criar uma VM de modelo de início rápido com a CLI do Azure

Depois de adquirir ou criar um modelo de início rápido, crie uma VM com ele usando a CLI do Azure.

O comando a seguir solicita várias partes de entrada do usuário. Estes são, entre outros:

  • Nome do Grupo de Recursos (resourceGroupName)
  • Local do datacenter do Azure que hospeda a VM (local)
  • Um nome para recursos relacionados à VM (projectName)
  • Nome de usuário para o usuário administrador (nome de usuário)
  • Uma chave SSH pública para acessar o terminal da VM (chave)

Criar uma máquina virtual do Azure requer um grupo de recursos. Os modelos de início rápido incluem a criação de grupos de recursos como parte do processo.

Para executar o script CLI, clique em Abrir Cloudshell. Depois de ter acesso ao Azure Cloudshell, clique em Copiar para copiar o comando, clique com o botão direito do mouse no shell e selecione Colar.

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

A última linha no comando mostra o endereço IP público da VM recém-criada. Você precisa do endereço IP público para se conectar à máquina virtual.

Connect to virtual machine (Ligar à máquina virtual)

Em seguida, você pode SSH para sua VM normalmente. Forneça seu próprio endereço IP público a partir do comando anterior:

ssh <adminUsername>@<ipAddress>

Outros modelos

Neste exemplo, você criou uma VM Linux básica. Para obter mais modelos do Resource Manager que incluem estruturas de aplicativos ou criam ambientes mais complexos, navegue pelos Modelos de Início Rápido do Azure.

Para saber mais sobre como criar modelos, exiba a sintaxe JSON e as propriedades dos tipos de recursos implantados:

Próximos passos

  • Para saber como desenvolver modelos do Resource Manager, consulte a documentação do Azure Resource Manager.
  • Para ver os esquemas de máquina virtual do Azure, consulte Referência de modelo do Azure.
  • Para ver mais exemplos de modelos de máquina virtual, consulte Modelos de início rápido do Azure.