使用 PowerShell 创建 SQL Server VM 的指南
本指南介绍使用 PowerShell 在 Azure 虚拟机 (VM) 上创建 SQL Server 的选项。 有关依赖于默认值的简化 Azure PowerShell 示例,请参阅 Azure VM 上的 SQL Server PowerShell 快速入门;或者有关端到端脚本,请参阅使用 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 映像。
可以使用 PowerShell 部署 Azure 门户中不可用的较旧的 SQL Server 映像。
使用以下变量来定义要用于虚拟机的 SQL Server 映像。
使用 Get-AzVMImageOffer 命令列出所有 SQL Server 映像产品/服务,以列出 Azure 门户中的当前可用映像,以及仅可使用 PowerShell 部署的旧映像:
Get-AzVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
注意
SQL Server 2008 和 SQL Server 2008 R2 超出了扩展支持范围,不再可从 Azure 市场获取。
使用 Get-AzVMImageSku 列出产品/服务的可用版本。
Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
在本教程中,请在 Windows Server 2022 上使用 SQL Server 2022 开发人员版 (SQLDEV-GEN2)。 Developer Edition 针对测试和开发自由授权,用户只需支付运行 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)
创建资源组
打开 PowerShell,并通过运行 Connect-AzAccount 命令建立对 Azure 帐户的访问权限,然后使用 Set-AzContext 设置订阅上下文。 在系统提示时输入凭据。 使用登录 Azure 门户时所用的相同电子邮件和密码。
建立订阅上下文后,创建的第一个对象是资源组。 使用 Connect-AzAccount 命令连接到 Azure,并使用 Set-AzContext 设置订阅上下文。 使用 New-AzResourceGroup cmdlet 创建 Azure 资源组及其资源。 指定前面初始化的资源组名称和位置变量。
运行此 cmdlet 以连接到 Azure,建立订阅上下文并创建新的资源组:
# Set subscription context
Connect-AzAccount -Environment AzureChinaCloud
$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 来创建新的存储帐户:
$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
-Name $StorageName -SkuName $StorageSku `
-Kind "Storage" -Location $Location
提示
创建存储帐户可能需要几分钟时间。
创建网络资源
虚拟机需要使用多个网络资源才能建立网络连接。
- 每个虚拟机需要一个虚拟网络。
- 必须为每个虚拟网络至少定义一个子网。
- 必须使用公共或专用 IP 地址定义网络接口。
创建虚拟网络子网配置
首先创建虚拟网络的子网配置。 本教程使用 New-AzVirtualNetworkSubnetConfig cmdlet 创建默认子网。 指定前面初始化的子网名称和地址前缀变量。
注意
可以使用此 cmdlet 来定义虚拟网络子网配置的其他属性,但这已超出本教程的范围。
运行此 cmdlet 来创建虚拟子网配置。
# Create storage account
$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName -SkuName $StorageSku -Kind "Storage" -Location $Location
创建虚拟网络
接下来,使用 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 地址,以支持 Internet 连接。 使用 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 上的流量的规则。 这样就可以通过 Internet 连接到 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 的许可类型,通过 Azure 混合权益 (AHUB
) 在即用即付 (PAYG
)、自带许可之间进行选择。 有关许可的详细信息,请参阅许可模式。
若要将 SQL Server VM 注册到 SQL IaaS 代理扩展,请先使用 Register-AzResourceProvider 向资源提供程序注册订阅,然后使用 New-AzSqlVM 将 SQL Server VM 注册到 SQL IaaS 代理扩展:
# 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。
相关内容
创建虚拟机后,可以: