Esercitazione: Distribuire estensioni di macchina virtuale con i modelli di Azure Resource Manager

Questo articolo illustra come usare le estensioni di macchina virtuale di Azure per eseguire attività di configurazione e automazione post-distribuzione nelle VM di Azure. Sono disponibili molte estensioni diverse delle macchine virtuali da usare con macchine virtuali di Azure. In questa esercitazione si distribuisce un'estensione di script personalizzati da un modello di Azure Resource Manager (modello di ARM) per eseguire uno script PowerShell in una macchina virtuale Windows. Lo script installa un server Web nella VM.

Questa esercitazione illustra le attività seguenti:

  • Preparare uno script di PowerShell
  • Aprire un modello di avvio rapido
  • Modificare il modello
  • Distribuire il modello

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

Prerequisiti

Per completare l'esercitazione di questo articolo, sono necessari gli elementi seguenti:

Preparare uno script di PowerShell

È possibile usare uno script inline di PowerShell o un file di script. Questa esercitazione illustra come usare un file di script. Uno script di PowerShell con il contenuto seguente è condiviso da GitHub:

Install-WindowsFeature -Name Web-Server -IncludeManagementTools

Se si sceglie di pubblicare il file in una posizione personalizzata, aggiornare l'elemento fileUri del modello più avanti in questa esercitazione.

Aprire un modello di avvio rapido

I modelli di avvio rapido di Azure costituiscono un repository di modelli di Azure Resource Manager. Anziché creare un modello da zero, è possibile trovare un modello di esempio e personalizzarlo. Il modello usato in questa esercitazione è denominato Distribuire una VM Windows semplice.

  1. In Visual Studio Code selezionare File>Apri file.

  2. Nella casella Nome file incollare l'URL seguente:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. Selezionare Apri per aprire il file. Il modello definisce cinque risorse:

  4. Salvare una copia del file nel computer locale con il nome azuredeploy.json selezionando File>Salva con nome.

Modificare il modello

Aggiungere una risorsa estensione di macchina virtuale al modello esistente con il contenuto seguente:

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "apiVersion": "2021-04-01",
  "name": "[format('{0}/{1}', variables('vmName'), 'InstallWebServer')]",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[format('Microsoft.Compute/virtualMachines/{0}',variables('vmName'))]"
  ],
  "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.7",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-vm-extension/installWebServer.ps1"
      ],
      "commandToExecute": "powershell.exe -ExecutionPolicy Unrestricted -File installWebServer.ps1"
    }
  }
}

Per altre informazioni su questa definizione di risorsa, vedere il materiale di riferimento dell'estensione. Di seguito sono illustrati alcuni elementi importanti.

  • name: dato che la risorsa estensione è una risorsa figlio dell'oggetto macchina virtuale, il nome deve includere il nome della macchina virtuale come prefisso. Vedere Impostare il nome e il tipo per le risorse figlio.
  • dependsOn: creare la risorsa estensione dopo aver creato la macchina virtuale.
  • fileUris: posizioni in cui risiedono i file di script. Se si sceglie di non usare la posizione indicata, è necessario aggiornare i valori.
  • commandToExecute: questo comando avvia lo script.

Per usare lo script inline, rimuovere fileUris e aggiornare commandToExecute in:

powershell.exe Install-WindowsFeature -name Web-Server -IncludeManagementTools && powershell.exe remove-item 'C:\\inetpub\\wwwroot\\iisstart.htm' && powershell.exe Add-Content -Path 'C:\\inetpub\\wwwroot\\iisstart.htm' -Value $('Hello World from ' + $env:computername)

Questo script inline aggiorna anche il contenuto di iisstart.html.

È anche necessario aprire la porta HTTP in modo da poter accedere al server Web.

  1. Trovare securityRules nel modello.

  2. Aggiungere la regola seguente accanto a default-allow-3389.

    {
      "name": "AllowHTTPInBound",
      "properties": {
        "priority": 1010,
        "access": "Allow",
        "direction": "Inbound",
        "destinationPortRange": "80",
        "protocol": "Tcp",
        "sourcePortRange": "*",
        "sourceAddressPrefix": "*",
        "destinationAddressPrefix": "*"
      }
    }
    

Distribuire il modello

Per la procedura di distribuzione, vedere la sezione Distribuire il modello di Esercitazione: Creare modelli di Azure Resource Manager con risorse dipendenti. È consigliabile usare una password generata per l'account amministratore della macchina virtuale. Vedere la sezione Prerequisiti di questo articolo.

In Cloud Shell usare il comando seguente per recuperare l'indirizzo IP pubblico della nuova macchina virtuale:

(Get-AzPublicIpAddress -ResourceGroupName $resourceGroupName).IpAddress

Incollare l'indirizzo IP in un Web browser. Si aprirà la pagina iniziale predefinita di Internet Information Services (IIS):

Screenshot della pagina iniziale di Internet Information Services.

Pulire le risorse

Quando non sono più necessarie, eseguire la pulizia delle risorse di Azure distribuite eliminando il gruppo di risorse.

  1. Nel portale di Azure selezionare Gruppo di risorse nel riquadro a sinistra.
  2. Immettere il nome del gruppo di risorse nella casella Filtra per nome.
  3. Selezionare il nome del gruppo di risorse. Nel gruppo di risorse vengono visualizzate sei risorse.
  4. Selezionare Elimina gruppo di risorse nel menu in alto.

Passaggi successivi

In questa esercitazione sono state distribuite una macchina virtuale e un'estensione di macchina virtuale. L'estensione ha installato il server Web IIS nella macchina virtuale. Per informazioni su come usare l'estensione del database SQL di Azure per importare un file BACPAC, vedere: