Usar modelos de discos gerenciados de VM

Este artigo descreve as diferenças entre discos gerenciados e não gerenciados ao usar modelos de Resource Manager do Azure para provisionar máquinas virtuais no Azure Stack Hub. Os exemplos ajudam você a converter modelos existentes que usam discos não gerenciados em discos gerenciados.

Formatação de modelo de discos não gerenciados

Para começar, veremos como os discos não gerenciados são implantados. Ao criar discos não gerenciados, é necessária uma conta de armazenamento para armazenar os arquivos de VHD. É possível criar uma nova conta de armazenamento ou utilizar uma conta já existente. Crie um novo recurso de conta de armazenamento no bloco de recursos do modelo, da seguinte maneira:

{
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2017-10-01",
    "name": "[variables('storageAccountName')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "Standard_LRS"
    },
    "kind": "Storage"
}

Dentro do objeto de máquina virtual, adicione uma dependência na conta de armazenamento para garantir que é criada antes da máquina virtual. Na seção storageProfile, especifique o URI completo do local do VHD que faz referência à conta de armazenamento e necessário para o disco do SO e qualquer disco de dados. O exemplo a seguir cria um disco do sistema operacional de uma imagem e um disco de dados vazio com um tamanho de 1023 GB:

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "name": "osdisk",
                "vhd": {
                    "uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob, 'vhds/osdisk.vhd')]"
                },
                "caching": "ReadWrite",
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "name": "datadisk1",
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "vhd": {
                        "uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob, 'vhds/datadisk1.vhd')]"
                    },
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Formatação de modelo de discos gerenciados

Com os discos gerenciados do Azure, o disco se torna um recurso de nível superior e não exige mais que uma conta de armazenamento seja criada pelo usuário. Os discos gerenciados foram introduzidos pela primeira vez na versão da 2017-03-30 API. As seções a seguir percorrem as configurações padrão e explicam como personalizar ainda mais seus discos.

Configurações de disco gerenciados padrão

Para criar uma VM com discos gerenciados, não é mais preciso criar o recurso de conta de armazenamento. No exemplo de modelo abaixo, há algumas diferenças em relação aos exemplos de disco não gerenciado anteriores:

  • O apiVersion é uma versão para um tipo de recurso "virtualMachines" que dá suporte a discos gerenciados.
  • osDisk e dataDisks não se referem mais a um URI específico do VHD.
  • Ao implantar sem especificar propriedades adicionais, o disco usa um tipo de armazenamento com base no tamanho da VM. Por exemplo, se você estiver usando um tamanho de VM que dê suporte ao armazenamento premium (tamanhos com "s" em seu nome, como Standard_DS2_v2), os discos Premium serão configurados por padrão. Altere isso usando a configuração de SKU do disco para especificar um tipo de armazenamento.
  • Se nenhum nome para o disco for especificado, ele usará o formato de <VMName>_OsDisk_1_<randomstring> para o disco do SO e <VMName>_disk<#>_<randomstring> para cada disco de dados.
    • Se uma VM estiver sendo criada a partir de uma imagem personalizada, as configurações padrão para o tipo de conta de armazenamento e o nome do disco serão recuperadas das propriedades de disco definidas no recurso de imagem personalizada. Elas podem ser substituídas especificando valores para elas no modelo.
  • Por padrão, o cache de disco é leitura/gravação para o disco do sistema operacional e Nenhum para discos de dados.
  • No exemplo a seguir, ainda há uma dependência de conta de armazenamento, embora isso seja apenas para armazenamento de diagnóstico e não é necessário para o armazenamento em disco:
{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Usar um recurso de disco gerenciado de nível superior

Como alternativa para especificar a configuração do disco no objeto da máquina virtual, você pode criar um recurso de disco de nível superior e anexá-lo como parte da criação da máquina virtual. Use como 2017-03-30 a versão da API do disks recurso. Por exemplo, é possível criar um recurso de disco da seguinte forma para utiiza como um disco de dados. Neste exemplo, vmName é usado como parte do nome do disco:

{
    "type": "Microsoft.Compute/disks",
    "apiVersion": "2017-03-30",
    "name": "[concat(variables('vmName'),'-datadisk1')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "Standard_LRS"
    },
    "properties": {
        "creationData": {
            "createOption": "Empty"
        },
        "diskSizeGB": 1023
    }
}

Dentro do objeto da VM é possível fazer referência a este objeto de disco para ser anexado. Especificar o ID do recurso do disco gerenciado criado na propriedade managedDisk permite a conexão do disco à medida que a VM é criada. O apiVersion para o recurso da VM está definido como 2017-12-01. Uma dependência do recurso de disco é adicionada para garantir que ele seja criado com êxito antes da criação da VM:

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]",
        "[resourceId('Microsoft.Compute/disks/', concat(variables('vmName'),'-datadisk1'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "lun": 0,
                    "name": "[concat(variables('vmName'),'-datadisk1')]",
                    "createOption": "attach",
                    "managedDisk": {
                        "id": "[resourceId('Microsoft.Compute/disks/', concat(variables('vmName'),'-datadisk1'))]"
                    }
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Criar conjuntos de disponibilidade gerenciados com VMs utilizando discos gerenciados

Para criar conjuntos de disponibilidade gerenciados com VMs utilizando discos gerenciados, adicione o objeto sku ao recurso do conjunto de disponibilidade e defina a propriedade name para Aligned. Essa propriedade garante que os discos para cada VM estejam suficientemente isolados uns dos outros para evitar pontos únicos de falha. Observe também que o apiVersion para o recurso do conjunto de disponibilidade está definido como 2017-12-01:

{
    "type": "Microsoft.Compute/availabilitySets",
    "apiVersion": "2017-12-01",
    "location": "[resourceGroup().location]",
    "name": "[variables('avSetName')]",
    "properties": {
        "PlatformUpdateDomainCount": 1,
        "PlatformFaultDomainCount": 2
    },
    "sku": {
        "name": "Aligned"
    }
}

Próximas etapas