Condividi tramite


Guida alla creazione di una macchina virtuale di SQL Server con PowerShell

Si applica a:SQL Server su VM di Azure

Questa guida illustra le opzioni per l'uso di PowerShell per creare un'istanza di SQL Server in una macchina virtuale (VM) di Azure. Per un esempio semplificato di Azure PowerShell che si basa sui valori predefiniti, vedere l'argomento di avvio rapido di SQL Server in una macchina virtuale di Azure PowerShell o per uno script end-to-end, vedere Creare una macchina virtuale di SQL Server con script di PowerShell.

Prerequisiti

Per completare questa guida, è necessario disporre degli elementi seguenti:

  • Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • La versione più recente di Azure PowerShell

Nota

Questo articolo usa il modulo di PowerShell Azure Az consigliato per l'interazione con Azure. Per iniziare a usare il modulo Az PowerShell, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Definire le variabili

Per riutilizzare i valori e semplificare la creazione degli script, iniziare definendo una serie di variabili. Cambiare i valori dei parametri in base alla necessità, ma quando si modificano i valori forniti occorre prestare attenzione alle restrizioni di denominazione correlate alle lunghezze dei nomi e ai caratteri speciali.

Per iniziare, definire i parametri da usare in tutto lo script, ad esempio il percorso, il nome del gruppo di risorse, l'immagine di SQL Server e l'account di archiviazione da usare, nonché le proprietà della rete e della macchina virtuale.

Posizione e gruppo di risorse

Definire l'area dati, il gruppo di risorse e la sottoscrizione in cui si vuole creare la macchina virtuale di SQL Server e le risorse associate.

Modificare come desiderato e quindi eseguire questi cmdlet per inizializzare le variabili.

$SubscriptionId = "<Enter Subscription ID>"
$Location = "<Enter Location>"
$ResourceGroupName = "<Enter Resource Group Name>"
$userName = "<Enter User Name for the virtual machine"

Proprietà della risorsa di archiviazione

Definire l'account di archiviazione e il tipo di archiviazione da utilizzare per la macchina virtuale.

Modificare come desiderato e quindi eseguire il comando cmdlet seguente per inizializzare le variabili. Per i carichi di lavoro di produzione è consigliabile usare unità SSD Premium.

$StorageName = "sqlvm" + "storage"
$StorageSku = "Premium_LRS"

Nota

Il nome dell'account di archiviazione deve avere una lunghezza compresa tra 3 e 24 caratteri e usare solo numeri e lettere minuscole, quindi assicurarsi che il nome del gruppo di risorse non abbia caratteri speciali o modificare il nome dell'account di archiviazione in modo da usare un nome diverso da $ResourceGroupName.

Proprietà della rete

Definire le proprietà da usare per la rete nella macchina virtuale.

  • Interfaccia di rete
  • Metodo di allocazione TCP/IP
  • Nome della rete virtuale
  • Nome della subnet virtuale
  • Intervallo di indirizzi IP per la rete virtuale
  • Intervallo di indirizzi IP per la subnet
  • Etichetta di nome di dominio pubblico

Modificare come desiderato e quindi eseguire questo cmdlet per inizializzare le variabili.

$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$TCPIPAllocationMethod = "Dynamic"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$DomainName = $ResourceGroupName

Proprietà della macchina virtuale

Definire le proprietà seguenti:

  • Nome della macchina virtuale
  • Nome del computer
  • Virtual machine size (Dimensioni della macchina virtuale)
  • Nome del disco del sistema operativo per la macchina virtuale

Modificare come desiderato e quindi eseguire questo cmdlet per inizializzare le variabili.

$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

Scegliere un'immagine di SQL Server

È possibile implementare un'immagine meno recente di SQL Server che non è disponibile nel portale di Azure usando PowerShell.

Usare le variabili seguenti per definire l'immagine di SQL Server da usare per la macchina virtuale.

  1. Elencare tutte le offerte di immagini di SQL Server con il comando Get-AzVMImageOffer per elencare le immagini disponibili correnti nel portale di Azure e le immagini meno recenti che è possibile distribuire solo con PowerShell:

    Get-AzVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
    

    Nota

    SQL Server 2008 e SQL Server 2008 R2 non dispongono più del supporto "Extended" e non sono più disponibili in Azure Marketplace.

  2. Elenca le edizioni disponibili per l'offerta con Get-AzVMImageSku.

    Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    

Per questa esercitazione, usare SQL Server 2022 Developer Edition (SQLDEV-GEN2) in Windows Server 2022. L'edizione Developer è concessa liberamente in licenza per il test e lo sviluppo e si paga solo per il costo di esecuzione della macchina virtuale:

$OfferName = "SQL2022-WS2022"
$PublisherName = "MicrosoftSQLServer"
$Version = "latest"
$Sku = "SQLDEV-GEN2"
$License = 'PAYG'

# Define a credential object
$SecurePassword = ConvertTo-SecureString '<strong password>' `
   -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)

Creare un gruppo di risorse

Aprire PowerShell e stabilire l'accesso all'account Azure eseguendo il comando Connect-AzAccount e impostare il contesto della sottoscrizione con Set-AzContext. Quando viene richiesto, immetti le credenziali. Utilizzare lo stesso indirizzo email e password utilizzati per accedere al portale di Azure.

Dopo aver stabilito il contesto della sottoscrizione, il primo oggetto creato è il gruppo di risorse. Usare il comando Connect-AzAccount per connettersi ad Azure e impostare il contesto della sottoscrizione con Set-AzContext. Usare il cmdlet New-AzResourceGroup per creare un gruppo di risorse di Azure e le relative risorse. Specificare le variabili inizializzate in precedenza per nome e posizione del gruppo di risorse.

Eseguire questo cmdlet per connettersi ad Azure, stabilire il contesto della sottoscrizione e creare il nuovo gruppo di risorse:


# Set subscription context
Connect-AzAccount
$subscriptionContextParams = @{
    SubscriptionId = $SubscriptionId
}
Set-AzContext @subscriptionContextParams

# Create a resource group
$resourceGroupParams = @{
    Name = $resourceGroupName
    Location = $Location
    Tag = @{Owner="SQLDocs-Samples"}
}
$resourceGroup = New-AzResourceGroup @resourceGroupParams

Creare un account di archiviazione

La macchina virtuale richiede risorse di archiviazione per il disco del sistema operativo e per i file di dati e di log di SQL Server. Per semplificare, verrà creato un singolo disco per entrambi. Successivamente è possibile collegare dischi aggiuntivi usando il cmdlet Add-Azure Disk per posizionare i file di dati e di log di SQL Server in dischi dedicati. Usare il cmdlet New-AzStorageAccount per creare un account di archiviazione standard nel nuovo gruppo di risorse. Specificare le variabili inizializzate in precedenza per nome dell'account di archiviazione, nome dello SKU di archiviazione e posizione.

Eseguire questo cmdlet per creare il nuovo account di archiviazione:

# Create storage account
$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
   -Name $StorageName -SkuName $StorageSku `
   -Kind "Storage" -Location $Location

Suggerimento

La creazione dell'account di archiviazione può richiedere alcuni minuti.

Creare risorse di rete

La macchina virtuale richiede alcune risorse di rete per la connettività di rete.

  • Ogni macchina virtuale richiede una rete virtuale.
  • In una rete virtuale deve essere definita almeno una subnet.
  • È necessario che sia definita un'interfaccia di rete con un indirizzo IP pubblico o privato.

Creare una configurazione di subnet di rete virtuale

Per prima cosa, creare una configurazione di subnet per la rete virtuale. Per questa esercitazione, creare una subnet predefinita mediante il cmdlet New-AzVirtualNetworkSubnetConfig. Specificare le variabili che hai precedentemente inizializzato per il nome della subnet e il prefisso dell'indirizzo.

Nota

È possibile definire altre proprietà della configurazione della subnet della rete virtuale usando questo cmdlet, ma questa operazione non rientra nell'ambito dell'esercitazione.

Eseguire questo cmdlet per creare la configurazione di subnet virtuale.

# Create a subnet configuration
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix

Creare una rete virtuale

Creare quindi la rete virtuale nel nuovo gruppo di risorse mediante il cmdlet New-AzVirtualNetwork. Specificare le variabili inizializzate in precedenza per nome, posizione e prefisso dell'indirizzo. Usare la configurazione di subnet definita nel passaggio precedente.

Eseguire questo cmdlet per creare la rete virtuale:

# Create a virtual network
$VNet = New-AzVirtualNetwork -Name $VNetName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig

Creare l'indirizzo IP pubblico

Ora che la rete virtuale è definita, è necessario configurare un indirizzo IP per connettersi alla macchina virtuale. Per questa esercitazione, creare un indirizzo IP pubblico mediante indirizzi IP dinamici per supportare la connettività Internet. Usare il cmdlet New-AzPublicIpAddress per creare l'indirizzo IP pubblico nel nuovo gruppo di risorse. Specificare le variabili inizializzate in precedenza per nome, posizione, metodo di allocazione ed etichetta del nome di dominio DNS.

Nota

È possibile definire altre proprietà dell'indirizzo IP pubblico usando questo cmdlet, ma questa operazione non rientra nell'ambito dell'esercitazione. È anche possibile creare un indirizzo privato o un indirizzo di tipo statico, ma anche questa procedura non rientra nell'ambito dell'esercitazione.

Eseguire questo cmdlet per creare l'indirizzo IP pubblico.

# Create a public IP address
$PublicIp = New-AzPublicIpAddress -Name $InterfaceName `
-ResourceGroupName $ResourceGroupName -Location $Location `
-AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName

Creare il gruppo di sicurezza di rete

Per proteggere la macchina virtuale e il traffico di SQL Server, creare un gruppo di sicurezza di rete.

  1. Creare due regole del gruppo di sicurezza di rete usando New-AzNetworkSecurityRuleConfig, una regola per desktop remoto (RDP) per consentire le connessioni RDP e una regola che consente il traffico sulla porta TCP 1433. in modo da permettere connessioni a SQL Server tramite Internet.

    # Create a network security group rule
    $NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
    -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
    
    $NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp `
    -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
    
  2. Creare il gruppo di sicurezza di rete usando New-AzNetworkSecurityGroup.

    # Create a network security group
    $Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
    -Location $Location -Name $NsgName `
    -SecurityRules $NsgRuleRDP,$NsgRuleSQL
    

Creare l'interfaccia di rete

È ora possibile creare l'interfaccia di rete per la macchina virtuale. Usare il cmdlet New-AzNetworkInterface per creare l'interfaccia di rete nel nuovo gruppo di risorse. Specificare il nome, la posizione, la subnet e l'indirizzo IP pubblico definiti in precedenza.

Eseguire questo cmdlet per creare l'interfaccia di rete.

# Create a network interface
$Interface = New-AzNetworkInterface -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id `
   -NetworkSecurityGroupId $Nsg.Id

Configurare un oggetto VM

Dopo avere definito le risorse di archiviazione e di rete, è possibile definire le risorse di calcolo per la macchina virtuale.

  • Specificare le dimensioni della macchina virtuale e varie proprietà del sistema operativo.
  • Specificare l'interfaccia di rete creata in precedenza.
  • Definire l'archivio BLOB.
  • Specificare il disco del sistema operativo.

Creare la VM di SQL Server

Per creare la macchina virtuale di SQL Server, creare prima un oggetto credenziale e quindi creare la macchina virtuale.

Creare un oggetto credenziali per includere il nome e la password per le credenziali di amministratore locale

Prima che sia possibile configurare le proprietà del sistema operativo per la macchina virtuale, è necessario specificare le credenziali per l'account di amministratore locale sotto forma di stringa sicura. Per eseguire questa operazione usare il cmdlet Get-Credential.

Eseguire il cmdlet seguente. Sarà necessario digitare il nome e la password dell'amministratore locale della macchina virtuale nella finestra di richiesta delle credenziali di PowerShell.

# Define a credential object
$SecurePassword = ConvertTo-SecureString '<strong password>' `
   -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)

Definire le proprietà e creare la macchina virtuale

A questo punto è possibile impostare le proprietà del sistema operativo della macchina virtuale con New-AzVMConfig, creare la macchina virtuale con New-AzVM e usare il cmdlet Add-AzVMNetworkInterface per aggiungere l'interfaccia di rete usando la variabile definita in precedenza.

Lo script di esempio esegue le operazioni seguenti:

  • Richiedere l'installazione dell'agente per la macchina virtuale.
  • Specifica che il cmdlet abilita l'aggiornamento automatico.
  • Specifica le variabili inizializzate in precedenza per il nome della macchina virtuale, il nome del computer e le credenziali.

Eseguire questo cmdlet per configurare le proprietà del sistema operativo per la macchina virtuale.

# Create a virtual machine configuration
$VMName = $ResourceGroupName + "VM"
$VMConfig = New-AzVMConfig -VMName $VMName -VMSize $VMSize |
    Set-AzVMOperatingSystem -Windows -ComputerName $VMName -Credential $Cred -ProvisionVMAgent -EnableAutoUpdate |
    Set-AzVMSourceImage -PublisherName $PublisherName -Offer $OfferName -Skus $Sku  -Version $Version |
    Add-AzVMNetworkInterface -Id $Interface.Id

# Create the VM
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VMConfig

La creazione della macchina virtuale è stata completata.

Nota

Se si verifica un errore sulla diagnostica di avvio, è possibile ignorarlo. Viene creato un account di archiviazione standard per la diagnostica di avvio, perché l'account di archiviazione specificato per il disco della macchina virtuale è un account di archiviazione Premium.

Installare l'estensione SQL Server IaaS Agent

Le macchine virtuali di SQL Server supportano funzionalità di gestione automatica mediante l'estensione SQL Server IaaS Agent. Per registrare l'istanza di SQL Server con l'estensione, eseguire il comando New-AzSqlVM dopo aver creato la macchina virtuale. Specificare il tipo di licenza per la macchina virtuale di SQL Server, scegliendo tra pagamento in base al consumo (PAYG), bring-your-own-license tramite il Vantaggio Azure Hybrid (AHUB), il ripristino di emergenza (DR) per attivare la licenza di replica di ripristino di emergenza gratuita. Per altre informazioni sulle licenze, vedere Modello di licenza.

Per registrare la macchina virtuale di SQL Server con l'estensione SQL IaaS Agent, registrare prima la sottoscrizione con il provider di risorse usando Register-AzResourceProvider e quindi registrare la macchina virtuale di SQL Server con l'estensione SQL IaaS Agent usando New-AzSqlVM:


# Register the SQL IaaS Agent extension to your subscription
Register-AzResourceProvider -ProviderNamespace Microsoft.SqlVirtualMachine

# Register SQL Server VM with the extension
New-AzSqlVM -Name $VMName -ResourceGroupName $ResourceGroupName -Location $Location `
-LicenseType $License

Esistono tre modi per eseguire la registrazione con l'estensione:

Arrestare o rimuovere una macchina virtuale

Se non è necessario che la macchina virtuale sia continuamente in esecuzione, è possibile evitare addebiti superflui arrestandola quando non è in uso. Il comando seguente arresta la VM ma la lascia disponibile per un uso futuro.

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

È anche possibile eliminare definitivamente tutte le risorse associate alla macchina virtuale con il comando Remove-AzResourceGroup. In questo modo viene eliminata definitivamente anche la macchina virtuale, quindi usare questo comando con cautela.

Script completo

Per uno script di PowerShell completo che offre un'esperienza end-to-end, vedere Distribuire SQL Server in una macchina virtuale di Azure con PowerShell.

Dopo aver creato la macchina virtuale, è possibile: