Создание SQL Server на виртуальной машине Azure с помощью Azure PowerShell

Применимо к:SQL Server на виртуальной машине Azure

В этом руководстве рассматриваются варианты использования PowerShell для подготовки SQL Server на виртуальной машине Azure. Упрощенный пример Azure PowerShell, основанный на значениях по умолчанию, см . в кратком руководстве по SQL Server на виртуальной машине Azure PowerShell.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Примечание.

В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Настройка подписки

  1. Откройте PowerShell и установите доступ к учетной записи Azure, выполнив команду Connect-AzAccount.

    Connect-AzAccount
    
  2. По запросу введите свои учетные данные. Используйте тот же адрес электронной почты и пароль, который вы используете для входа на портал Azure.

Определение переменных образа

Чтобы повторно использовать значения и упростить создание скриптов, начните с определения количества переменных. Изменяйте значения параметров по своему усмотрению, но учитывайте при этом ограничения именования, связанные с длиной имени и специальными знаками.

Расположение и группа ресурсов

Определите область данных и группу ресурсов, в которых нужно создать другие ресурсы для виртуальной машины.

Измените, а затем выполните эти командлеты, чтобы инициализировать переменные.

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

Свойства хранилища

Определите учетную запись хранения и тип хранилища для виртуальной машины.

Измените, а затем выполните приведенный ниже командлет, чтобы инициализировать переменные. Для производственных рабочих нагрузок рекомендуются SSD (цен. категория "Премиум").

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

Свойства сети

Определите свойства, используемые для сети на виртуальной машине.

  • Сетевой интерфейс
  • метод распределения TCP/IP;
  • имя виртуальной сети;
  • имя виртуальной подсети;
  • диапазон IP-адресов для виртуальной сети;
  • диапазон IP-адресов для подсети;
  • Метка общедоступного доменного имени

Измените, а затем выполните эти командлеты, чтобы инициализировать переменные.

$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

Свойства виртуальной машины

Задайте следующие свойства.

  • Virtual machine name
  • Имя компьютера
  • размер виртуальной машины;
  • имя диска операционной системы для виртуальной машины.

Измените, а затем выполните эти командлеты, чтобы инициализировать переменные.

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

Выбор образа SQL Server

Используйте следующие переменные, чтобы определить образ SQL Server, который будет применен для виртуальной машины.

  1. Сначала получите список всех образов SQL Server, выполнив команду Get-AzVMImageOffer. Эта команда позволяет вывести список текущих образов, доступных на портале Azure, и старых образов, которые устанавливаются только с помощью PowerShell:

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

    Примечание.

    SQL Server 2008 и SQL Server 2008 R2 не поддерживаются и больше не доступны в Azure Marketplace.

  2. В этом руководстве используйте следующие переменные, чтобы указать SQL Server 2022 в Windows Server 2022.

    $OfferName = "SQL2022-WS2022"
    $PublisherName = "MicrosoftSQLServer"
    $Version = "latest"
    
  3. Затем получите список выпусков, доступных для вашего предложения.

    Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    
  4. В этом руководстве используйте выпуск SQL Server 2022 Developer (SQLDEV). Лицензию Developer Edition для тестирования и разработки можно получить бесплатно. Вы оплачиваете только стоимость выполнения виртуальной машины.

    $Sku = "SQLDEV"
    

Создание или изменение группы ресурсов

Если используется модель развертывания с помощью Resource Manager, первый создаваемый объект — группа ресурсов. Чтобы создать группу ресурсов и входящие в нее ресурсы Azure, используйте командлет New-AzResourceGroup. Укажите переменные, инициализированные ранее для имени группы ресурсов и расположения.

Выполните следующий командлет, чтобы создать группу ресурсов.

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

Создание учетной записи хранилища

Виртуальной машине требуются ресурсы хранения для диска операционной системы, а также файлов данных и журналов SQL Server. Для упрощения создайте один диск для всех ресурсов. Позже можно будет подключить дополнительные диски, выполнив командлет Add-Azure Disk, чтобы поместить файлы данных и журналов SQL Server на выделенные диски. Чтобы создать стандартную учетную запись хранения в новой группе ресурсов, используйте командлет New-AzStorageAccount. Укажите переменные, инициализированные ранее для имени учетной записи хранения, SKU хранилища и расположения.

Выполните этот командлет, чтобы создать учетную запись хранения.

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

Совет

Создание учетной записи хранения может занять несколько минут.

Создание сетевых ресурсов

Виртуальной машине нужны сетевые ресурсы для подключения к сети.

  • Каждой виртуальной машине требуется виртуальная сеть.
  • Для виртуальной сети следует определить по крайней мере одну подсеть.
  • Для сетевого интерфейса следует определить общедоступный или частный IP-адрес.

Создание конфигурации подсети в виртуальной сети

Сначала создайте конфигурацию подсети для виртуальной сети. В рамках этого руководства мы создадим подсеть по умолчанию, используя командлет New-AzVirtualNetworkSubnetConfig. Укажите переменные, инициализированные ранее для имени подсети и префикса адреса.

Примечание.

Выполнив этот командлет, можно определить дополнительные свойства конфигурации подсети виртуальной сети. Однако это выходит за рамки данного руководства.

Выполните следующий командлет, чтобы создать конфигурацию виртуальной подсети.

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

Создание виртуальной сети

Далее с помощью командлета New-AzVirtualNetwork создайте виртуальную сеть в новой группе ресурсов. Укажите переменные, инициализированные ранее для имени, расположения и префикса адреса. Используйте конфигурацию подсети, определенную на предыдущем этапе.

Выполните следующий командлет, чтобы создать виртуальную сеть.

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

Создание общедоступного IP-адреса

Определив виртуальную сеть, необходимо настроить IP-адрес для подключения к виртуальной машине. В рамках этого руководства мы создадим общедоступный IP-адрес с применением динамического предоставления IP-адресов, чтобы обеспечить подключение к Интернету. Создайте общедоступный IP-адрес в новой группе ресурсов с помощью командлета New-AzPublicIpAddress. Укажите переменные, инициализированные ранее для имени, расположения, метода распределения и метки доменного имени DNS.

Примечание.

Выполнив этот командлет, можно определить дополнительные свойства общедоступного IP-адреса. Однако это выходит за рамки данного руководства. Кроме того, можно создать частный или статический адрес, но это также выходит за рамки данного руководства.

Выполните следующий командлет, чтобы создать общедоступный IP-адрес.

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

Создание группы безопасности сети

Чтобы защитить трафик виртуальной машины и SQL Server, создайте группу безопасности сети.

  1. Сначала создайте правило группы безопасности сети для удаленного рабочего стола (RDP), которое разрешает подключения с RDP.

    $NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
       -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
    
  2. Настройте правило группы безопасности сети, которое разрешает трафик через TCP-порт 1433. Это позволит подключаться к SQL Server через Интернет.

    $NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp `
       -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
    
  3. Создайте группу безопасности сети.

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

Создание сетевого интерфейса

Теперь все готово для создания сетевого интерфейса, который будет использовать виртуальная машина. Создайте сетевой интерфейс в своей новой группе ресурсов с помощью командлета New-AzNetworkInterface. Укажите определенные ранее имя, расположение, подсеть и общедоступный IP-адрес.

Выполните следующий командлет, чтобы создать сетевой интерфейс.

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

Настройка объекта виртуальной машины

После определения ресурсов хранения и сетевых ресурсов можно определить вычислительные ресурсы для виртуальной машины.

  • Укажите размер виртуальной машины и различные свойства операционной системы.
  • Укажите созданный ранее сетевой интерфейс.
  • Определите хранилище BLOB-объектов.
  • Укажите диск для операционной системы.

Создание виртуальной машины

Сначала укажем размер виртуальной машины. В рамках этого руководства выберите размер DS13. Создайте настраиваемый объект виртуальной машины с помощью командлета New-AzVMConfig. Укажите переменные, инициализированные ранее для имени и размера.

Выполните этот командлет, чтобы создать объект виртуальной машины.

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

Создание объекта учетных данных для хранения имени и пароля локального администратора

Чтобы задать свойства операционной системы для виртуальной машины, необходимо сначала предоставить учетные данные для учетной записи локального администратора в виде защищенной строки. Для этого используйте командлет Get-Credential.

Выполните следующий командлет. Необходимо ввести имя локального администратора виртуальной машины и пароль в окне запроса учетных данных PowerShell.

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

Определение свойств операционной системы для виртуальной машины

Теперь вы можете настроить свойства операционной системы виртуальной машины, выполнив командлет Set-AzVMOperatingSystem.

  • Укажите Windows в качестве типа операционной системы.
  • Настройте обязательную установку агента виртуальной машины.
  • Укажите, что командлет включает автоматическое обновление.
  • Укажите инициализированные ранее переменные для имени виртуальной машины, имени компьютера и учетных данных.

Выполните следующий командлет, чтобы задать свойства операционной системы для виртуальной машины.

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

Добавление сетевого интерфейса к виртуальной машине

Используйте командлет Add-AzVMNetworkInterface и определенную ранее переменную, чтобы добавить сетевой интерфейс.

Выполните следующий командлет, чтобы указать сетевой интерфейс для виртуальной машины.

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

Определение расположения хранилища BLOB-объектов для диска, используемого виртуальной машиной

Далее укажите расположение хранилища BLOB-объектов для диска виртуальной машины с помощью определенных ранее переменных.

Выполните следующий командлет, чтобы задать расположение хранилища BLOB-объектов.

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

Определение свойств диска операционной системы для виртуальной машины

Затем определите свойства диска операционной системы для виртуальной машины с помощью командлета Set-AzVMOSDisk.

  • Укажите для виртуальной машины операционную систему, которая будет запускаться из образа.
  • Для кэширования установите параметр "только для чтения" (так как SQL Server установлен на этом же диске).
  • Укажите переменные, инициализированные ранее для имени виртуальной машины и диска операционной системы.

Выполните следующий командлет, чтобы задать свойства диска операционной системы для виртуальной машины.

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

Определение образа платформы для виртуальной машины

Последний этап конфигурации — определение образа платформы для виртуальной машины. В рамках этого руководства используется последний образ SQL Server 2016 CTP-версии. Чтобы использовать образ согласно значениям переменных, определенных ранее, примените командлет Set-AzVMSourceImage.

Выполните следующий командлет, чтобы указать образ платформы для виртуальной машины.

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

Создание виртуальной машины SQL

Теперь, по завершении конфигурации, все готово для создания виртуальной машины. Для этого используйте командлет New-AzVM и уже определенные переменные.

Совет

Запуск виртуальной машины может занять несколько минут.

Выполните следующий командлет, чтобы создать виртуальную машину.

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

Теперь виртуальная машина создана.

Примечание.

Если вы получите сообщение об ошибке диагностики загрузки, ее можно пропустить. Стандартная учетная запись хранения создается для диагностики загрузки, так как для диска виртуальной машины указана учетная запись хранилища класса Premium.

Установите расширение агента IaaS для SQL

Виртуальные машины SQL Server поддерживают функции автоматизированного управления при наличии расширения агента IaaS SQL Server. Чтобы зарегистрировать SQL Server с помощью расширения, выполните команду New-AzSqlVM после создания виртуальной машины. Укажите тип лицензии для виртуальной машины SQL Server, выбрав одну из них с помощью Преимущества гибридного использования Azure, — с оплатой по мере использования или собственную лицензию. Дополнительные сведения о лицензировании см. здесь.

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

Есть три способа регистрации в расширении:

Останов или удаление виртуальной машины

Если не требуется, чтобы виртуальная машина работала постоянно, можно избежать ненужных затрат, останавливая ее, когда она не используется. С помощью следующей команды можно остановить виртуальную машину, оставив ее доступной для использования в будущем.

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

С помощью команды Remove-AzResourceGroup вы можете удалить все ресурсы, связанные с виртуальной машиной, без возможности восстановления. Это также приведет к окончательному удалению самой виртуальной машины, поэтому используйте указанную команду с осторожностью.

Пример сценария

Файл ниже содержит полный сценарий PowerShell для этого руководства. Предполагается, что вы уже настроили подписку Azure для использования с командами Connect-AzAccount и 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> 

Следующие шаги

После создания виртуальной машины можно: