Utilizar discos nos Modelos de Resource Manager do Azure

Aplica-se a: ✔️ VMs do Linux VMs ✔️ do Windows Conjuntos ✔️ ✔️ de dimensionamento flexíveis Conjuntos de dimensionamento uniformes

Este documento explica as diferenças entre discos geridos e não geridos ao utilizar modelos de Resource Manager do Azure para aprovisionar máquinas virtuais. Os exemplos ajudam-no a atualizar modelos existentes que utilizam Discos não geridos para discos geridos. Para referência, estamos a utilizar o modelo vm-simple-windows como guia. Pode ver o modelo com discos geridos e uma versão anterior com discos não geridos se quiser compará-los diretamente.

Formatação de modelos de Discos Não Geridos

Para começar, vamos ver como os discos não geridos são implementados. Ao criar discos não geridos, precisa de uma conta de armazenamento para armazenar os ficheiros VHD. Pode criar uma nova conta de armazenamento ou utilizar uma que já exista. Este artigo mostra-lhe como criar uma nova conta de armazenamento. Crie um recurso de conta de armazenamento no bloco de recursos, conforme mostrado abaixo.

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

No objeto da máquina virtual, adicione uma dependência na conta de armazenamento para garantir que é criada antes da máquina virtual. storageProfile Na secção , especifique o URI completo da localização do VHD, que referencia a conta de armazenamento e é necessário para o disco do SO e quaisquer discos de dados.

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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 modelos de discos geridos

Com o Azure Managed Disks, o disco torna-se um recurso de nível superior e já não requer a criação de uma conta de armazenamento pelo utilizador. Os discos geridos foram expostos pela primeira vez na versão da 2016-04-30-preview API, estão disponíveis em todas as versões de API subsequentes e são agora o tipo de disco predefinido. As secções seguintes explicam as predefinições e detalham como personalizar ainda mais os discos.

Nota

Recomenda-se que utilize uma versão da API mais tarde do que 2016-04-30-preview as alterações interruptivas entre 2016-04-30-preview e 2017-03-30.

Predefinições de disco gerido

Para criar uma VM com discos geridos, já não precisa de criar o recurso da conta de armazenamento. Ao referenciar o exemplo de modelo abaixo, existem algumas diferenças entre os exemplos de disco não gerido anteriores a ter em atenção:

  • É apiVersion uma versão que suporta discos geridos.
  • osDisk e dataDisks já não se refere a um URI específico para o VHD.
  • Ao implementar sem especificar propriedades adicionais, o disco utilizará um tipo de armazenamento com base no tamanho da VM. Por exemplo, se estiver a utilizar um tamanho de VM que suporte armazenamento premium (tamanhos com "s" no respetivo nome, como Standard_D2s_v3), os discos premium serão configurados por predefinição. Pode alterar esta opção ao utilizar a definição de SKU do disco para especificar um tipo de armazenamento.
  • Se não for especificado nenhum nome para o disco, utiliza o formato de para o disco do <VMName>_OsDisk_1_<randomstring> SO e <VMName>_disk<#>_<randomstring> para cada disco de dados.
    • Se uma VM estiver a ser criada a partir de uma imagem personalizada, as predefinições para o tipo de conta de armazenamento e o nome do disco são obtidas a partir das propriedades do disco definidas no recurso de imagem personalizada. Estes podem ser substituídos ao especificar valores para estes no modelo.
  • Por predefinição, a encriptação de discos do Azure está desativada.
  • Por predefinição, a colocação em cache do disco é Leitura/Escrita para o disco do SO e Nenhuma para discos de dados.
  • No exemplo abaixo, ainda existe uma dependência de conta de armazenamento, embora isto seja apenas para armazenamento de diagnósticos e não é necessário para o armazenamento em disco.
{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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": {...}
    }
}

Utilizar um recurso de disco gerido de nível superior

Como alternativa à especificação da configuração do disco no objeto de máquina virtual, pode criar um recurso de disco de nível superior e anexá-lo como parte da criação da máquina virtual. Por exemplo, pode criar um recurso de disco da seguinte forma para utilizar como um disco de dados.

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

No objeto da VM, referencie o objeto de disco a anexar. Especificar o ID de recurso do disco gerido criado na managedDisk propriedade permite o anexo do disco à medida que a VM é criada. O apiVersion para o recurso da VM está definido como 2017-03-30. É adicionada uma dependência no recurso de disco para garantir que foi criada com êxito antes da criação da VM.

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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 geridos com VMs com discos geridos

Para criar conjuntos de disponibilidade geridos com VMs com discos geridos, adicione o sku objeto ao recurso do conjunto de disponibilidade e defina a name propriedade como Aligned. Esta propriedade garante que os discos de cada VM estão suficientemente isolados uns dos outros para evitar pontos únicos de falha. Tenha também em atenção que o apiVersion para o recurso do conjunto de disponibilidade está definido como 2018-10-01.

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

Discos SSD Standard

Seguem-se os parâmetros necessários no modelo de Resource Manager para criar Discos SSD Standard:

  • apiVersion for Microsoft.Compute must be set as (or later) (apiVersion for Microsoft.Compute must be set as (or later) (apiVersion for Microsoft.Compute must be set as 2018-04-01 (or later)
  • Especifique managedDisk.storageAccountType como StandardSSD_LRS

O exemplo seguinte mostra a secção properties.storageProfile.osDisk de uma VM que utiliza Discos SSD Standard:

"osDisk": {
    "osType": "Windows",
    "name": "myOsDisk",
    "caching": "ReadWrite",
    "createOption": "FromImage",
    "managedDisk": {
        "storageAccountType": "StandardSSD_LRS"
    }
}

Para obter um exemplo completo de modelo sobre como criar um disco SSD Standard com um modelo, veja Criar uma VM a partir de uma Imagem do Windows com Discos de Dados SSD Standard.

Cenários e personalizações adicionais

Para encontrar informações completas sobre as especificações da API REST, veja a documentação criar uma API REST de disco gerido. Encontrará cenários adicionais, bem como valores predefinidos e aceitáveis que podem ser submetidos à API através de implementações de modelos.

Passos seguintes