Tworzenie programu SQL Server na maszynie wirtualnej platformy Azure przy użyciu programu Azure PowerShell

Dotyczy:SQL Server na maszynie wirtualnej platformy Azure

W tym przewodniku opisano opcje aprowizowania programu SQL Server na maszynie wirtualnej platformy Azure przy użyciu programu PowerShell. Aby zapoznać się z uproszczonym przykładem programu Azure PowerShell, który opiera się na wartościach domyślnych, zobacz przewodnik Szybki start programu POWERShell dla programu SQL Server na maszynie wirtualnej platformy Azure.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Uwaga

W tym artykule użyto modułu Azure Az programu PowerShell, który jest zalecanym modułem programu PowerShell do interakcji z platformą Azure. Aby rozpocząć pracę z modułem Azure PowerShell, zobacz Instalowanie programu Azure PowerShell. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Konfigurowanie subskrypcji

  1. Otwórz program PowerShell i nawiąż połączenie z kontem platformy Azure, uruchamiając polecenie Connect-AzAccount.

    Connect-AzAccount
    
  2. Po wyświetleniu monitu wprowadź swoje dane uwierzytelniające. Użyj tego samego adresu e-mail i hasła, którego używasz do logowania w witrynie Azure Portal.

Definiowanie zmiennych obrazu

Aby ponownie użyć wartości i uprościć tworzenie skryptu, zacznij od zdefiniowania wielu zmiennych. Zmień wartości parametrów zgodnie z potrzebami, ale pamiętaj o ograniczeniach nazewnictwa związanych z długościami nazw i znakami specjalnymi podczas modyfikowania podanych wartości.

Lokalizacja i grupa zasobów

Zdefiniuj region danych i grupę zasobów, w której chcesz utworzyć inne zasoby maszyny wirtualnej.

Zmodyfikuj tak, jak chcesz, a następnie uruchom te polecenia cmdlet, aby zainicjować te zmienne.

$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

Właściwości magazynu

Zdefiniuj konto magazynu i typ magazynu, który ma być używany przez maszynę wirtualną.

Zmodyfikuj zgodnie z potrzebami, a następnie uruchom następujące polecenie cmdlet, aby zainicjować te zmienne. Zalecamy używanie dysków SSD w warstwie Premium dla obciążeń produkcyjnych.

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

Właściwości sieci

Zdefiniuj właściwości, które mają być używane przez sieć na maszynie wirtualnej.

  • Interfejs sieciowy
  • Metoda alokacji TCP/IP
  • Nazwa sieci wirtualnej
  • Nazwa podsieci wirtualnej
  • Zakres adresów IP dla sieci wirtualnej
  • Zakres adresów IP dla podsieci
  • Etykieta nazwy domeny publicznej

Zmodyfikuj tak, jak chcesz, a następnie uruchom to polecenie cmdlet, aby zainicjować te zmienne.

$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

Właściwości maszyny wirtualnej

Zdefiniuj następujące właściwości:

  • Virtual machine name
  • Nazwa komputera
  • Rozmiar maszyny wirtualnej
  • Nazwa dysku systemu operacyjnego dla maszyny wirtualnej

Zmodyfikuj tak, jak chcesz, a następnie uruchom to polecenie cmdlet, aby zainicjować te zmienne.

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

Wybieranie obrazu programu SQL Server

Użyj następujących zmiennych, aby zdefiniować obraz programu SQL Server do użycia dla maszyny wirtualnej.

  1. Najpierw wyświetl listę wszystkich ofert obrazów programu SQL Server za Get-AzVMImageOffer pomocą polecenia . To polecenie wyświetla listę bieżących obrazów, które są dostępne w witrynie Azure Portal, a także starszych obrazów, które można zainstalować tylko za pomocą programu PowerShell:

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

    Uwaga

    Programy SQL Server 2008 i SQL Server 2008 R2 nie są objęte rozszerzoną pomocą techniczną i nie są już dostępne w witrynie Azure Marketplace.

  2. Na potrzeby tego samouczka użyj następujących zmiennych, aby określić program SQL Server 2022 w systemie Windows Server 2022.

    $OfferName = "SQL2022-WS2022"
    $PublisherName = "MicrosoftSQLServer"
    $Version = "latest"
    
  3. Następnie wyświetl listę dostępnych wersji oferty.

    Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    
  4. Na potrzeby tego samouczka użyj programu SQL Server 2022 Developer Edition (SQLDEV). Wersja Developer jest bezpłatnie licencjonowana na testowanie i programowanie i płacisz tylko za koszt uruchamiania maszyny wirtualnej.

    $Sku = "SQLDEV"
    

Tworzenie grupy zasobów

W przypadku modelu wdrażania przy użyciu usługi Resource Manager pierwszy tworzony obiekt to grupa zasobów. Użyj polecenia cmdlet New-AzResourceGroup, aby utworzyć grupę zasobów platformy Azure i jej zasoby. Określ zmienne, które wcześniej zainicjowano dla nazwy i lokalizacji grupy zasobów.

Uruchom to polecenie cmdlet, aby utworzyć nową grupę zasobów.

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

Tworzenie konta magazynu

Maszyna wirtualna wymaga zasobów magazynu dla dysku systemu operacyjnego oraz plików dziennika i danych programu SQL Server. Dla uproszczenia utworzysz jeden dysk dla obu tych elementów. Dodatkowe dyski można później dołączyć przy użyciu polecenia cmdlet Add-Azure Disk , aby umieścić dane i pliki dziennika programu SQL Server na dedykowanych dyskach. Użyj polecenia cmdlet New-AzStorageAccount, aby utworzyć standardowe konto magazynu w nowej grupie zasobów. Określ zmienne, które wcześniej zainicjowano dla nazwy konta magazynu, nazwy jednostki SKU magazynu i lokalizacji.

Uruchom to polecenie cmdlet, aby utworzyć nowe konto magazynu.

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

Napiwek

Utworzenie konta magazynu może potrwać kilka minut.

Tworzenie zasobów sieciowych

Maszyna wirtualna wymaga wielu zasobów sieciowych na potrzeby łączności sieciowej.

  • Każda maszyna wirtualna wymaga sieci wirtualnej.
  • Sieć wirtualna musi mieć zdefiniowaną co najmniej jedną podsieć.
  • Interfejs sieciowy musi być zdefiniowany przy użyciu publicznego lub prywatnego adresu IP.

Tworzenie konfiguracji podsieci sieci wirtualnej

Zacznij od utworzenia konfiguracji podsieci dla sieci wirtualnej. Na potrzeby tego samouczka utwórz domyślną podsieć przy użyciu polecenia cmdlet New-AzVirtualNetworkSubnetConfig . Określ zmienne, które wcześniej zainicjowano dla nazwy podsieci i prefiksu adresu.

Uwaga

Możesz zdefiniować dodatkowe właściwości konfiguracji podsieci sieci wirtualnej przy użyciu tego polecenia cmdlet, ale wykracza poza zakres tego samouczka.

Uruchom to polecenie cmdlet, aby utworzyć konfigurację podsieci wirtualnej.

$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix

Tworzenie sieci wirtualnej

Następnie utwórz sieć wirtualną w nowej grupie zasobów przy użyciu polecenia cmdlet New-AzVirtualNetwork . Określ zmienne, które wcześniej zainicjowano dla prefiksu nazwy, lokalizacji i adresu. Użyj konfiguracji podsieci zdefiniowanej w poprzednim kroku.

Uruchom to polecenie cmdlet, aby utworzyć sieć wirtualną.

$VNet = New-AzVirtualNetwork -Name $VNetName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig

Tworzenie publicznego adresu IP

Po zdefiniowaniu sieci wirtualnej należy skonfigurować adres IP pod kątem łączności z maszyną wirtualną. Na potrzeby tego samouczka utwórz publiczny adres IP przy użyciu dynamicznego adresowania IP w celu obsługi łączności internetowej. Użyj polecenia cmdlet New-AzPublicIpAddress, aby utworzyć publiczny adres IP w nowej grupie zasobów. Określ zmienne, które wcześniej zainicjowano dla nazwy, lokalizacji, metody alokacji i etykiety nazwy domeny DNS.

Uwaga

Możesz zdefiniować dodatkowe właściwości publicznego adresu IP przy użyciu tego polecenia cmdlet, ale wykracza to poza zakres tego samouczka początkowego. Możesz również utworzyć adres prywatny lub adres ze statycznym adresem, ale wykracza to również poza zakres tego samouczka.

Uruchom to polecenie cmdlet, aby utworzyć publiczny adres IP.

$PublicIp = New-AzPublicIpAddress -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName

Tworzenie sieciowej grupy zabezpieczeń

Aby zabezpieczyć ruch maszyny wirtualnej i programu SQL Server, utwórz sieciową grupę zabezpieczeń.

  1. Najpierw utwórz regułę sieciowej grupy zabezpieczeń dla pulpitu zdalnego (RDP), aby zezwolić na połączenia RDP.

    $NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
       -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
    
  2. Skonfiguruj regułę sieciowej grupy zabezpieczeń zezwalającą na ruch na porcie TCP 1433. Umożliwia to nawiązywanie połączeń z programem SQL Server przez Internet.

    $NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp `
       -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
    
  3. Utwórz sieciowa grupa zabezpieczeń.

    $Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
       -Location $Location -Name $NsgName `
       -SecurityRules $NsgRuleRDP,$NsgRuleSQL
    

Tworzenie interfejsu sieciowego

Teraz możesz utworzyć interfejs sieciowy dla maszyny wirtualnej. Użyj polecenia cmdlet New-AzNetworkInterface, aby utworzyć interfejs sieciowy w nowej grupie zasobów. Określ wcześniej zdefiniowaną nazwę, lokalizację, podsieć i publiczny adres IP.

Uruchom to polecenie cmdlet, aby utworzyć interfejs sieciowy.

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

Konfigurowanie obiektu maszyny wirtualnej

Po zdefiniowaniu zasobów magazynu i sieci można zdefiniować zasoby obliczeniowe dla maszyny wirtualnej.

  • Określ rozmiar maszyny wirtualnej i różne właściwości systemu operacyjnego.
  • Określ interfejs sieciowy, który został wcześniej utworzony.
  • Zdefiniuj magazyn obiektów blob.
  • Określ dysk systemu operacyjnego.

Tworzenie obiektu maszyny wirtualnej

Zacznij od określenia rozmiaru maszyny wirtualnej. Na potrzeby tego samouczka określ ds13. Użyj polecenia cmdlet New-AzVMConfig, aby utworzyć konfigurowalny obiekt maszyny wirtualnej. Określ zmienne, które wcześniej zainicjowano dla nazwy i rozmiaru.

Uruchom to polecenie cmdlet, aby utworzyć obiekt maszyny wirtualnej.

$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize

Utwórz obiekt poświadczeń do przechowywania nazwy i hasła dla poświadczeń administratora lokalnego

Aby można było ustawić właściwości systemu operacyjnego dla maszyny wirtualnej, należy podać poświadczenia dla konta administratora lokalnego jako bezpieczny ciąg. Aby to osiągnąć, użyj polecenia cmdlet Get-Credential .

Uruchom następujące polecenie cmdlet. Musisz wpisać nazwę i hasło administratora lokalnego maszyny wirtualnej w oknie żądania poświadczeń programu PowerShell.

$Credential = Get-Credential -Message "Type the name and password of the local administrator account."

Ustawianie właściwości systemu operacyjnego dla maszyny wirtualnej

Teraz możesz ustawić właściwości systemu operacyjnego maszyny wirtualnej za pomocą polecenia cmdlet Set-AzVMOperatingSystem .

  • Ustaw typ systemu operacyjnego jako Windows.
  • Wymagaj zainstalowania agenta maszyny wirtualnej.
  • Określ, że polecenie cmdlet włącza automatyczną aktualizację.
  • Określ zmienne, które wcześniej zainicjowano dla nazwy maszyny wirtualnej, nazwy komputera i poświadczenia.

Uruchom to polecenie cmdlet, aby ustawić właściwości systemu operacyjnego dla maszyny wirtualnej.

$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine `
   -Windows -ComputerName $ComputerName -Credential $Credential `
   -ProvisionVMAgent -EnableAutoUpdate

Dodawanie interfejsu sieciowego do maszyny wirtualnej

Następnie użyj polecenia cmdlet Add-AzVMNetworkInterface , aby dodać interfejs sieciowy przy użyciu zdefiniowanej wcześniej zmiennej.

Uruchom to polecenie cmdlet, aby ustawić interfejs sieciowy dla maszyny wirtualnej.

$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id

Ustaw lokalizację magazynu obiektów blob dla dysku, który ma być używany przez maszynę wirtualną

Następnie ustaw lokalizację magazynu obiektów blob dla dysku maszyny wirtualnej ze zdefiniowanymi wcześniej zmiennymi.

Uruchom to polecenie cmdlet, aby ustawić lokalizację magazynu obiektów blob.

$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"

Ustawianie właściwości dysku systemu operacyjnego dla maszyny wirtualnej

Następnie ustaw właściwości dysku systemu operacyjnego dla maszyny wirtualnej przy użyciu polecenia cmdlet Set-AzVMOSDisk .

  • Określ, że system operacyjny maszyny wirtualnej będzie pochodzić z obrazu.
  • Ustaw buforowanie na tylko do odczytu (ponieważ program SQL Server jest instalowany na tym samym dysku).
  • Określ zmienne, które wcześniej zainicjowano dla nazwy maszyny wirtualnej i dysku systemu operacyjnego.

Uruchom to polecenie cmdlet, aby ustawić właściwości dysku systemu operacyjnego dla maszyny wirtualnej.

$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name `
   $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

Określanie obrazu platformy dla maszyny wirtualnej

Ostatnim krokiem konfiguracji jest określenie obrazu platformy dla maszyny wirtualnej. Na potrzeby tego samouczka użyj najnowszego obrazu CTP programu SQL Server 2016. Użyj polecenia cmdlet Set-AzVMSourceImage, aby użyć tego obrazu ze zdefiniowanymi wcześniej zmiennymi.

Uruchom to polecenie cmdlet, aby określić obraz platformy dla maszyny wirtualnej.

$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine `
   -PublisherName $PublisherName -Offer $OfferName `
   -Skus $Sku -Version $Version

Tworzenie maszyny wirtualnej z programem SQL

Po zakończeniu kroków konfiguracji możesz przystąpić do tworzenia maszyny wirtualnej. Użyj polecenia cmdlet New-AzVM, aby utworzyć maszynę wirtualną przy użyciu zdefiniowanych zmiennych.

Napiwek

Uruchomienie maszyny wirtualnej może potrwać kilka minut.

Uruchom to polecenie cmdlet, aby utworzyć maszynę wirtualną.

New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

Maszyna wirtualna jest tworzona.

Uwaga

Jeśli wystąpi błąd dotyczący diagnostyki rozruchu, możesz go zignorować. Konto magazynu w warstwie Standardowa jest tworzone na potrzeby diagnostyki rozruchu, ponieważ określone konto magazynu dla dysku maszyny wirtualnej jest kontem magazynu w warstwie Premium.

Zainstaluj rozszerzenie agenta środowiska IaaS programu SQL.

Maszyny wirtualne programu SQL Server obsługują funkcje zautomatyzowanego zarządzania za pomocą rozszerzenia agenta IaaS programu SQL Server. Aby zarejestrować program SQL Server przy użyciu rozszerzenia, uruchom polecenie New-AzSqlVM po utworzeniu maszyny wirtualnej. Określ typ licencji dla maszyny wirtualnej z programem SQL Server, wybierając opcję z płatnością zgodnie z rzeczywistym użyciem lub bring-your-own-license za pośrednictwem Korzyść użycia hybrydowego platformy Azure. Aby uzyskać więcej informacji na temat licencjonowania, zobacz Model licencjonowania.

New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

Istnieją trzy sposoby rejestrowania przy użyciu rozszerzenia:

Zatrzymywanie lub usuwanie maszyny wirtualnej

Jeśli maszyna wirtualna nie musi działać w sposób ciągły, możesz uniknąć niepotrzebnych opłat, zatrzymując ją, gdy jest nieużywana. Następujące polecenie zatrzyma maszynę wirtualną, ale pozostawi ją dostępną do użycia w przyszłości.

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

Możesz również trwale usunąć wszystkie zasoby skojarzone z maszyną wirtualną, korzystając z polecenia Remove-AzResourceGroup. Spowoduje to również trwałe usunięcie maszyny wirtualnej, dlatego tego polecenia należy używać z rozwagą.

Przykładowy skrypt

Poniższy skrypt zawiera kompletny skrypt programu PowerShell na potrzeby tego samouczka. Przyjęto założenie, że masz już skonfigurowaną subskrypcję platformy Azure do użycia z poleceniami Połączenie-AzAccount i Select-AzSubscription.

# Variables

## Global
$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

## Storage
$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

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

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

##Image
$PublisherName = "MicrosoftSQLServer"
$OfferName = "SQL2017-WS2016"
$Sku = "SQLDEV"
$Version = "latest"

# Resource Group
New-AzResourceGroup -Name $ResourceGroupName -Location $Location

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

# Network
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix
$VNet = New-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig
$PublicIp = New-AzPublicIpAddress -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName
$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
$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $Location -Name $NsgName -SecurityRules $NsgRuleRDP,$NsgRuleSQL
$Interface = New-AzNetworkInterface -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id -NetworkSecurityGroupId $Nsg.Id

# Compute
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$Credential = Get-Credential -Message "Type the name and password of the local administrator account."
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate #-TimeZone = $TimeZone
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id
$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

# Image
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version

# Create the VM in Azure
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

# Add the SQL IaaS Agent Extension, and choose the license type
New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

Następne kroki

Po utworzeniu maszyny wirtualnej można wykonać następujące czynności: