Condividi tramite


Esercitazione: Installare applicazioni in set di scalabilità di macchine virtuali con Azure PowerShell

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. In un'esercitazione precedente si è appreso come usare un'immagine di macchina virtuale personalizzata per distribuire le istanze di macchina virtuale. Questa immagine personalizzata includeva installazioni e configurazioni manuali di applicazioni. È anche possibile automatizzare l'installazione delle applicazioni in un set di scalabilità dopo la distribuzione di ogni istanza di macchina virtuale oppure aggiornare un'applicazione che è già in esecuzione in un set di scalabilità. In questa esercitazione si apprenderà come:

  • Installare automaticamente le applicazioni nel set di scalabilità
  • Usare l'estensione Script personalizzato di Azure
  • Aggiornare un'applicazione in esecuzione in un set di scalabilità

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice contenuto in questo articolo senza dover installare strumenti nell'ambiente locale.

Per avviare Azure Cloud Shell:

Opzione Esempio/Collegamento
Selezionare Prova nell'angolo superiore destro di un blocco di codice o di comando. Quando si seleziona Prova, il codice o il comando non viene copiato automaticamente in Cloud Shell. Screenshot che mostra un esempio di Prova per Azure Cloud Shell.
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Pulsante per avviare Azure Cloud Shell.
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. Screenshot che mostra il pulsante Cloud Shell nel portale di Azure

Per usare Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice (o in un blocco di comando) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando CTRL+MAIUSC+V in Windows e Linux o selezionando CMD+MAIUSC+V in macOS.

  4. Premere Invio per eseguire il codice o il comando.

Informazioni sull'estensione Script personalizzato di Azure

L'estensione script personalizzata scarica ed esegue gli script sulle macchine virtuali di Azure. Questa estensione è utile per la configurazione post-distribuzione, l'installazione di software o qualsiasi altra attività di configurazione o gestione. 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.

L'estensione per script personalizzati è integrabile con i modelli di Azure Resource Manager. Può essere usato con l'interfaccia della riga di comando di Azure, Azure PowerShell, il portale di Azure o l'API REST. Per altre informazioni, vedere Panoramica dell'estensione script personalizzata.

Per vedere l'estensione Script personalizzato in azione, creare un set di scalabilità che installa il server Web IIS e restituisce il nome host dell'istanza di macchina virtuale del set di scalabilità. La definizione dell'estensione Script personalizzato scarica uno script di esempio da GitHub, installa i pacchetti richiesti, quindi scrive il nome host dell'istanza di macchina virtuale in una pagina HTML di base.

Creare un set di scalabilità

Creare un gruppo di risorse con New-AzResourceGroup. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella località Stati Uniti orientali:

New-AzResourceGroup -Name myResourceGroup -Location "East US"

Creare ora un set di scalabilità di macchine virtuali con New-AzVmss. Per distribuire il traffico alle singole istanze di macchine virtuali, viene creato anche un servizio di bilanciamento del carico. Il servizio di bilanciamento del carico include regole per la distribuzione del traffico sulla porta TCP 80. Consente inoltre il traffico di Desktop remoto sulla porta TCP 3389 e la comunicazione remota di PowerShell sulla porta TCP 5985. Quando richiesto, è possibile impostare le credenziali amministrative per le istanze di macchina virtuale nel set di scalabilità:

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -Location "EastUS" `
  -UpgradePolicyMode "Manual" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" 

La creazione e la configurazione di tutte le macchine virtuali e risorse del set di scalabilità richiedono alcuni minuti.

Creare una definizione di estensione Script personalizzato

Azure PowerShell usa una tabella hash per archiviare i file da scaricare e il comando da eseguire. Nell'esempio seguente viene usato script di esempio di GitHub. Creare prima questo oggetto di configurazione nel modo seguente:

$customConfig = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

Applicare ora l'estensione per script personalizzati con Add-AzVmssExtension. L'oggetto di configurazione definito in precedenza viene passato all'estensione. Aggiornare l'estensione nelle istanze del profilo del set di scalabilità con Update-AzVmss.

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

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

# Update the scale set
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Aggiungere l'estensione alle istanze del set di scalabilità esistenti

Eseguire un aggiornamento manuale per applicare l'estensione aggiornata a tutte le istanze del set di scalabilità esistenti. Il completamento dell’aggiornamento può richiedere un paio di minuti.

Update-AzVmssInstance -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId "*"

Ogni istanza di macchina virtuale nel set di scalabilità scarica ed esegue lo script da GitHub. In un esempio più complesso sarebbe possibile installare più componenti e file di applicazione. Se si aumentano le prestazioni del set di scalabilità, le nuove istanze di macchina virtuale applicano automaticamente la stessa definizione dell'estensione Script personalizzato e installano l'applicazione necessaria.

Consentire il traffico verso l'applicazione

Per consentire l'accesso all'applicazione Web di base, creare un gruppo di sicurezza di rete con New-AzNetworkSecurityRuleConfig e New-AzNetworkSecurityGroup. Per altre informazioni, vedere Rete per i set di scalabilità di macchine virtuali.

#Create a rule to allow traffic over port 80
$nsgFrontendRule = New-AzNetworkSecurityRuleConfig `
  -Name myFrontendNSGRule `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

#Create a network security group and associate it with the rule
$nsgFrontend = New-AzNetworkSecurityGroup `
  -ResourceGroupName  "myResourceGroup" `
  -Location EastUS `
  -Name myFrontendNSG `
  -SecurityRules $nsgFrontendRule

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName  "myResourceGroup" `
  -Name myVnet

$frontendSubnet = $vnet.Subnets[0]

$frontendSubnetConfig = Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $vnet `
  -Name mySubnet `
  -AddressPrefix $frontendSubnet.AddressPrefix `
  -NetworkSecurityGroup $nsgFrontend

Set-AzVirtualNetwork -VirtualNetwork $vnet

Testare il set di scalabilità

Per verificare il funzionamento del server Web, ottenere l'indirizzo IP pubblico del servizio di bilanciamento del carico con Get-AzPublicIpAddress. L'esempio seguente mostra l'indirizzo IP creato nel gruppo di risorse myResourceGroup:

Get-AzPublicIpAddress -ResourceGroupName "myResourceGroup" | Select IpAddress

Immettere l'indirizzo IP pubblico del servizio di bilanciamento del carico in un Web browser. Il servizio di bilanciamento del carico distribuisce il traffico a una delle istanze di macchina virtuale, come illustrato nell'esempio seguente:

Pagina Web di base in IIS

Lasciare aperto il Web browser per poter visualizzare una versione aggiornata nel passaggio successivo.

Modificare il criteri di aggiornamento

Nella sezione precedente è stato necessario un aggiornamento manuale per applicare l'applicazione aggiornata a tutte le istanze del set di scalabilità. Per consentire l'applicazione automatica degli aggiornamenti a tutte le istanze del set di scalabilità esistenti, aggiornare il criterio di aggiornamento da manuale ad automatico. Per altre informazioni sui criteri di aggiornamento, vedere Criteri di aggiornamento per i set di scalabilità di macchine virtuali.

$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Update-Azvmss `
    -ResourceGroupName "myResourceGroup" `
    -Name "myScaleSet" `
    -UpgradePolicyMode "Automatic" `
    -VirtualMachineScaleSet $vmss

Aggiornare la distribuzione dell'app

Nel ciclo di vita di un set di scalabilità potrebbe essere necessario distribuire una versione aggiornata dell'applicazione. Con l'estensione Script personalizzato è possibile fare riferimento a uno script di distribuzione aggiornato e quindi riapplicare l'estensione al set di scalabilità.

Creare una nuova definizione di configurazione denominata customConfigv2. Questa definizione esegue una versione v2 aggiornata dello script di installazione dell'applicazione:

$customConfigv2 = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis-v2.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis-v2.ps1"
}

Aggiornare la configurazione dell'estensione per script personalizzati nelle istanze di macchine virtuali del set di scalabilità. La definizione customConfigv2 viene usata per applicare la versione aggiornata dell'applicazione ai set di scalabilità:

$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"
 
$vmss.VirtualMachineProfile.ExtensionProfile[0].Extensions[0].Settings = $customConfigv2
 
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Poiché il set di scalabilità usa ora un criterio di aggiornamento automatico, l'applicazione aggiornata verrà applicata automaticamente alle istanze esistenti del set di scalabilità. Aggiornare il Web browser per visualizzare l'applicazione aggiornata. Per visualizzare la versione aggiornata, aggiornare il sito Web nel browser:

Pagina Web aggiornata in IIS

Pulire le risorse

Per rimuovere il set di scalabilità e le risorse aggiuntive, eliminare il gruppo di risorse e tutte le relative risorse con Remove-AzResourceGroup. Il parametro -Force conferma che si desidera eliminare le risorse senza un prompt aggiuntivo a tale scopo. Il parametro -AsJob restituisce il controllo al prompt senza attendere il completamento dell'operazione.

Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob

Passaggi successivi

In questa esercitazione si è appreso come installare e aggiornare automaticamente applicazioni nel set di scalabilità con Azure PowerShell:

  • Installare automaticamente le applicazioni nel set di scalabilità
  • Usare l'estensione Script personalizzato di Azure
  • Aggiornare un'applicazione in esecuzione in un set di scalabilità

Passare all'esercitazione successiva per informazioni su come ridimensionare automaticamente il set di scalabilità.