余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

如何使用 Azure PowerShell 在 Azure 虚拟机上预配 SQL Server

xiyangw 2022-11-25 12:02 16 浏览 0 评论

本指南介绍使用 PowerShell 在 Azure 虚拟机 (VM) 上预配 SQL Server 选项。 有关依赖于默认值的简化的 Azure PowerShell 示例,请参阅 SQL VM Azure PowerShell 快速入门。

如果没有 Azure 订阅,请在开始前创建一个试用订阅。

如何使用 Azure PowerShell 在 Azure 虚拟机上预配 SQL Server

注意

本文使用 Azure Az PowerShell 模块,这是与 Azure 交互时推荐使用的 PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。

配置订阅

  1. 打开 PowerShell,通过运行 Connect-AzAccount 命令建立对 Azure 帐户的访问。
  2. Connect-AzAccount -Environment AzureChinaCloud
  3. 在系统提示时输入凭据。 使用登录 Azure 门户时所用的相同电子邮件和密码。

定义映像变量

若要重复使用值并简化脚本创建,请先定义一些变量。 根据需要更改参数值,但在修改提供的值时,请注意与名称长度和特殊字符相关的命名限制。

位置和资源组

定义数据区域,以及要在其中创建其他 VM 资源的资源组。

根据需要进行修改,然后运行这些 cmdlet 以初始化这些变量。

$Location = "chinaeast"
$ResourceGroupName = "sqlvm2"

存储属性

定义存储帐户,以及虚拟机使用的存储类型。

根据需要进行修改,然后运行以下 cmdlet 以初始化这些变量。 我们建议将高级 SSD 用于生产工作负载。

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

网络属性

在虚拟机中定义网络使用的属性。

  • 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 映像。

使用以下变量来定义要用于虚拟机的 SQL Server 映像。

  1. 首先,使用 Get-AzVMImageOffer 命令列出所有 SQL Server 影响产品/服务。 此命令将列出 Azure 门户中当前提供的映像,以及只能通过 PowerShell 安装的早期影像:
  2. Get-AzVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
  3. 对于本教程,请使用以下变量指定 Windows Server 2016 上的 SQL Server 2017。
  4. $OfferName = "SQL2017-WS2016" $PublisherName = "MicrosoftSQLServer" $Version = "latest"
  5. 接下来,列出套餐的可用版本。
  6. Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
  7. 对于本教程,请使用 SQL Server 2017 Developer Edition (SQLDEV)。 Developer Edition 针对测试和开发自由授权,用户只需支付运行 VM 的成本。
  8. $Sku = "SQLDEV"

创建资源组

若使用 Resource Manager 部署模型,创建的第一个对象就是资源组。 使用 New-AzResourceGroup cmdlet 创建 Azure 资源组及其资源。 指定前面初始化的资源组名称和位置变量。

运行此 cmdlet 来创建新的资源组。

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

创建存储帐户

虚拟机需要使用存储资源来存储操作系统磁盘及 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 来创建虚拟子网配置。

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

创建虚拟网络

接下来,使用 New-AzVirtualNetwork cmdlet 在新资源组中创建虚拟网络。 指定前面初始化的名称、位置和地址前缀变量。 使用在上一步骤中定义的子网配置。

运行此 cmdlet 来创建虚拟网络。

$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 地址。

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

创建网络安全组

为了保护 VM 和 SQL Server 流量,请创建网络安全组。

  1. 首先,为远程桌面 (RDP) 创建网络完全组规则,以允许 RDP 连接。
  2. $NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp ` -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * ` -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
  3. 配置一个允许 TCP 端口 1433 上的流量的网络安全组规则。 这样就可以通过 Internet 连接到 SQL Server。
  4. $NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule" -Protocol Tcp ` -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * ` -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
  5. 创建网络安全组。
  6. $Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName ` -Location $Location -Name $NsgName ` -SecurityRules $NsgRuleRDP,$NsgRuleSQL

创建网络接口

现在,可为虚拟机创建网络接口。 使用 New-AzNetworkInterface cmdlet 在新资源组中创建网络接口。 指定前面定义的名称、位置、子网和公共 IP 地址。

运行此 cmdlet 来创建网络接口。

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

配置 VM 对象

现已定义存储和网络资源,接下来可以定义虚拟机的计算资源。

  • 指定虚拟机大小和各项操作系统属性。
  • 指定前面创建的网络接口。
  • 定义 Blob 存储。
  • 指定操作系统磁盘。

创建 VM 对象

首先指定虚拟机大小。 本教程指定了 DS13。 使用 New-AzVMConfig cmdlet 创建可配置的虚拟机对象。 指定前面初始化的名称和大小变量。

运行此 cmdlet 来创建虚拟机对象。

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

创建一个凭据对象,以保留本地管理员凭据的名称和密码

必须先提供本地管理员帐户的凭据作为安全字符串,才能设置虚拟机的操作系统属性。 若要实现此目的,可使用 Get-Credential cmdlet。

运行以下 cmdlet。 需要在 PowerShell 凭据请求窗口中键入 VM 的本地管理员用户名和密码。

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

设置虚拟机的操作系统属性

现在,可以使用 Set-AzVMOperatingSystem cmdlet 设置虚拟机的操作系统属性。

  • 将操作系统类型设置为 Windows。
  • 要求安装虚拟机代理。
  • 指定 cmdlet 要启用自动更新。
  • 指定前面初始化的虚拟机名称、计算机名和凭据变量。

运行此 cmdlet 来设置虚拟机的操作系统属性。

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

将网络接口添加到虚拟机

接下来,运行 Add-AzVMNetworkInterface cmdlet,以使用前面定义的变量来添加网络接口。

运行此 cmdlet 来设置虚拟机的网络接口。

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

为虚拟机要使用的磁盘设置 Blob 存储位置

接下来,使用前面定义的变量设置 VM 磁盘的 Blob 存储位置。

运行此 cmdlet 来设置 Blob 存储位置。

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

设置虚拟机的操作系统磁盘属性

接下来,使用 Set-AzVMOSDisk cmdlet 设置虚拟机的操作系统磁盘属性。

  • 指定来自映像的虚拟机的操作系统。
  • 将缓存设置为只读(因为 SQL Server 将安装在同一磁盘上)。
  • 指定前面初始化的 VM 名称和操作系统磁盘变量。

运行此 cmdlet 来设置虚拟机的操作系统磁盘属性。

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

指定虚拟机的平台映像

最后一个配置步骤是指定虚拟机的平台映像。 本教程使用最新的 SQL Server 2016 CTP 映像。 运行 Set-AzVMSourceImage cmdlet,以通过前面定义的变量来使用此映像。

运行此 cmdlet 来指定虚拟机的平台映像。

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

创建 SQL VM

完成配置步骤后,接下来可以创建虚拟机。 运行 New-AzVM cmdlet,以使用你定义的变量来创建虚拟机。

提示

创建 VM 可能需要几分钟时间。

运行此 cmdlet 来创建虚拟机。

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

虚拟机已创建。

注意

如果收到有关启动诊断的错误,可将其忽略。 由于为虚拟机磁盘指定的存储帐户是高级存储帐户,因此会创建标准存储帐户用于启动诊断。

安装 SQL IaaS 代理

若要获取门户集成和 SQL VM 功能,必须安装 SQL Server IaaS 代理扩展。 若要在新 VM 上安装该代理,请在创建 VM 后运行以下命令。

Set-AzVMSqlServerExtension -ResourceGroupName $ResourceGroupName -VMName $VMName -name "SQLIaasExtension" -version "2.0" -Location $Location

停止或删除 VM

如果不需要让 VM 持续运行,可以在不使用它时将它停止,以免产生不必要的费用。 以下命令可停止 VM,但会保留它供将来使用。

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

还可以使用 Remove-AzResourceGroup 命令永久删除与虚拟机关联的所有资源。 这样做也会永久删除虚拟机,因此请小心使用此命令。

示例脚本

以下脚本包含本教程的完整 PowerShell 脚本。 假设你已经设置了 Azure 订阅以与 Connect-AzAccount-Environment AzureChinaCloud 和 Select-AzSubscription 命令一起使用。

# Variables

## Global
$Location = "chinaeast"
$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"

# Sign in 
Connect-AzAccount -Environment AzureChinaCloud

# 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 Extension, and choose the license type
New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Loca

相关推荐

Vue的框架(了解)

前端MVC设计模式MVC设计模式,其实就是将前端实现某个业务的所有代码划分为三部分Model:模型,指数据模型,这个数据一般来自于服务器View:视图,指页面标签内容Controller:控制...

Vue.js实战 第五章练习一

练习要求:在原有表格基础上,新增一项是否选中该商品的功能,总价变为只计算选中商品的总价,同时提供一个全选的按钮。实现思路:按照vue数据和dom元素双向绑定的特性,定义allCheckStatus变量...

Vue基础到进阶教程之class和style绑定

关于class和style我们并不陌生,这个在学习css的时候就是家常便饭了,操作元素的class列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用v-bind处理它们,...

深入Vue 必学高阶组件 HOC「进阶篇」

作者:ssh转发连接:https://mp.weixin.qq.com/s/seKoLSIMtTd1sU4uDrgZCA前言高阶组件这个概念在React中一度非常流行,但是在Vue的社区里讨论...

周末大礼包,23道高质量中级前端面试题。金九银十,建议收藏

这套面试题考察的内容比较常见,涉及到JavaScript、ES6、CSS、Vue、简单算法,浏览器相关知识等。题目列表1.JavaScript的数据类型有哪些2.什么是同源策略3.跨域的方法...

vue3.0-摒弃Object.defineProperty,基于 Proxy 的观察者机制

写在前面:11月16日早上,Vue.js的作者尤大大在VueToronto的主题演讲中预演了Vue.js3.0的一些新特性,其中一个很重要的改变就是Vue3将使用ES6的Proxy作...

程序员都必掌握的前端教程之VUE基础教程(七)

阅读本文约需要10分钟,您可以先关注我们,避免下次无法找到。本篇文章成哥继续带大家来学习前端VUE教程,今天主要讲解VUE的表单处理等知识点。下面我们就一起来学习该块内容吧!01简介在日常开发中,我...

web前端开之网站搭建框架之vue详解

网站搭建框架之vueVue是web前端快速搭建网站的框架之一。它与jQuery有所不同,是以数据驱动web界面(以操作数据改变页面,而jQuery是以操作节点来改变页面),同时,vue还实现了数据的双...

vue3.0尝鲜-基于 Proxy 的观察者机制探索

Vue.js的作者尤大大在VueToronto的主题演讲中预演了Vue.js3.0的一些新特性,其中一个很重要的改变就是Vue3将使用ES6的Proxy作为其观察者机制,取代之前使用...

TypeScript 设计模式之观察者模式

一、模式介绍1.背景介绍在软件系统中经常碰到这类需求:当一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。这是建立一种「对象与对象之间的依赖关系」,一个对象发生改变时将「自动通知其他...

vue面试3

1.单页面应用与多页面应用的去别2.简述一下Sass、Less,且说明区别?他们是动态的样式语言,是CSS预处理器,CSS上的一种抽象层。他们是一种特殊的语法/语言而编译成CSS。变量符不一样,les...

VUE v-bind 数据绑定

动态的绑定一个或多个attribute,也可以是组件的prop。缩写::或者.(当使用.prop修饰符)期望:any(带参数)|Object(不带参数)参数:attrOrP...

vue初学习之自定义选择框实现

v-model简单介绍在使用vue的过程中会经常用到input和textarea这类表单元素,vue对于这些元素的数据绑定和我们以前经常用的jQuery有些区别。vue使用v-model实现这些标签...

Vue实现拖拽穿梭框功能四种方式

一、使用原生js实现拖拽打开视频讲解更加详细Vue实现拖拽穿梭框功能的四种方式_哔哩哔哩_bilibili<html><head><meta...

Vue3.x setup 语法糖实现props双向绑定

1.背景为了封装一下Element-Plus的分页插件,需要实现父子组件之间的传值。2.父组件<scriptsetuplang="ts">letqueryPa...

取消回复欢迎 发表评论: