Informazioni sui modelli di set di scalabilità di macchine virtualiLearn about virtual machine scale set templates

I modelli di Azure Resource Manager sono un ottimo modo di distribuire gruppi di risorse correlate.Azure Resource Manager templates are a great way to deploy groups of related resources. Questa serie di esercitazioni illustra come creare un modello di set di scalabilità a validità minima e come modificarlo per adattarsi a vari scenari.This tutorial series shows how to create a minimum viable scale set template and how to modify this template to suit various scenarios. Tutti gli esempi provengono da questo archivio GitHub.All examples come from this GitHub repository.

Questo modello è progettato per essere semplice.This template is intended to be simple. Per esempi più completi di modelli di set di scalabilità, vedere Azure Quickstart Templates GitHub repository (Archivio GitHub Modelli di avvio rapido di Azure) e cercare le cartelle contenenti la stringa vmss.For more complete examples of scale set templates, see the Azure Quickstart Templates GitHub repository and search for folders that contain the string vmss.

Se si ha già familiarità con i modelli, è possibile passare direttamente alla sezione "Passaggi successivi" per informazioni su come modificare questo modello.If you are already familiar with creating templates, you can skip to the "Next steps" section to see how to modify this template.

Rivedere il modelloReview the template

Usare GitHub per rivedere il modello di set di scalabilità a validità minima che è possibile usare, ovvero azuredeploy.json.Use GitHub to review our minimum viable scale set template, azuredeploy.json.

In questa esercitazione verranno esaminati in dettaglio i diff (git diff master minimum-viable-scale-set) per creare il modello di set di scalabilità più semplice che è possibile usare.In this tutorial, we examine the diff (git diff master minimum-viable-scale-set) to create the minimum viable scale set template piece by piece.

Definire $schema e contentVersionDefine $schema and contentVersion

Si definiscono prima gli elementi $schema e contentVersion del modello.First, we define $schema and contentVersion in the template. L'elemento $schema definisce la versione del linguaggio del modello e viene usato per l'evidenziazione della sintassi di Visual Studio e per funzionalità di convalida simili.The $schema element defines the version of the template language and is used for Visual Studio syntax highlighting and similar validation features. L'elemento contentVersion non viene usato da Azure.The contentVersion element is not used by Azure. Però consente di tenere traccia della versione del modello.Instead, it helps you keep track of the template version.

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  "contentVersion": "1.0.0.0",

Definire i parametriDefine parameters

Successivamente, si definiscono due parametri, adminUsername e adminPassword.Next, we define two parameters, adminUsername and adminPassword. I parametri sono valori specificati al momento della distribuzione.Parameters are values you specify at the time of deployment. Il parametro adminUsername è semplicemente un tipo string, ma dato che adminPassword è un segreto, gli viene assegnato il tipo securestring.The adminUsername parameter is simply a string type, but because adminPassword is a secret, we give it type securestring. Successivamente questi parametri vengono passati nella configurazione del set di scalabilità.Later, these parameters are passed into the scale set configuration.

  "parameters": {
    "adminUsername": {
      "type": "string"
    },
    "adminPassword": {
      "type": "securestring"
    }
  },

Definire le variabiliDefine variables

I modelli di Resource Manager consentono anche di definire variabili da usare successivamente nel modello.Resource Manager templates also let you define variables to be used later in the template. In questo esempio non vengono usate variabili, quindi l'oggetto JSON è vuoto.Our example doesn't use any variables, so we've left the JSON object empty.

  "variables": {},

Definire le risorseDefine resources

La sezione successiva del modello riguarda le risorse.Next is the resources section of the template. In questa sezione si definiscono gli elementi da distribuire.Here, you define what you actually want to deploy. A differenza di parameters e variables (che sono oggetti JSON), resources è un elenco JSON di oggetti JSON.Unlike parameters and variables (which are JSON objects), resources is a JSON list of JSON objects.

   "resources": [

Tutte le risorse richiedono le proprietà type, name, apiVersion e location.All resources require type, name, apiVersion, and location properties. La prima risorsa di questo esempio è di tipo Microsft.Network/virtualNetwork, nome myVnet e apiVersion 2016-03-30.This example's first resource has type Microsft.Network/virtualNetwork, name myVnet, and apiVersion 2016-03-30. Per determinare la versione più recente dell'API di un tipo di risorsa, vedere Azure REST API documentation (Documentazione dell'API REST di Azure).(To find the latest API version for a resource type, see the Azure REST API documentation.)

     {
       "type": "Microsoft.Network/virtualNetworks",
       "name": "myVnet",
       "apiVersion": "2016-12-01",

Specificare il percorsoSpecify location

Per specificare il percorso della rete virtuale, viene usata una funzione di modello di Resource Manager.To specify the location for the virtual network, we use a Resource Manager template function. Questa funzione deve essere racchiusa tra virgolette e parentesi quadre, nel modo seguente: "[<template-function>]".This function must be enclosed in quotes and square brackets like this: "[<template-function>]". In questo caso, si usa la funzione resourceGroup.In this case, we use the resourceGroup function. La funzione non accetta argomenti e restituisce un oggetto JSON con metadati sul gruppo di risorse a cui viene eseguita la distribuzione.It takes in no arguments and returns a JSON object with metadata about the resource group this deployment is being deployed to. Il gruppo di risorse viene impostato dall'utente al momento della distribuzione.The resource group is set by the user at the time of deployment. L'oggetto JSON viene quindi indicizzato con .location per ottenere il percorso dall'oggetto JSON.We then index into this JSON object with .location to get the location from the JSON object.

       "location": "[resourceGroup().location]",

Specificare le proprietà di rete virtualeSpecify virtual network properties

Ogni risorsa di Resource Manager dispone di una propria sezione properties per le configurazioni a essa specifiche.Each Resource Manager resource has its own properties section for configurations specific to the resource. In questo caso, si specifica che la rete virtuale deve avere una subnet che usa l'intervallo 10.0.0.0/16 di indirizzi IP privati.In this case, we specify that the virtual network should have one subnet using the private IP address range 10.0.0.0/16. Un set di scalabilità è sempre contenuto in una subnet.A scale set is always contained within one subnet. Non può estendersi a più subnet.It cannot span subnets.

       "properties": {
         "addressSpace": {
           "addressPrefixes": [
             "10.0.0.0/16"
           ]
         },
         "subnets": [
           {
             "name": "mySubnet",
             "properties": {
               "addressPrefix": "10.0.0.0/16"
             }
           }
         ]
       }
     },

Aggiungere un elenco dependsOnAdd dependsOn list

In aggiunta alle proprietà type, name, apiVersion e location necessarie, ogni risorsa può avere un elenco dependsOn di stringhe facoltativo.In addition to the required type, name, apiVersion, and location properties, each resource can have an optional dependsOn list of strings. Questo elenco specifica le altre risorse di questa distribuzione che devono essere completate prima di distribuire la risorsa.This list specifies which other resources from this deployment must finish before deploying this resource.

In questo caso c'è solo un elemento nell'elenco, ovvero la rete virtuale dell'esempio precedente.In this case, there is only one element in the list, the virtual network from the previous example. Si specifica la dipendenza poiché il set di scalabilità deve disporre di una rete esistente prima di creare macchine virtuali.We specify this dependency because the scale set needs the network to exist before creating any VMs. In questo modo, il set di scalabilità può indicare gli indirizzi IP privati delle macchine virtuali dall'intervallo degli indirizzi IP specificato precedentemente nelle proprietà della rete.This way, the scale set can give these VMs private IP addresses from the IP address range previously specified in the network properties. Il formato di ogni stringa nell'elenco dependsOn è <type>/<name>.The format of each string in the dependsOn list is <type>/<name>. Usare gli stessi type e name inclusi precedentemente nella definizione delle risorse della rete virtuale.Use the same type and name used previously in the virtual network resource definition.

     {
       "type": "Microsoft.Compute/virtualMachineScaleSets",
       "name": "myScaleSet",
       "apiVersion": "2016-04-30-preview",
       "location": "[resourceGroup().location]",
       "dependsOn": [
         "Microsoft.Network/virtualNetworks/myVnet"
       ],

Specificare le proprietà del set di scalabilitàSpecify scale set properties

I set di scalabilità hanno molte proprietà per personalizzare le macchine virtuali nel set di scalabilità.Scale sets have many properties for customizing the VMs in the scale set. Per un elenco completo di queste proprietà, vedere Scale set REST API documentation (Documentazione dell'API REST del set di scalabilità).For a full list of these properties, see the scale set REST API documentation. Per questa esercitazione, verranno impostate solo alcune proprietà usate di frequente.For this tutorial, we will set only a few commonly used properties.

Specificare capacità e dimensioni della macchina virtualeSupply VM size and capacity

Il set di scalabilità deve conoscere le dimensioni della macchina virtuale da creare ("nome SKU") e quante macchine virtuali di questo tipo deve creare ("capacità SKU").The scale set needs to know what size of VM to create ("sku name") and how many such VMs to create ("sku capacity"). Per visualizzare le dimensioni disponibili di macchine virtuali, vedere VM Sizes documentation (Documentazione delle dimensioni di macchine virtuali).To see which VM sizes are available, see the VM Sizes documentation.

       "sku": {
         "name": "Standard_A1",
         "capacity": 2
       },

Scegliere un tipo di aggiornamentiChoose type of updates

Il set di scalabilità deve inoltre sapere come gestire gli aggiornamenti:The scale set also needs to know how to handle updates on the scale set. Attualmente sono disponibili due opzioni, Manual e Automatic.Currently, there are two options, Manual and Automatic. Per ulteriori informazioni sulle differenze tra le due opzioni, vedere la documentazione su come aggiornare un set di scalabilità.For more information on the differences between the two, see the documentation on how to upgrade a scale set.

       "properties": {
         "upgradePolicy": {
           "mode": "Manual"
         },

Scegliere il sistema operativo delle macchine virtualiChoose VM operating system

Il set di scalabilità deve conoscere quale sistema operativo installare nelle macchine virtuali.The scale set needs to know what operating system to put on the VMs. In questo esempio le macchine virtuali vengono create con un'immagine di Ubuntu 16.04-LTS con patch complete.Here, we create the VMs with a fully patched Ubuntu 16.04-LTS image.

         "virtualMachineProfile": {
           "storageProfile": {
             "imageReference": {
               "publisher": "Canonical",
               "offer": "UbuntuServer",
               "sku": "16.04-LTS",
               "version": "latest"
             }
           },

Specificare computerNamePrefixSpecify computerNamePrefix

Il set di scalabilità distribuisce più macchine virtuali.The scale set deploys multiple VMs. Anziché specificare il nome di ogni macchina virtuale, si specifica computerNamePrefix.Instead of specifying each VM name, we specify computerNamePrefix. Il set di scalabilità aggiunge un indice al prefisso di ogni macchina virtuale. Pertanto, i nomi delle macchine virtuali hanno il formato <computerNamePrefix>_<auto-generated-index>.The scale set appends an index to the prefix for each VM, so VM names have the form <computerNamePrefix>_<auto-generated-index>.

In questo frammento di codice vengono anche usati i parametri precedenti per configurare il nome utente e la password dell'amministratore di tutte le macchine virtuali nel set di scalabilità.In the following snippet, we use the parameters from before to set the administrator username and password for all VMs in the scale set. Questa operazione viene eseguita con la funzione di modello parameters.We do this with the parameters template function. Questa funzione accetta una stringa che specifica il parametro a cui fare riferimento a e restituisce il valore del parametro.This function takes in a string that specifies which parameter to refer to and outputs the value for that parameter.

           "osProfile": {
             "computerNamePrefix": "vm",
             "adminUsername": "[parameters('adminUsername')]",
             "adminPassword": "[parameters('adminPassword')]"
           },

Specificare la configurazione di rete delle macchine virtualiSpecify VM network configuration

Infine, è necessario specificare la configurazione di rete per le macchine virtuali nel set di scalabilità.Finally, we need to specify the network configuration for the VMs in the scale set. In questo caso, è sufficiente specificare l'ID della subnet creata in precedenza.In this case, we only need to specify the ID of the subnet created earlier. Questa specifica indica al set di scalabilità di inserire le interfacce di rete in questa subnet.This tells the scale set to put the network interfaces in this subnet.

È possibile ottenere l'ID della rete virtuale che contiene la subnet usando la funzione di modello resourceId.You can get the ID of the virtual network containing the subnet by using the resourceId template function. Questa funzione accetta il tipo e il nome di una risorsa e restituisce il relativo identificatore completo della risorsa.This function takes in the type and name of a resource and returns the fully qualified identifier of that resource. L'ID ha il formato seguente: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/<resourceProviderNamespace>/<resourceType>/<resourceName>This ID has the form: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/<resourceProviderNamespace>/<resourceType>/<resourceName>

Tuttavia, l'identificatore della rete virtuale non è sufficiente.However, the identifier of the virtual network is not enough. È necessario indicare la subnet specifica in cui devono trovarsi le macchine virtuali del set di scalabilità.You must specify the specific subnet that the scale set VMs should be in. A tale scopo, concatenare /subnets/mySubnet all'ID della rete virtuale.To do this, concatenate /subnets/mySubnet to the ID of the virtual network. Il risultato è l'ID completo della subnet.The result is the fully qualified ID of the subnet. Eseguire la concatenazione con la funzione concat, che accetta una serie di stringhe e restituisce la relativa concatenazione.Do this concatenation with the concat function, which takes in a series of strings and returns their concatenation.

           "networkProfile": {
             "networkInterfaceConfigurations": [
               {
                 "name": "myNic",
                 "properties": {
                   "primary": "true",
                   "ipConfigurations": [
                     {
                       "name": "myIpConfig",
                       "properties": {
                         "subnet": {
                           "id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
                         }
                       }
                     }
                   ]
                 }
               }
             ]
           }
         }
       }
     }
   ]
}

Passaggi successiviNext steps

È possibile distribuire il modello precedente seguendo quanto indicato nella documentazione di Azure Resource Manager.You can deploy the preceding template by following the Azure Resource Manager documentation.

Questa serie di esercitazioni può essere avviata dall'articolo sul modello di set di scalabilità a validità minima.You can start this tutorial series from the minimum viable scale set template article.

È possibile vedere come modificare il modello di set di scalabilità a validità minima per distribuire il set di scalabilità in una rete virtuale esistente.You can see how to modify the minimum viable scale set template to deploy the scale set into an existing virtual network.

È possibile vedere come modificare il modello di set di scalabilità a validità minima per distribuire il set di scalabilità con un'immagine personalizzata.You can see how to modify the minimum viable scale set template to deploy the scale set with a custom image.

È possibile vedere come modificare il modello di set di scalabilità a validità minima per distribuire un set di scalabilità Linux con scalabilità automatica basata su guest.You can see how to modify the minimum viable scale set template to deploy a Linux scale set with guest-based autoscale.

Per informazioni più generali al riguardo, vedere la panoramica sui set di scalabilità.For more general information about scale sets, refer to the scale set overview page.