Distribuire l'applicazione nei set di scalabilità delle macchine virtualiDeploy your application on virtual machine scale sets

Per eseguire applicazioni nelle istanze di macchine virtuali (VM) in un set di scalabilità, è necessario prima installare i componenti dell'applicazione e i file necessari.To run applications on virtual machine (VM) instances in a scale set, you first need to install the application components and required files. Questo articolo descrive come creare un'immagine personalizzata di macchina virtuale per le istanze in un set di scalabilità o eseguire automaticamente gli script di installazione nelle istanze di macchine virtuali esistenti.This article introduces ways to build a custom VM image for instances in a scale set, or automatically run install scripts on existing VM instances. Si apprenderà anche come gestire gli aggiornamenti delle applicazioni o del sistema operativo in un set di scalabilità.You also learn how to manage application or OS updates across a scale set.

Creare un'immagine personalizzata della macchina virtualeBuild a custom VM image

Quando si usa una delle immagini della piattaforma Azure per creare le istanze nel set di scalabilità, non viene installato o configurato alcun software aggiuntivo.When you use one of the Azure platform images to create the instances in your scale set, no additional software is installed or configured. È possibile automatizzare l'installazione di questi componenti; tuttavia ciò si aggiunge al tempo necessario per eseguire il provisioning delle istanze di macchine virtuali nei set di scalabilità.You can automate the install of these components, however that adds to the time it takes to provision VM instances to your scale sets. Se si applicano numerose modifiche di configurazione alle istanze di macchine virtuali, si crea un sovraccarico di gestione con queste attività e script di configurazione.If you apply many configuration changes to the VM instances, there is management overhead with those configuration scripts and tasks.

Per ridurre la gestione della configurazione e il tempo per eseguire il provisioning di una macchina virtuale, è possibile creare un'immagine personalizzata della macchina virtuale pronta per eseguire l'applicazione non appena viene eseguito il provisioning di un'istanza nel set di scalabilità.To reduce the configuration management and time to provision a VM, you can create a custom VM image that is ready to run your application as soon as an instance is provisioned in the scale set. Il processo generale per creare un'immagine personalizzata della macchina virtuale per le istanze del set di scalabilità è il seguente:The overall process to create a custom VM image for scale set instances are as follows:

  1. Per creare un'immagine personalizzata della macchina virtuale per le istanze nel set di scalabilità, creare e accedere a una macchina virtuale, quindi installare e configurare l'applicazione.To build a custom VM image for your scale set instances, you create and log in to a VM, then install and configure the application. È possibile usare Packer per definire e creare un'immagine della macchina virtuale Linux o Windows.You can use Packer to define and build a Linux or Windows VM image. In alternativa è possibile creare e configurare la macchina virtuale manualmente:Or, you can manually create and configure the VM:

  2. Acquisire la macchina virtuale con l'interfaccia della riga di comando di Azure 2.0 o Azure PowerShell.Capture your VM with the Azure CLI 2.0 or Azure PowerShell. Questo passaggio crea l'immagine personalizzata della macchina virtuale che viene usata per distribuire le istanze in un set di scalabilità.This step creates the custom VM image that is used to then deploy instances in a scale set.

  3. Creare un set di scalabilità e specificare l'immagine personalizzata della macchina virtuale creata nei passaggi precedenti.Create a scale set and specify the custom VM image created in the preceding steps.

Installare un'app con l'estensione dello script personalizzataInstall an app with the Custom Script Extension

L'estensione script personalizzata scarica ed esegue gli script sulle macchine virtuali di Azure.The Custom Script Extension downloads and executes scripts on Azure VMs. Questa estensione è utile per la configurazione post-distribuzione, l'installazione di software o qualsiasi altra attività di configurazione o gestione.This extension is useful for post deployment configuration, software installation, or any other configuration / management task. Gli script possono essere scaricati dall'archiviazione di Azure o da GitHub oppure possono essere forniti al portale di Azure durante il runtime dell'estensione.Scripts can be downloaded from Azure storage or GitHub, or provided to the Azure portal at extension run-time.

L'estensione script personalizzata è integrabile nei modelli di Azure Resource Manager e può essere eseguita anche tramite l'interfaccia della riga di comando di Azure, PowerShell, il portale di Azure o l'API REST di Macchine virtuali di Azure.The Custom Script extension integrates with Azure Resource Manager templates, and can also be run using the Azure CLI, PowerShell, Azure portal, or the Azure Virtual Machine REST API.

Per altre informazioni, vedere Panoramica dell'estensione script personalizzata.For more information, see the Custom Script Extension overview.

Uso di Azure PowerShellUse Azure PowerShell

PowerShell usa una tabella hash per archiviare i file da scaricare e il comando da eseguire.PowerShell uses a hashtable to store the file to download and the command to execute. L'esempio seguente:The following example:

L'estensione dello script personalizzata viene applicata alle istanze di macchine virtuali myScaleSet nel gruppo di risorse denominato myResourceGroup.The Custom Script Extension is applied to the myScaleSet VM instances in the resource group named myResourceGroup. Immettere nomi personalizzati come di seguito:Enter your own names as follows:

# Define the script for your Custom Script Extension to run
$customConfig = @{
    "fileUris" = (,"https://raw.githubusercontent.com/iainfoulds/azure-samples/master/automate-iis.ps1");
    "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

# Get information about the scale set
$vmss = Get-AzureRmVmss `
                -ResourceGroupName "myResourceGroup" `
                -VMScaleSetName "myScaleSet"

# Add the Custom Script Extension to install IIS and configure basic website
$vmss = Add-AzureRmVmssExtension `
    -VirtualMachineScaleSet $vmss `
    -Name "customScript" `
    -Publisher "Microsoft.Compute" `
    -Type "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -Setting $customConfig

# Update the scale set and apply the Custom Script Extension to the VM instances
Update-AzureRmVmss `
    -ResourceGroupName "myResourceGroup" `
    -Name "myScaleSet" `
    -VirtualMachineScaleSet $vmss

Se il criterio di aggiornamento nel set di scalabilità è manuale, aggiornare le istanze di macchine virtuali con Update-AzureRmVmssInstance.If the upgrade policy on your scale set is manual, update your VM instances with Update-AzureRmVmssInstance. Questo cmdlet applica la configurazione aggiornata del set di scalabilità alle istanze di macchine virtuali e installa l'applicazione.This cmdlet applies the updated scale set configuration to the VM instances and installs your application.

Usare l'interfaccia della riga di comando 2.0 di AzureUse Azure CLI 2.0

Per usare l'estensione dello script personalizzata con l'interfaccia della riga di comando di Azure, creare un file JSON che definisca i file da ottenere e i comandi da eseguire.To use the Custom Script Extension with the Azure CLI, you create a JSON file that defines what files to obtain and commands to execute. Queste definizioni JSON possono essere riusate nelle distribuzioni del set di scalabilità per applicare installazioni di applicazioni coerenti.These JSON definitions can be reused across scale set deployments to apply consistent application installs.

Nella shell corrente creare un file denominato customConfig.json e incollare la configurazione seguente.In your current shell, create a file named customConfig.json and paste the following configuration. Ad esempio, creare il file in Cloud Shell anziché nel computer locale.For example, create the file in the Cloud Shell not on your local machine. È possibile usare qualsiasi editor.You can use any editor you wish. Immettere sensible-editor cloudConfig.json per creare il file e visualizzare un elenco degli editor disponibili.Enter sensible-editor cloudConfig.json to create the file and see a list of available editors.

{
  "fileUris": ["https://raw.githubusercontent.com/iainfoulds/azure-samples/master/automate_nginx.sh"],
  "commandToExecute": "./automate_nginx.sh"
}

Applicare la configurazione dell'estensione dello script personalizzata alle istanze di macchine virtuali nel set di scalabilità con az vmss extension set.Apply the Custom Script Extension configuration to the VM instances in your scale set with az vmss extension set. Nell'esempio seguente viene applicata la configurazione customConfig.json alle istanze di macchine virtuali myScaleSet nel gruppo di risorse denominato myResourceGroup.The following example applies the customConfig.json configuration to the myScaleSet VM instances in the resource group named myResourceGroup. Immettere nomi personalizzati come di seguito:Enter your own names as follows:

az vmss extension set \
    --publisher Microsoft.Azure.Extensions \
    --version 2.0 \
    --name CustomScript \
    --resource-group myResourceGroup \
    --vmss-name myScaleSet \
    --settings @customConfig.json

Se il criterio di aggiornamento nel set di scalabilità è manuale, aggiornare le istanze di macchine virtuali con az vmss update-instances.If the upgrade policy on your scale set is manual, update your VM instances with az vmss update-instances. Questo cmdlet applica la configurazione aggiornata del set di scalabilità alle istanze di macchine virtuali e installa l'applicazione.This cmdlet applies the updated scale set configuration to the VM instances and installs your application.

Installare un'app su una macchina virtuale Windows con PowerShell DSCInstall an app to a Windows VM with PowerShell DSC

PowerShell DSC (Desired State Configuration) è una piattaforma di gestione che permette di definire la configurazione dei computer di destinazione.PowerShell Desired State Configuration (DSC) is a management platform to define the configuration of target machines. Le configurazioni DSC definiscono che cosa installare nel computer e come configurare l'host.DSC configurations define what to install on a machine and how to configure the host. Un motore di Gestione configurazione locale viene eseguito in ogni nodo di destinazione che elabora le azioni necessarie in base alle configurazioni di cui è stato eseguito il push.A Local Configuration Manager (LCM) engine runs on each target node that processes requested actions based on pushed configurations.

L'estensione PowerShell DSC consente di personalizzare le istanze di macchine virtuali in un set di scalabilità con PowerShell.The PowerShell DSC extension lets you customize VM instances in a scale set with PowerShell. L'esempio seguente:The following example:

Viene applicata l'estensione DSC alle istanze di macchine virtuali myScaleSet nel gruppo di risorse denominato myResourceGroup.The DSC extension is applied to the myScaleSet VM instances in the resource group named myResourceGroup. Immettere nomi personalizzati come di seguito:Enter your own names as follows:

# Define the script for your Desired Configuration to download and run
$dscConfig = @{
  "wmfVersion" = "latest";
  "configuration" = @{
    "url" = "https://github.com/iainfoulds/azure-samples/raw/master/dsc.zip";
    "script" = "configure-http.ps1";
    "function" = "WebsiteTest";
  };
}

# Get information about the scale set
$vmss = Get-AzureRmVmss `
                -ResourceGroupName "myResourceGroup" `
                -VMScaleSetName "myScaleSet"

# Add the Desired State Configuration extension to install IIS and configure basic website
$vmss = Add-AzureRmVmssExtension `
    -VirtualMachineScaleSet $vmss `
    -Publisher Microsoft.Powershell `
    -Type DSC `
    -TypeHandlerVersion 2.24 `
    -Name "DSC" `
    -Setting $dscConfig

# Update the scale set and apply the Desired State Configuration extension to the VM instances
Update-AzureRmVmss `
    -ResourceGroupName "myResourceGroup" `
    -Name "myScaleSet"  `
    -VirtualMachineScaleSet $vmss

Se il criterio di aggiornamento nel set di scalabilità è manuale, aggiornare le istanze di macchine virtuali con Update-AzureRmVmssInstance.If the upgrade policy on your scale set is manual, update your VM instances with Update-AzureRmVmssInstance. Questo cmdlet applica la configurazione aggiornata del set di scalabilità alle istanze di macchine virtuali e installa l'applicazione.This cmdlet applies the updated scale set configuration to the VM instances and installs your application.

Installare un'app su una VM Linux con cloud-initInstall an app to a Linux VM with cloud-init

Cloud-init è un approccio diffuso per personalizzare una macchina virtuale Linux al primo avvio.Cloud-init is a widely used approach to customize a Linux VM as it boots for the first time. Cloud-init consente di installare pacchetti e scrivere file o configurare utenti e impostazioni di sicurezza.You can use cloud-init to install packages and write files, or to configure users and security. Quando cloud-init viene eseguito durante il processo di avvio iniziale non vi sono altri passaggi o agenti necessari per applicare la configurazione.As cloud-init runs during the initial boot process, there are no additional steps or required agents to apply your configuration.

Cloud-init funziona anche fra distribuzioni.Cloud-init also works across distributions. Ad esempio, non si usa apt-get install o yum install per installare un pacchetto.For example, you don't use apt-get install or yum install to install a package. In alternativa, è possibile definire un elenco di pacchetti da installare.Instead you can define a list of packages to install. Cloud-init userà automaticamente lo strumento di gestione del pacchetto nativo per la distribuzione selezionata.Cloud-init automatically uses the native package management tool for the distro you select.

Per altre informazioni, incluso un file cloud-init.txt di esempio, vedere Usare cloud-init per personalizzare le macchine virtuali di Azure.For more information, including an example cloud-init.txt file, see Use cloud-init to customize Azure VMs.

Per creare un set di scalabilità e usare un file cloud-init, aggiungere il parametro --custom-data al comando az vmss create e specificare il nome di un file cloud-int.To create a scale set and use a cloud-init file, add the --custom-data parameter to the az vmss create command and specify the name of a cloud-init file. L'esempio seguente crea un set di scalabilità denominato myScaleSet in myResourceGroup e configura le istanze di macchine virtuali con un file denominato cloud-init.txt.The following example creates a scale set named myScaleSet in myResourceGroup and configures VM instances with a file named cloud-init.txt. Immettere nomi personalizzati come di seguito:Enter your own names as follows:

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image UbuntuLTS \
  --upgrade-policy-mode automatic \
  --custom-data cloud-init.txt \
  --admin-username azureuser \
  --generate-ssh-keys

Installare le applicazioni quando un set scala orizzontalmenteInstall applications as a set scales out

I set di scalabilità consentono di aumentare il numero di istanze di macchine virtuali che eseguono l'app.Scale sets allow you to increase the number of VM instances that run your application. Questo processo di scalabilità orizzontale può essere avviato manualmente o automaticamente in base a metriche, ad esempio l'utilizzo della CPU o della memoria.This scale out process can be started manually, or automatically based on metrics such as CPU or memory usage.

Se è stata applicata l'estensione dello script personalizzata al set di scalabilità, l'applicazione viene installata in ogni nuova istanza della macchina virtuale.If you applied a Custom Script Extension to the scale set, the application is installed to each new VM instance. Se il set di scalabilità è basato su un'immagine personalizzata con l'applicazione preinstallata, ogni nuova istanza della macchina virtuale viene distribuita in uno stato utilizzabile.If the scale set is based on a custom image with the application pre-installed, each new VM instance is deployed in a usable state.

Se le istanze di macchine virtuali del set di scalabilità sono host contenitori, è possibile usare l'estensione dello script personalizzata per effettuare il pull ed eseguire le immagini contenitore necessarie.If the scale set VM instances are container hosts, you can use the Custom Script Extension to pull and run the need container images. L'estensione dello script personalizzata è in grado anche di registrare la nuova istanza di macchina virtuale con un agente di orchestrazione, ad esempio il servizio contenitore di Azure.The Custom Script extension could also register the new VM instance with an orchestrator, such as Azure Container Service.

Distribuire gli aggiornamenti delle applicazioniDeploy application updates

Se si aggiorna il codice, le librerie o i pacchetti dell'applicazione, è possibile effettuare il push dello stato più recente dell'applicazione nelle istanze di macchine virtuali in un set di scalabilità.If you update your application code, libraries, or packages, you can push the latest application state to VM instances in a scale set. Se si usa l'estensione dello script personalizzata, eseguire l'aggiornamento all'applicazione e non usare la distribuzione automatica.If you use the Custom Script Extension, updates to your application and not automatically deployed. Modificare la configurazione di script personalizzata, ad esempio in modo che punti a uno script di installazione con il nome di una versione aggiornata.Change the Custom Script configuration, such as to point to an install script that has an updated version name. Nell'esempio precedente l'estensione dello script personalizzata usa uno script denominato automate_nginx.sh, come indicato di seguito:In a previous example, the Custom Script Extension uses a script named automate_nginx.sh as follows:

{
  "fileUris": ["https://raw.githubusercontent.com/iainfoulds/azure-samples/master/automate_nginx.sh"],
  "commandToExecute": "./automate_nginx.sh"
}

Tutti gli aggiornamenti apportati all'applicazione non vengono esposti all'estensione dello script personalizzata, a meno che non venga modificato questo script di installazione.Any updates you make to your application are not exposed to the Custom Script Extension unless that install script changes. Un approccio consiste nell'includere un numero di versione che incrementa con le versioni dell'applicazione.One approach is to include a version number that increments with your application releases. L'estensione dello script personalizzata può ora referenziare automate_nginx_v2.sh come indicato di seguito:The Custom Script extension could now reference automate_nginx_v2.sh as follows:

{
  "fileUris": ["https://raw.githubusercontent.com/iainfoulds/azure-samples/master/automate_nginx_v2.sh"],
  "commandToExecute": "./automate_nginx_v2.sh"
}

L'estensione dello script personalizzata viene ora eseguita con le istanze di macchine virtuali per applicare gli aggiornamenti più recenti delle applicazioni.The Custom Script Extension now runs against the VM instances to apply the latest application updates.

Installare le applicazioni con gli aggiornamenti del sistema operativoInstall applications with OS updates

Quando sono disponibili nuove versioni del sistema operativo, è possibile usare o creare una nuova immagine personalizzata e distribuire gli aggiornamenti del sistema operativo a un set di scalabilità.When new OS releases are available, you can use or build a new custom image and deploy OS upgrades to a scale set. Ogni istanza di macchina virtuale viene aggiornata all'immagine più recente specificata.Each VM instance is upgraded to the latest image that you specify. È possibile usare un'immagine personalizzata con l'applicazione preinstallata, l'estensione dello script personalizzata o PowerShell DSC per rendere l'applicazione automaticamente disponibile quando si esegue l'aggiornamento.You can use a custom image with the application pre-installed, the Custom Script Extension, or PowerShell DSC to have your application automatically available as you perform the upgrade. Potrebbe essere necessario pianificare la manutenzione dell'applicazione durante l'esecuzione di questo processo per verificare che non si siano verificati problemi di compatibilità delle versioni.You may need to plan for application maintenance as you perform this process to ensure that there are no version compatibility issues.

Se si usa un'immagine di macchina virtuale personalizzata con l'applicazione preinstallata, è possibile integrare gli aggiornamenti dell'applicazione con una pipeline di distribuzione per creare nuove immagini e distribuire gli aggiornamenti del sistema operativo nel set di scalabilità.If you use a custom VM image with the application pre-installed, you could integrate the application updates with a deployment pipeline to build the new images and deploy OS upgrades across the scale set. Questo approccio consente alla pipeline di prelevare le compilazioni più recenti dell'applicazione, creare e convalidare un'immagine di macchina virtuale, quindi aggiornare le istanze di macchine virtuali nel set di scalabilità.This approach allows the pipeline to pick up the latest application builds, create and validate a VM image, then upgrade the VM instances in the scale set. Per eseguire una pipeline di distribuzione che crea e distribuisce gli aggiornamenti dell'applicazione tra le immagini di macchine virtuali personalizzate, è possibile usare Visual Studio Team Services, Spinnaker o Jenkins.To run a deployment pipeline that builds and deploys application updates across custom VM images, you could use Visual Studio Team Services, Spinnaker, or Jenkins.

Passaggi successiviNext steps

Quando si compilano e distribuiscono applicazioni ai set di scalabilità, è possibile esaminare Panoramica sulla progettazione di set di scalabilità.As you build and deploy applications to your scale sets, you can review the Scale Set Design Overview. Per altre informazioni su come gestire il set di scalabilità, vedere Usare PowerShell per gestire i set di scalabilità.For more information on how to manage your scale set, see Use PowerShell to manage your scale set.