Поделиться через


Руководство по созданию виртуальной машины SQL Server с помощью PowerShell

Область применения: SQL Server на виртуальной машине Azure

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

Необходимые компоненты

Чтобы завершить работу с этим руководством, необходимо следующее:

Примечание.

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

Определение переменных

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

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

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

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

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

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

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

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

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

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

Примечание.

Имя учетной записи хранения должно быть от 3 до 24 символов в длину и использовать только цифры и строчные буквы, поэтому убедитесь, что имя группы ресурсов не имеет специальных символов или измените имя учетной записи хранения, чтобы использовать другое имя, отличное от $ResourceGroupName.

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

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

  • Сетевой интерфейс
  • метод распределения 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, который недоступен в портал Azure с помощью PowerShell.

Используйте следующие переменные, чтобы определить образ 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. Перечислите доступные выпуски для вашего предложения с помощью Get-AzVMImageSku.

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

В этом руководстве используйте выпуск SQL Server 2022 Developer (SQLDEV-GEN2) в Windows Server 2022. Выпуск Developer бесплатно лицензирован для тестирования и разработки, и вы оплачиваете только затраты на запуск виртуальной машины:

$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 и установите доступ к учетной записи Azure, выполнив команду Connect-AzAccount , и задайте контекст подписки с помощью Set-AzContext. По запросу введите свои учетные данные. Используйте тот же адрес электронной почты и пароль, который вы используете для входа на портал Azure.

После установки контекста подписки создается первый объект, который вы создаете, — это группа ресурсов. Используйте команду Connect-AzAccount, чтобы подключиться к Azure и задать контекст подписки с помощью Set-AzContext. Чтобы создать группу ресурсов и входящие в нее ресурсы Azure, используйте командлет New-AzResourceGroup. Укажите переменные, инициализированные ранее для имени группы ресурсов и расположения.

Выполните этот командлет, чтобы подключиться к 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, чтобы поместить файлы данных и журналов SQL Server на выделенные диски. Чтобы создать стандартную учетную запись хранения в новой группе ресурсов, используйте командлет New-AzStorageAccount. Укажите переменные, инициализированные ранее для имени учетной записи хранения, SKU хранилища и расположения.

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

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

Совет

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

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

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

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

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

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

Примечание.

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

Чтобы защитить трафик виртуальной машины и 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. Укажите определенные ранее имя, расположение, подсеть и общедоступный IP-адрес.

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

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

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

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

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

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

Чтобы создать виртуальную машину SQL Server, сначала создайте объект учетных данных, а затем создайте виртуальную машину.

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

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

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

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

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

Теперь вы готовы задать свойства операционной системы виртуальной машины с помощью New-AzVMConfig, создать виртуальную машину с помощью New-AzVM и использовать командлет Add-AzVMNetworkInterface для добавления сетевого интерфейса с помощью переменной, определенной ранее.

Пример скрипта выполняет следующие действия:

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

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

# 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

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

Примечание.

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

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

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

Чтобы зарегистрировать виртуальную машину SQL Server с расширением агента IaaS SQL, сначала зарегистрируйте подписку с помощью Register-AzResourceProvider, а затем зарегистрируйте виртуальную машину SQL Server с расширением агента IaaS SQL с помощью New-AzSqlVM:


# 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

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

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

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

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

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

Полный сценарий

Полный скрипт PowerShell, предоставляющий комплексный интерфейс, см. в статье "Развертывание SQL Server на виртуальной машине Azure с помощью PowerShell".

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