Создание виртуальных машин DevTest Labs с помощью Azure PowerShell
В этой статье показано, как создать виртуальную машину Azure DevTest Labs с помощью Azure PowerShell. Для автоматизации создания виртуальных машин лаборатории можно использовать скрипты PowerShell.
Предварительные требования
Чтобы выполнить действия, описанные в этой статье, требуется следующее:
- Доступ к лаборатории в DevTest Labs. Создайте лабораторию или используйте существующую лабораторию.
- Установите Azure PowerShell. Установите Azure PowerShell или используйте Azure Cloud Shell на портале Azure.
Скрипт PowerShell для создания виртуальной машины
Командлет PowerShell Invoke-AzResourceAction вызывает действие createEnvironment
с идентификатором ресурса лаборатории и параметрами виртуальной машины. Параметры находятся в хэш-таблице, которая содержит все свойства виртуальной машины. Свойства каждого типа виртуальной машины отличаются. Чтобы узнать свойства для требуемого типа виртуальной машины, обратитесь к разделу Получение свойств виртуальной машины.
Этот пример скрипта создает виртуальную машину Windows Server 2019 Datacenter. Пример также содержит свойства для добавления второго диска данных в dataDiskParameters
.
[CmdletBinding()]
Param(
[Parameter(Mandatory = $false)] $SubscriptionId,
[Parameter(Mandatory = $true)] $LabResourceGroup,
[Parameter(Mandatory = $true)] $LabName,
[Parameter(Mandatory = $true)] $NewVmName,
[Parameter(Mandatory = $true)] $UserName,
[Parameter(Mandatory = $true)] $Password
)
pushd $PSScriptRoot
try {
if ($SubscriptionId -eq $null) {
$SubscriptionId = (Get-AzContext).Subscription.SubscriptionId
}
$API_VERSION = '2016-05-15'
$lab = Get-AzResource -ResourceId "/subscriptions/$SubscriptionId/resourceGroups/$LabResourceGroup/providers/Microsoft.DevTestLab/labs/$LabName"
if ($lab -eq $null) {
throw "Unable to find lab $LabName resource group $LabResourceGroup in subscription $SubscriptionId."
}
$virtualNetwork = @(Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs/virtualnetworks' -ResourceName $LabName -ResourceGroupName $lab.ResourceGroupName -ApiVersion $API_VERSION)[0]
#The preceding command puts the VM in the first allowed subnet in the first virtual network for the lab.
#If you need to use a specific virtual network, use | to find the network. For example:
#$virtualNetwork = @(Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs/virtualnetworks' -ResourceName $LabName -ResourceGroupName $lab.ResourceGroupName -ApiVersion $API_VERSION) | Where-Object Name -EQ "SpecificVNetName"
$labSubnetName = $virtualNetwork.properties.allowedSubnets[0].labSubnetName
#Prepare all the properties needed for the createEnvironment call.
# The properties are slightly different depending on the type of VM base.
# The virtual network setup might also affect the properties.
$parameters = @{
"name" = $NewVmName;
"location" = $lab.Location;
"properties" = @{
"labVirtualNetworkId" = $virtualNetwork.ResourceId;
"labSubnetName" = $labSubnetName;
"notes" = "Windows Server 2019 Datacenter";
"osType" = "windows"
"expirationDate" = "2022-12-01"
"galleryImageReference" = @{
"offer" = "WindowsServer";
"publisher" = "MicrosoftWindowsServer";
"sku" = "2019-Datacenter";
"osType" = "Windows";
"version" = "latest"
};
"size" = "Standard_DS2_v2";
"userName" = $UserName;
"password" = $Password;
"disallowPublicIpAddress" = $true;
"dataDiskParameters" = @(@{
"attachNewDataDiskOptions" = @{
"diskName" = "adddatadisk"
"diskSizeGiB" = "1023"
"diskType" = "Standard"
}
"hostCaching" = "ReadWrite"
})
}
}
#The following line has the same effect as invoking the
# https://azure.github.io/projects/apis/#!/Labs/Labs_CreateEnvironment REST API
Invoke-AzResourceAction -ResourceId $lab.ResourceId -Action 'createEnvironment' -Parameters $parameters -ApiVersion $API_VERSION -Force -Verbose
}
finally {
popd
}
Сохраните предыдущий скрипт как файл Create-LabVirtualMachine.ps1. Запустите этот скрипт, используя следующую команду: Введите свои значения вместо заполнителей.
.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'
Получение свойств виртуальной машины
В этом разделе показано, как получить определенные свойства типа виртуальной машины, которую требуется создать. Свойства можно получить из шаблона Azure Resource Manager (ARM) на портале Azure или путем вызова REST API Azure DevTest Labs.
Получение свойств виртуальной машины с помощью портала Azure
При создании виртуальной машины на портале Azure создается шаблон Azure Resource Manager (ARM), в котором отображаются свойства этой виртуальной машины. Выбрав базу виртуальной машины, вы увидите шаблон ARM и получите ее свойства без фактического создания виртуальной машины. Это самый простой способ получить описание виртуальной машины в формате JSON, если у вас еще нет виртуальной машины лаборатории этого типа.
На портале Azure на странице Обзор лаборатории выберите Добавить на верхней панели инструментов.
На странице Выбрать базу выберите требуемый тип виртуальной машины. В зависимости от параметров лаборатории база виртуальной машины может представлять собой образ Azure Marketplace, пользовательский образ, формулу или среду.
На странице Создать ресурс лаборатории при необходимости выберите Добавить артефакты и настройте другие требуемые параметры на вкладках Основные параметры и Дополнительные параметры.
В нижней части вкладки Дополнительные параметры выберите Просмотреть шаблон ARM.
На странице Просмотр шаблона Azure Resource Manager просмотрите шаблон JSON для создания виртуальной машины. Раздел resources содержит свойства виртуальной машины.
Например, приведенный раздел
resources
содержит свойства виртуальной машины Windows Server 2022 Datacenter."resources": [ { "apiVersion": "2018-10-15-preview", "type": "Microsoft.DevTestLab/labs/virtualmachines", "name": "[variables('vmName')]", "location": "[resourceGroup().location]", "properties": { "labVirtualNetworkId": "[variables('labVirtualNetworkId')]", "notes": "Windows Server 2022 Datacenter: Azure Edition Core", "galleryImageReference": { "offer": "WindowsServer", "publisher": "MicrosoftWindowsServer", "sku": "2022-datacenter-azure-edition-core", "osType": "Windows", "version": "latest" }, "size": "[parameters('size')]", "userName": "[parameters('userName')]", "password": "[parameters('password')]", "isAuthenticationWithSshKey": false, "labSubnetName": "[variables('labSubnetName')]", "disallowPublicIpAddress": true, "storageType": "Standard", "allowClaim": false, "networkInterface": { "sharedPublicIpAddressConfiguration": { "inboundNatRules": [ { "transportProtocol": "tcp", "backendPort": 3389 } ] } } } } ],
Скопируйте и сохраните шаблон для использования в будущей автоматизации PowerShell и перенесите свойства в скрипт PowerShell для создания виртуальной машины.
Получение свойств виртуальной машины с помощью REST API Azure DevTest Labs
Вы можете также вызвать REST API DevTest Labs, чтобы получить свойства существующих виртуальных машин лаборатории. Эти свойства можно использовать для создания дополнительных виртуальных машин лаборатории того же типа.
- На странице со списком виртуальных машин выберите Попробовать над первым блоком кода.
- На странице Попробовать REST API:
- В поле labName введите имя лаборатории.
- В поле labResourceGroup введите имя группы ресурсов лаборатории.
- В поле SubscriptionId выберите подписку Azure лаборатории.
- Выберите Запуск.
- В разделе Ответ в блоке Текст просмотрите свойства всех существующих виртуальных машин в лаборатории.
Дата окончания срока действия виртуальной машины
В учебных, демонстрационных и пробных сценариях можно избежать ненужных затрат, удалив виртуальные машины автоматически в определенный день. Свойство expirationDate
виртуальной машины можно задать при ее создании. Скрипт PowerShell для создания виртуальной машины, приведенный ранее в этой статье, задает дату окончания срока действия в разделе properties
:
"expirationDate": "2022-12-01"
Вы можете также задать даты истечения срока действия существующих виртуальных машин с помощью PowerShell. Следующий скрипт PowerShell задает дату окончания срока действия для существующей виртуальной машины лаборатории, если она еще не имеет даты окончания срока действия.
# Enter your own values:
$subscriptionId = '<Lab subscription Id>'
$labResourceGroup = '<Lab resource group>'
$labName = '<Lab name>'
$VmName = '<VM name>'
$expirationDate = '<Expiration date, such as 2022-12-16>'
# Sign in to your Azure account
Select-AzSubscription -SubscriptionId $subscriptionId
$VmResourceId = "subscriptions/$subscriptionId/resourcegroups/$labResourceGroup/providers/microsoft.devtestlab/labs/$labName/virtualmachines/$VmName"
$vm = Get-AzResource -ResourceId $VmResourceId -ExpandProperties
# Get the Vm properties
$VmProperties = $vm.Properties
# Set the expirationDate property
If ($VmProperties.expirationDate -eq $null) {
$VmProperties | Add-Member -MemberType NoteProperty -Name expirationDate -Value $expirationDate -Force
} Else {
$VmProperties.expirationDate = $expirationDate
}
Set-AzResource -ResourceId $VmResourceId -Properties $VmProperties -Force