Condividi tramite


Esercitazione: Installare applicazioni nei set di scalabilità delle 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 creare e usare un'immagine di macchina virtuale personalizzata per distribuire le istanze di macchina virtuale. Questa immagine personalizzata includeva installazioni e configurazioni manuali dell'applicazione. È 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à
  • Utilizzare l'estensione di script personalizzata 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 ospita Azure Cloud Shell, un ambiente shell interattivo che è possibile usare 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 codice o di un blocco di comandi. Selezionando Prova non viene copiato automaticamente il codice o il comando in Cloud Shell. Screenshot che mostra un esempio della funzione
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 in alto a destra nel 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 blocco di comandi) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando Ctrl+Shift+V in Windows e Linux oppure selezionando Cmd+Shift+V in macOS.

  4. Selezionare INVIO per eseguire il codice o il comando.

Che cos'è l'estensione script personalizzato di Azure?

L'estensione per script personalizzati scarica ed esegue script nelle macchine virtuali di Azure. Questa estensione è utile per la configurazione post-distribuzione, l'installazione del software o qualsiasi altra attività di configurazione/gestione. Gli script possono essere scaricati dall'archiviazione di Azure o da GitHub oppure forniti al portale di Azure in fase di esecuzione dell'estensione.

L'estensione Script personalizzato si integra con i modelli di Azure Resource Manager. Può essere usato anche 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 per script personalizzati scarica uno script di esempio da GitHub, installa i pacchetti necessari, quindi scrive il nome host dell'istanza della 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 il comando 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 distribuire il traffico sulla porta TCP 80. Consente inoltre il traffico desktop remoto sulla porta TCP 3389 e la comunicazione remota di PowerShell sulla porta TCP 5985. Quando richiesto, è possibile impostare le proprie 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 personalizzata

Azure PowerShell usa una tabella hash per archiviare il file da scaricare e il comando da eseguire. Nell'esempio seguente viene usato uno script di esempio di GitHub. Creare prima di tutto questo oggetto di configurazione come indicato di seguito:

$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 script personalizzata 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à esistente

Eseguire un aggiornamento manuale per applicare l'estensione aggiornata a tutte le istanze del set di scalabilità esistenti. Il completamento dell'aggiornamento potrebbe richiedere alcuni 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 è possibile installare più componenti e file dell'applicazione. Se il set di scalabilità viene ridimensionato, le nuove istanze di macchina virtuale applicano automaticamente la stessa definizione dell'estensione per script personalizzati e installano l'applicazione richiesta.

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 visualizzare il server Web in azione, ottenere l'indirizzo IP pubblico del servizio di bilanciamento del carico con Get-AzPublicIpAddress. Nell'esempio seguente viene visualizzato 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 della macchina virtuale, come illustrato nell'esempio seguente:

Pagina Web di base in IIS

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

Modificare i criteri di aggiornamento

Nella sezione precedente, per applicare l'applicazione aggiornata a tutte le istanze del set di scalabilità, è stato necessario un aggiornamento manuale. Per abilitare gli aggiornamenti da applicare automaticamente a tutte le istanze del set di scalabilità esistenti, aggiornare i criteri di aggiornamento da manuale a 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 di app

Durante tutto il 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 al 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 criteri 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 questo tutorial, hai imparato come installare e aggiornare automaticamente le applicazioni nel tuo insieme di scalabilità con Azure PowerShell.

  • Installare automaticamente le applicazioni nel set di scalabilità
  • Utilizzare l'estensione di script personalizzata 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à.