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. In questo articolo viene illustrato come utilizzare dischi gestiti, utilizzando ad esempio una richiesta di pull dal modelli di avvio rapido di Azure, un repository basato sulla community per i modelli di gestione risorse 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

Nelle differenze seguenti, vengono rimossi diverse variabili correlate alle proprietà di account e il disco di archiviazione.In the following diff, several variables related to storage account and disk properties are removed. Tipo di account di archiviazione non è più necessario (Standard_LRS è il valore predefinito), ma è possibile specificare se 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. Analogamente, il nome di contenitore vhd e il nome del disco del sistema operativo non sono più necessarie poiché disco gestito automaticamente nomi di contenitori di archiviazione blob e i dischi 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')]",

Le differenze seguenti, per calcolare che API viene aggiornata alla versione 2016-04-30-preview, ovvero la versione richiesta meno recente per il supporto di dischi gestiti con 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 si desidera, è possibile utilizzare i 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 solo aggiornare la versione API di calcolo e non modificare nemmeno altri elementi, il modello deve 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"
   },

Nelle differenze seguenti, la risorsa di account di archiviazione viene rimosso dalla matrice di risorse completamente.In the following diff, the storage account resource is removed from the resources array completely. La risorsa non è più necessario come disco gestito vengono create 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]",

Nelle differenze seguenti, è possibile osservare che viene rimossa la dipende dalla clausola che fa riferimento dalla scala impostata per il ciclo che la creazione di 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. La proprietà di contenitori di disco rigido virtuale viene rimossa anche, insieme alla proprietà di nome disco del sistema operativo come queste proprietà vengono gestite automaticamente dietro le quinte 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 desidera che i dischi del 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. Spetta al cliente di collegare, partizionare e formattare i dischi prima di usarli.It is up to the customer to attach, partition, and format the disks before using them. Facoltativamente, è anche possibile specificare "managedDisk": { "storageAccountType": "Premium_LRS" } in ogni oggetto disco dati per specificare 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.