使用 PowerShell 建立 SQL Server VM 的指南
本指南涵蓋使用 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 映像。
使用 Get-AzVMImageOffer 命令列出所有 SQL Server 映射供應專案,以列出 Azure 入口網站 中目前可用的映射,以及您只能使用 PowerShell 部署的舊版映射:
Get-AzVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
注意
SQL Server 2008 和 SQL Server 2008 R2 已超出延伸支援,無法再從 Azure Marketplace 取得。
使用 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 的流量,請建立網路安全性群組。
使用 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
使用 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 Benefit (AHUB
)、災害復原 (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。
相關內容
建立虛擬機器之後,您可以: