共用方式為


使用 PowerShell 建立 SQL Server VM 的指南

適用於:Azure VM 上的 SQL Server

本指南涵蓋使用 PowerShell 在 Azure 虛擬機上建立 SQL Server 的選項。 如需依賴預設值的簡化 Azure PowerShell 範例,請參閱 Azure VM PowerShell 上的 SQL Server 快速入門或端對端腳本,請參閱 使用 PowerShell 腳本建立 SQL Server VM。

必要條件

若要完成本指南,您應該具備下列專案:

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶
  • 最新版本的 Azure PowerShell

注意

本文使用 Azure Az PowerShell 模組,這是與 Azure 互動時建議使用的 PowerShell 模組。 若要開始使用 Az PowerShell 模組,請參閱安裝 Azure PowerShell。 若要了解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

定義變數

若想要重複使用值並簡化建立指令碼的作業,請先定義數個變數。 視需要變更參數值,但在修改所提供的值時,請注意與名稱長度和特殊字元相關的命名限制。

首先,定義要在整個腳本中使用的參數,例如資源群組的位置、名稱、您想要使用的SQL Server 映射和記憶體帳戶,以及網路和虛擬機屬性。

位置和資源群組

定義您要在其中建立 SQL Server VM 和相關聯資源的數據區域、資源群組和訂用帳戶。

視需要進行修改,然後執行這些 Cmdlet 來初始化這些變數。

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

儲存體屬性

定義儲存體帳戶和虛擬機器所要使用的儲存體類型。

視需要進行修改,然後執行下列 Cmdlet 來初始化這些變數。 我們建議針為生產環境工作負載使用進階 SSD

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

注意

儲存器帳戶名稱長度必須介於 3 到 24 個字元之間,且只能使用數位和小寫字母,因此請確定您的資源組名沒有任何特殊字元,或修改記憶體帳戶的名稱,以使用與$ResourceGroupName不同的名稱。

網路屬性

定義要由虛擬機器中的網路使用的屬性。

  • Linux
  • TCP/IP 配置方法
  • 虛擬網路名稱
  • 虛擬子網路名稱
  • 虛擬網路的 IP 位址範圍
  • 子網路的 IP 位址範圍
  • 公用網域名稱標籤

視需要進行修改,然後執行此 Cmdlet 來初始化這些變數。

$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

虛擬機器屬性

定義下列屬性:

  • 虛擬機器名稱
  • 電腦名稱
  • 虛擬機器大小
  • 虛擬機器的作業系統磁碟名稱

視需要進行修改,然後執行此 Cmdlet 來初始化這些變數。

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

選擇 SQL Server 映像

較舊而無法在 Azure 入口網站中使用的 SQL Server 映像,可以使用 PowerShell 來部署。

使用下列變數來定義用於虛擬機器的 SQL Server 映像。

  1. 使用 Get-AzVMImageOffer 命令列出所有 SQL Server 映射供應專案,以列出 Azure 入口網站 中目前可用的映射,以及您只能使用 PowerShell 部署的舊版映射:

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

    注意

    SQL Server 2008 和 SQL Server 2008 R2 已超出延伸支援,無法再從 Azure Marketplace 取得。

  2. 使用 Get-AzVMImageSku 列出供應專案的可用版本。

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

在本教學課程中,請使用 Windows Server 2022 上的 SQL Server 2022 Developer Edition (SQLDEV-GEN2)。 開發人員版本免費獲得測試和開發授權,您只需支付執行 VM 的成本:

$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)

建立資源群組

執行 Connect-AzAccount 命令,並使用 Set-AzContext 設定訂用帳戶內容,以開啟 PowerShell 並建立 Azure 帳戶的存取權。 出現提示時,請輸入您的認證。 請使用與登入 Azure 入口網站相同的電子郵件和密碼。

建立訂用帳戶內容之後,您建立的第一個物件就是資源群組。 使用 Connect-AzAccount 命令連線到 Azure,並使用 Set-AzContext 設定您的訂用帳戶內容。 使用 New-AzResourceGroup \(英文\) Cmdlet,來建立 Azure 資源群組及其資源。 指定您先前針對資源群組名稱和位置所初始化的變數。

執行此 Cmdlet 以連線到 Azure、建立訂用帳戶內容,以及建立新的資源群組:


# 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

建立儲存體帳戶

虛擬機器需要作業系統磁碟和 SQL Server 資料和記錄檔的儲存體資源。 為了簡單起見,您會針對兩者建立單一磁碟。 您可以在之後使用 Add-Azure Disk Cmdlet 來附加額外的磁碟,以將您的 SQL Server 資料和記錄檔放在專用的磁碟上。 使用 New-AzStorageAccount \(英文\) Cmdlet,在新的資源群組中建立標準儲存體帳戶。 指定您先前針對儲存體帳戶名稱、儲存體 SKU 名稱及位置所初始化的變數。

執行此 Cmdlet 來建立新的記憶體帳戶:

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

提示

建立儲存體帳戶可能需要幾分鐘的時間。

建立網路資源

虛擬機器需要數個網路資源才能連接網路。

  • 每部虛擬機器都需要虛擬網路。
  • 虛擬網路必須定義至少一個子網路。
  • 網路介面必須以公用或私人 IP 位址定義。

建立虛擬網路子網路組態

首先要建立虛擬網路的子網路設定。 針對本教學課程,使用 New-AzVirtualNetworkSubnetConfig \(英文\) Cmdlet 來建立預設子網路。 指定您先前針對子網路名稱和位址前置詞所初始化的變數。

注意

您可以使用這個 Cmdlet 來定義虛擬網路子網路組態的其他屬性,但這已超出本教學課程的範圍。

執行此 Cmdlet 來建立虛擬子網路設定。

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

建立虛擬網路

接著,使用 New-AzVirtualNetwork \(英文\) Cmdlet,在新的資源群組中建立虛擬網路。 指定您先前針對名稱、位置及位址前置詞所初始化的變數。 使用您在上一個步驟中所定義的子網路設定。

執行此 Cmdlet 以建立您的虛擬網路:

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

建立公用 IP 位址

現在已定義虛擬網路,您必須設定IP位址以連線到虛擬機。 針對本教學課程,請使用動態 IP 位址來建立公用 IP 位址,以支援網際網路連線。 使用 New-AzPublicIpAddress \(英文\) Cmdlet,在新的資源群組中建立公用 IP 位址。 指定您先前針對名稱、位置、配置方法及 DNS 網域名稱標籤所初始化的變數。

注意

您可以使用這個 Cmdlet 來定義公用 IP 位址的其他屬性,但這已超出本初期教學課程的範圍。 您也可以建立私人位址或具有靜態位址的位址,但這也已超出本教學課程的範圍。

執行此 Cmdlet 來公用 IP 位址。

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

建立網路安全性群組

若要保護 VM 和 SQL Server 的流量,請建立網路安全性群組。

  1. 使用 New-AzNetworkSecurityRuleConfig 建立兩個網路安全組規則,這是遠端桌面 (RDP) 允許 RDP 連線的規則,以及允許 TCP 連接埠 1433 上的流量的規則。 如此即可透過網際網路連線至 SQL Server。

    # 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. 使用 New-AzNetworkSecurityGroup 建立網路安全組

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

建立網路介面

您現在已準備好建立虛擬機器的網路介面。 使用 New-AzNetworkInterface Cmdlet,在新的資源群組中建立網路介面。 指定先前所定義的名稱、位置、子網路及公用 IP 位址。

執行此 Cmdlet 來建立網路介面。

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

設定 VM 物件

您已定義儲存體和網路資源,現在已準備好定義虛擬機器的計算資源。

  • 指定虛擬網路大小和各種作業系統屬性。
  • 指定您先前所建立的網路介面。
  • 定義 Blob 儲存體。
  • 指定作業系統磁碟。

建立 SQL Server VM

若要建立 SQL Server VM,請先建立認證對象,然後建立 VM。

建立認證物件,以保留本機系統管理員認證的名稱和密碼

在您可以設定虛擬機器的作業系統屬性之前,您必須先以安全字串的形式提供本機系統管理員帳戶的認證。 為了達成此目的,要使用 Get-Credential Cmdlet。

執行下列 Cmdlet。 您必須在 PowerShell 認證要求視窗中,鍵入 VM 的本機系統管理員名稱和密碼。

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

定義屬性並建立 VM

現在您已準備好使用 New-AzVMConfig 設定虛擬機的作業系統屬性、使用 New-AzVM 建立 VM,並使用 Add-AzVMNetworkInterface Cmdlet,使用您稍早定義的變數來新增網路介面。

範例文稿會執行下列動作:

  • 需要安裝虛擬機器代理程式
  • 指定 Cmdlet 啟用自動更新。
  • 指定您先前針對虛擬機名稱、計算機名稱和認證初始化的變數。

執行此 Cmdlet 來設定虛擬機器的作業系統屬性。

# 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

虛擬機器已建立。

注意

如果您收到有關開機診斷的錯誤,則可以忽略它。 由於針對虛擬機器磁碟所指定的儲存體帳戶是進階儲存體帳戶,因此系統會針對開機診斷建立標準儲存體帳戶。

下載 SQL IaaS 代理程式延伸模組

SQL Server 虛擬機器能以 SQL Server IaaS 代理程式延伸模組支援自動化管理功能。 若要向延伸模組註冊您的 SQL Server,請在建立虛擬機器之後執行 New-AzSqlVM 命令。 指定 SQL Server VM 的授權類型,選擇隨用隨付 (PAYG)、透過 Azure Hybrid BenefitAHUB)、災害復原 (DR) 自備授權,以啟用 免費的 DR 複本授權。 如需授權模式的相關資訊,請參閱授權模式

若要使用 SQL IaaS 代理程式擴充功能註冊 SQL Server VM,請先使用 Register-AzResourceProvider 向資源提供者註冊您的訂用帳戶,然後使用 New-AzSqlVM 向 SQL IaaS 代理程式擴充 功能註冊 SQL Server VM


# 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

有三種方式可以向擴充功能註冊:

停止或移除 VM

如果您不需要持續執行 VM,您可以在不使用時將其停止,以避免不必要的費用。 下列命令會停止 VM,但會將其保留供未來使用。

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

您也可以使用 Remove-AzResourceGroup 命令,將與虛擬機器相關聯的所有資源永久刪除。 這麼做也會永久刪除虛擬機器,因此請小心使用此命令。

完整指令碼

如需提供端對端體驗的完整 PowerShell 腳本,請參閱 使用 PowerShell 在 Azure VM 上部署 SQL Server。

建立虛擬機器之後,您可以: