Развертывание виртуальных машин в Azure с помощью Azure Resource Manager — API PowerShell (часть 1)
API Azure
В настоящее время в Azure есть две разные модели развертывания: управление службами (теперь также называемая «классической») и управление ресурсами. Обе модели используют REST API для всех интерфейсов. Портал Azure, Azure PowerShell, интерфейс командной строки Azure и другой программный доступ к Azure используют API REST.
Управление службами — это модель развертывания, изначально использовавшаяся Azure и используемая при подключении к https://manage.windowsazure.com. Он также используется при разработке сценариев PowerShell с помощью модуля Azure PowerShell. Управление ресурсами — это новейшая модель развертывания, которую вы используете при подключении к https://portal.azure.com. Он также используется при создании сценариев PowerShell с помощью модулей AzureRM PowerShell.
Благодаря модели быстрой разработки Azure новые функции и исправления ошибок выпускаются ежемесячно. Сведения в этой статье основаны на обновлении Azure PowerShell 1.02, выпущенном в декабре 2015 г.
Требования к развертыванию сценариев PowerShell
Прежде чем вы сможете развернуть виртуальные машины в подписке Azure с помощью Azure PowerShell, вам необходимо сделать следующее:
- Установите последние модули Azure PowerShell.
- Войдите в учетную запись Azure
- Выберите подписку Azure для таргетинга
- Настройте виртуальные сети в подписке Azure.
В этой статье предполагается, что вы уже выполнили эти шаги до запуска сценариев, представленных в следующих разделах.
Модель установки ВМ
Основное различие между моделями развертывания управления услугами и управления ресурсами для виртуальных машин заключается в требованиях модульности ARM. В разделе «Управление службами» при создании виртуальной машины автоматически создается виртуальная машина с одним сетевым адаптером, общедоступным IP-адресом, частным IP-адресом, подключенным к подсети и связанным с облачной службой с балансировщиком нагрузки, имеющим конечные точки. автоматически определяется для подключений к удаленному рабочему столу и WinRM. По сути, это включает виртуальную машину, настроенную с сетевым подключением и внешними конечными точками.
В ARM каждый компонент представляет собой строительный блок, который необходимо собрать. Для развертывания виртуальной машины с помощью API-интерфейсов ARM необходимо создать виртуальную машину, сетевой адаптер, подключенный к подсети с частным IP-адресом, общедоступным IP-адресом и общедоступными конечными точками. Наконец, вы должны собрать эти компоненты вместе как часть развертывания виртуальной машины.
Конечно, у каждой модели есть свои плюсы и минусы. Управление службами выполняет сборку за вас, но может включать компоненты, которые на самом деле могут не требоваться. Кроме того, собранная группа объектов управляется как единый объект. Управление ресурсами требует, чтобы вы выполнили сборку, но позволяет более эффективно выбирать строительные блоки. Это также позволяет управлять каждым строительным блоком отдельно.
Создание виртуальной машины
Все объекты в модели развертывания Azure Resource Manager должны быть помещены в группу ресурсов. Командлету , который создает новую группу ресурсов, требуются два параметра, в том числе имя группы ресурсов и расположение региона Azure, в котором вы хотите ее создать. Обычно это первый объект, который вы создаете.
# Создайте переменную для хранения имени группы ресурсов
$RGPName= ”VMResourceGroup”
# Создайте переменную для хранения региона Azure
$location= ”Западная часть США”
# Создаем группу ресурсов
New-AzureRmResourceGroup -Name $RGPName -Location $location
После этого шага любые дополнительные строительные блоки для виртуального можно разместить в той же группе ресурсов.
Виртуальная машина создается на основе образа виртуального жесткого диска, который можно выбрать из существующих готовых образов галереи Azure или создать из пользовательского образа, загруженного в учетную запись хранения в Azure. Независимо от выбранного метода учетная запись хранения требуется для размещения виртуальных жестких дисков для виртуальной машины. Учетная запись хранения должна находиться в том же расположении Azure, что и виртуальная машина, поэтому вы можете использовать одни и те же переменные для расположения и имени группы ресурсов. Следует помнить, что в именах учетных записей хранения должны использоваться все буквы нижнего регистра и они должны состоять только из букв и цифр. Вам также необходимо указать тип модели хранения, которую вы будете использовать: Standard_LRS, Standard_GRS, Standard_RAGRS или Premium_LRS.
# Создайте переменную для хранения имени учетной записи хранения
$STAName= ”vmstorageaccount”
# Создайте переменную для хранения типа используемой модели хранения
$STAType= "Стандарт_GRS"
# Создайте учетную запись хранения и сохраните ссылку на переменную
$STA = New-AzureRmStorageAccount -Name $STAName -ResourceGroupName $RGPName –Type $STAType -Location $location
Перед созданием виртуальной машины для виртуальной машины должен быть определен сетевой адаптер. Сетевые адаптеры должны быть подключены к подсети в Azure, а затем при необходимости им может быть назначен общедоступный IP-адрес, доступный из Интернета. По умолчанию при подключении сетевого адаптера к подсети частный IP-адрес динамически назначается DHCP-сервером Azure. Сетевому адаптеру можно назначить статический частный адрес. Этот статический адрес является просто свободным адресом из пула адресов подсети.
В этом примере мы назначаем адрес из подсети Subnet1 и делаем его статическим адресом. Публичный IP-адрес также создается и назначается сетевому интерфейсу. Чтобы назначить сетевой адаптер подсети, требуется идентификатор ресурса подсети. Вы можете получить идентификатор ресурса из запроса виртуальной сети для определенной подсети. Поэтому ссылка на подсеть тоже получается.
# Создайте переменную для хранения имени сетевого адаптера
$NICName="VM1NIC"
# Создайте переменную для хранения статического IP-адреса, который будет назначен сетевой карте.
$статическийIP= "10.0.0.4"
# Создайте переменную для хранения имени виртуальной сети
$vNetName= «Виртуальная сеть1»
# Создайте переменную для хранения имени подсети
$SubnetName= «Подсеть1»
# Получить ссылку на виртуальную сеть, в которой указана целевая подсеть
$vNet = Get-AzureRMVirtualNetwork -ResourceGroupName $RGPName -Name $vNetName
# Получить ссылку на подсеть для подключения сетевой карты
$Subnet = $vNet.Subnets | Где-Объект {$_.Name -eq $SubnetName}
# Создайте общедоступный объект IP-адреса, который можно назначить сетевой карте
$pubIP = New-AzureRmPublicIpAddress -Name $NICName -ResourceGroupName $RGPName -Location $location -AllocationMethod Dynamic
# Создайте сетевую карту, подключенную к подсети, с общедоступным IP-адресом и статическим частным IP-адресом.
$NIC = New-AzureRmNetworkInterface -Name $NICName -ResourceGroupName $RGPName -Location $location -SubnetId $Subnet.Id -PublicIpAddressId $pubIP.Id -PrivateIpAddress $staticIP
Теперь, когда учетная запись хранения и сетевой адаптер созданы, следующим шагом будет создание виртуальной машины. Однако прежде чем вы сможете фактически создать виртуальную машину, вы должны указать информацию о конфигурации. Для этого вы сначала создаете объект конфигурации, в котором будет храниться вся информация о конфигурации.
# Создайте переменную, которая будет содержать имя виртуальной машины
$vmName="ВМ1"
# Создадим переменную, в которой будет храниться размер ВМ
$vmSize="Стандарт_DS1"
# Создайте объект конфигурации виртуальной машины и сохраните ссылку на него
$vm = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize
Теперь, когда объект конфигурации виртуальной машины создан, ему можно назначить информацию о конфигурации. Это включает в себя определение операционной системы, базового образа галереи и ранее созданного сетевого адаптера, который вы хотите назначить виртуальной машине. При желании вы также можете указать имя для виртуального жесткого диска операционной системы. Если вы его не укажете, Azure автоматически назначит имя.
Чтобы определить изображение галереи, необходимо указать издателя, предложение и артикул для изображения галереи. Вы можете обратиться к следующей статье, чтобы понять, как определить доступные значения для использования: https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/#powershell.
Для этого примера в информации о конфигурации указан образ Windows Server 2012 R2 Datacenter.
# Создайте переменную для хранения имени издателя
$pubName = "MicrosoftWindowsServer"
# Создадим переменную для хранения названия оффера
$offerName = «WindowsServer»
# Создайте переменную для хранения названия SKU
$skuName = «2012-R2-Центр обработки данных»
# Создайте переменную для хранения имени диска ОС
$diskName = «VM1OSDisk»
# Запрашивать учетные данные, которые будут использоваться для пароля локального администратора для виртуальной машины
$cred = Get-Credential -Message «Введите имя и пароль учетной записи локального администратора».
# Назначить операционную систему конфигурации ВМ
$vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
# Назначить образ галереи конфигурации виртуальной машины
$vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName $pubName -Offer $offerName -Skus $skuName -Последняя версия
# Назначить сетевую карту конфигурации виртуальной машины
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $NIC.Id
# Создайте URI для хранения виртуального жесткого диска ОС
$OSDiskUri = $STA.PrimaryEndpoints.Blob.ToString() + «vhds/» + $diskName + «.vhd»
# [необязательно] Назначьте имя диска ОС и расположение для конфигурации виртуальной машины
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $diskName -VhdUri $OSDiskUri -CreateOption fromImage
Когда конфигурация виртуальной машины определена, фактическая виртуальная машина создается с помощью командлета New-AzureRMVM с информацией о конфигурации, передаваемой в качестве аргумента.
New-AzureRmVM -ResourceGroupName $RGPName -Location $location -VM $vm
Вы можете проверить состояние подготовки с помощью Get-AzureRMVM, передав ему параметры группы ресурсов и имени виртуальной машины. Это извлекает информацию о конфигурации виртуальной машины. Когда значение ProvisioningState показывает «Succeeded», это означает, что создание виртуальной машины успешно завершено, и виртуальная машина должна находиться в рабочем состоянии.
Get-AzureRmVM -ResourceGroupName $RGPName -Name $vmName
Вывод
В первой части этой статьи вы узнали, как создать и подготовить виртуальную машину Azure с помощью API управления ресурсами и командлетов PowerShell. Во второй части этой статьи вы узнаете, как выполнить те же действия с помощью шаблонов Azure Resource Manager.