Convertire un modello di set di scalabilità in un modello di set di scalabilità per i dischi gestitiConvert a scale set template to a managed disk scale set template

I clienti con un modello di Resource Manager per la creazione di un set di scalabilità che non usa i dischi gestiti potrebbero volerlo modificare per usare i dischi gestiti.Customers with a Resource Manager template for creating a scale set not using managed disk may wish to modify it to use managed disk. Questo articolo illustra come usare i dischi gestiti, usando come esempio una richiesta pull dai modelli di avvio rapido di Azure, un repository gestito dalla community di modelli di Resource Manager di esempio.This article shows how to use managed disks, using as an example a pull request from the Azure Quickstart Templates, a community-driven repo for sample Resource Manager templates. La richiesta pull completa è disponibile all'indirizzo https://github.com/Azure/azure-quickstart-templates/pull/2998. Le parti pertinenti del diff sono sotto, con le spiegazioni:The full pull request can be seen here: https://github.com/Azure/azure-quickstart-templates/pull/2998, and the relevant parts of the diff are below, along with explanations:

Impostazione dei dischi del sistema operativo come gestitiMaking the OS disks managed

Nel Diff seguente sono state rimosse diverse variabili correlate all'account di archiviazione e alle proprietà del disco.In the following diff, several variables related to storage account and disk properties are removed. Il tipo di account di archiviazione non è più necessario, il tipo predefinito è Standard_LRS, ma è ugualmente possibile specificarlo, se lo si desidera.Storage account type is no longer necessary (Standard_LRS is the default), but you could specify it if desired. Con il disco gestito sono supportati solo Standard_LRS e Premium_LRS.Only Standard_LRS and Premium_LRS are supported with managed disk. Nel modello precedente, per generare i nomi degli account di archiviazione, vengono usati un nuovo suffisso dell'account di archiviazione, una matrice di stringhe univoca e il conteggio degli account di archiviazione.New storage account suffix, unique string array, and sa count were used in the old template to generate storage account names. Queste variabili non sono più necessarie nel nuovo modello perché il disco gestito crea automaticamente gli account di archiviazione per conto del cliente.These variables are no longer necessary in the new template because managed disk automatically creates storage accounts on the customer's behalf. Allo stesso modo, non sono più necessari il nome del contenitore del disco rigido virtuale e il nome del disco del sistema operativo perché il disco gestito denomina automaticamente i dischi e i contenitori BLOB di archiviazione sottostanti.Similarly, vhd container name and OS disk name are no longer necessary because managed disk automatically names the underlying storage blob containers and disks.

   "variables": {
-    "storageAccountType": "Standard_LRS",
     "namingInfix": "[toLower(substring(concat(parameters('vmssName'), uniqueString(resourceGroup().id)), 0, 9))]",
     "longNamingInfix": "[toLower(parameters('vmssName'))]",
-    "newStorageAccountSuffix": "[concat(variables('namingInfix'), 'sa')]",
-    "uniqueStringArray": [
-      "[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '0')))]",
-      "[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '1')))]",
-      "[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '2')))]",
-      "[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '3')))]",
-      "[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '4')))]"
-    ],
-    "saCount": "[length(variables('uniqueStringArray'))]",
-    "vhdContainerName": "[concat(variables('namingInfix'), 'vhd')]",
-    "osDiskName": "[concat(variables('namingInfix'), 'osdisk')]",
     "addressPrefix": "10.0.0.0/16",
     "subnetPrefix": "10.0.0.0/24",
     "virtualNetworkName": "[concat(variables('namingInfix'), 'vnet')]",

Nel Diff seguente la versione dell'API di calcolo è stata aggiornata alla versione 2016-04-30-preview, ovvero la versione necessaria meno recente per il supporto del disco gestito con i set di scalabilità.In the following diff, you compute API is updated to version 2016-04-30-preview, which is the earliest required version for managed disk support with scale sets. Se lo si desidera, è possibile usare dischi non gestiti nella nuova versione dell'API con la sintassi precedente.You could use unmanaged disks in the new API version with the old syntax if desired. Se si aggiorna solo la versione dell'API di calcolo e non si modifica nient'altro, il modello dovrebbe continuare a funzionare come prima.If you only update the compute API version and don't change anything else, the template should continue to work as before.

@@ -86,7 +74,7 @@
       "version": "latest"
     },
     "imageReference": "[variables('osType')]",
-    "computeApiVersion": "2016-03-30",
+    "computeApiVersion": "2016-04-30-preview",
     "networkApiVersion": "2016-03-30",
     "storageApiVersion": "2015-06-15"
   },

Nel Diff seguente la risorsa dell'account di archiviazione viene rimossa completamente dalla matrice delle risorse.In the following diff, the storage account resource is removed from the resources array completely. Le risorse non sono più necessarie poiché il disco gestito le crea automaticamente.The resource is no longer needed as managed disk creates them automatically.

@@ -113,19 +101,6 @@
       }
     },
-    {
-      "type": "Microsoft.Storage/storageAccounts",
-      "name": "[concat(variables('uniqueStringArray')[copyIndex()], variables('newStorageAccountSuffix'))]",
-      "location": "[resourceGroup().location]",
-      "apiVersion": "[variables('storageApiVersion')]",
-      "copy": {
-        "name": "storageLoop",
-        "count": "[variables('saCount')]"
-      },
-      "properties": {
-        "accountType": "[variables('storageAccountType')]"
-      }
-    },
     {
       "type": "Microsoft.Network/publicIPAddresses",
       "name": "[variables('publicIPAddressName')]",
       "location": "[resourceGroup().location]",

Nel Diff seguente è possibile osservare che viene rimossa la clausola depends on che crea un riferimento dal set di scalabilità al ciclo che crea gli account di archiviazione.In the following diff, we can see that we are removing the depends on clause referring from the scale set to the loop that was creating storage accounts. Nel modello precedente ciò assicura che gli account di archiviazione vengano creati prima che il set di scalabilità inizi la creazione, ma questa clausola non è più necessaria con i dischi gestiti.In the old template, this was ensuring that the storage accounts were created before the scale set began creation, but this clause is no longer necessary with managed disk. Vengono rimosse anche la proprietà dei contenitori dei dischi rigidi virtuali e la proprietà del nome del disco del sistema operativo perché queste proprietà vengono gestite automaticamente in background dal disco gestito.The vhd containers property is also removed, along with the OS disk name property as these properties are automatically handled under the hood by managed disk. È possibile aggiungere "managedDisk": { "storageAccountType": "Premium_LRS" } nella configurazione "osDisk" se si preferiscono dischi di sistema operativo Premium.You could add "managedDisk": { "storageAccountType": "Premium_LRS" } in the "osDisk" configuration if you wanted premium OS disks. Solo le VM con una "s" maiuscola o minuscola nell'unità SKU possono usare dischi Premium.Only VMs with an uppercase or lowercase 's' in the VM sku can use premium disks.

@@ -183,7 +158,6 @@
       "location": "[resourceGroup().location]",
       "apiVersion": "[variables('computeApiVersion')]",
       "dependsOn": [
-        "storageLoop",
         "[concat('Microsoft.Network/loadBalancers/', variables('loadBalancerName'))]",
         "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
       ],
@@ -200,16 +174,8 @@
         "virtualMachineProfile": {
           "storageProfile": {
             "osDisk": {
-              "vhdContainers": [
-                "[concat('https://', variables('uniqueStringArray')[0], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]",
-                "[concat('https://', variables('uniqueStringArray')[1], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]",
-                "[concat('https://', variables('uniqueStringArray')[2], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]",
-                "[concat('https://', variables('uniqueStringArray')[3], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]",
-                "[concat('https://', variables('uniqueStringArray')[4], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]"
-              ],
-              "name": "[variables('osDiskName')]",
             },
             "imageReference": "[variables('imageReference')]"
           },

Non esistono proprietà esplicite nella configurazione del set di scalabilità che indichino se usare dischi gestiti o non gestiti.There is no explicit property in the scale set configuration for whether to use managed or unmanaged disk. Il set di scalabilità determina quale usare in base alle proprietà presenti nel profilo di archiviazione.The scale set knows which to use based on the properties that are present in the storage profile. È quindi importante, quando si modifica il modello, assicurarsi che nel profilo di archiviazione del set di scalabilità siano presenti le proprietà corrette.Thus, it is important when modifying the template to ensure that the right properties are in the storage profile of the scale set.

Dischi datiData disks

Con le modifiche precedenti, il set di scalabilità usa dischi gestiti per il disco del sistema operativo. Non si è però parlato dei dischi dati.With the changes above, the scale set uses managed disks for the OS disk, but what about data disks? Per aggiungere dischi dati, aggiungere la proprietà "dataDisks" in "storageProfile" allo stesso livello di "osDisk".To add data disks, add the "dataDisks" property under "storageProfile" at the same level as "osDisk". Il valore della proprietà è un elenco JSON di oggetti, ognuno dei quali ha proprietà "lun" (che devono essere univoche per ogni disco dati in una VM), "createOption" ("empty" è attualmente la sola opzione supportata) e "diskSizeGB" (le dimensioni del disco in gigabyte, che devono essere maggiori di 0 e minori di 1024), come nell'esempio seguente:The value of the property is a JSON list of objects, each of which has properties "lun" (which must be unique per data disk on a VM), "createOption" ("empty" is currently the only supported option), and "diskSizeGB" (the size of the disk in gigabytes; must be greater than 0 and less than 1024) as in the following example:

"dataDisks": [
  {
    "lun": "1",
    "createOption": "empty",
    "diskSizeGB": "1023"
  }
]

Se si specificano n dischi in questa matrice, ogni VM nel set di scalabilità ottiene n dischi dati.If you specify n disks in this array, each VM in the scale set gets n data disks. Si noti tuttavia che questi dischi dati sono dispositivi RAW.Do note, however, that these data disks are raw devices. Non sono formattati.They are not formatted. È responsabilità del cliente collegare, creare le partizioni e formattare i dischi prima di usarli.It is up to the customer to attach, partition, and format the disks before using them. Facoltativamente è possibile anche specificare "managedDisk": { "storageAccountType": "Premium_LRS" } in ogni oggetto del disco dati per precisare che deve essere un disco dati Premium.Optionally, you could also specify "managedDisk": { "storageAccountType": "Premium_LRS" } in each data disk object to specify that it should be a premium data disk. Solo le VM con una "s" maiuscola o minuscola nell'unità SKU possono usare dischi Premium.Only VMs with an uppercase or lowercase 's' in the VM sku can use premium disks.

Per altre informazioni sull'uso dei dischi dati con i set di scalabilità, vedere questo articolo.To learn more about using data disks with scale sets, see this article.

Passaggi successiviNext steps

Ad esempio, per i modelli di Resource Manager con set di scalabilità, cercare "vmss" nel repository di GitHub dei modelli di avvio rapido di Azure.For example Resource Manager templates using scale sets, search for "vmss" in the Azure Quickstart Templates github repo.

Per informazioni generali, vedere la pagina di destinazione principale per i set di scalabilità.For general information, check out the main landing page for scale sets.