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


Создание виртуальных машин DevTest Labs с помощью Azure PowerShell

В этой статье показано, как создать виртуальную машину Azure DevTest Labs в лаборатории с помощью Azure PowerShell. Скрипты PowerShell можно использовать для автоматизации создания виртуальной машины лаборатории.

Предпосылки

Для работы с этой статьей необходимы следующие предварительные требования:

Скрипт создания виртуальной машины PowerShell

Командлет PowerShell Invoke-AzResourceAction вызывает createEnvironment действие с идентификатором ресурса лаборатории и параметрами виртуальной машины. Параметры находятся в хэш-таблице, содержащей все свойства виртуальной машины. Свойства отличаются для каждого типа виртуальной машины. Чтобы получить свойства для нужного типа виртуальной машины, см. статью "Получение свойств виртуальной машины".

В этом примере скрипта создается виртуальная машина Центра обработки данных Windows Server 2019. В примере также содержатся свойства для добавления второго диска данных под 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 DevTest Labs Azure.

Получение свойств виртуальной машины с помощью портала Azure

Создание виртуальной машины на портале Azure создает шаблон Azure Resource Manager (ARM), показывающий свойства виртуальной машины. Выбрав базу виртуальной машины, вы увидите шаблон ARM и получите свойства, не создавая виртуальную машину. Этот метод проще всего получить описание виртуальной машины JSON, если у вас еще нет виртуальной машины лаборатории этого типа.

  1. На портале Azure на странице "Обзор " для лаборатории выберите "Добавить " на верхней панели инструментов.

  2. На базовой странице выберите нужный тип виртуальной машины. В зависимости от параметров лаборатории основа виртуальных машин может быть образом из Azure Marketplace, пользовательским образом, формулой или средой.

  3. На странице "Создание лаборатории" при необходимости добавьте артефакты и настройте любые другие параметры, которые необходимо настроить на вкладках "Базовые параметры " и "Дополнительные параметры ".

  4. На вкладке "Дополнительные параметры" выберите "Вид шаблона ARM" в нижней части страницы.

  5. На странице шаблона View Azure Resource Manager просмотрите шаблон JSON для создания виртуальной машины. В разделе ресурсов есть свойства виртуальной машины.

    Например, в следующем resources разделе содержатся свойства виртуальной машины Центра обработки данных Windows Server 2022:

      "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
                                    }
                               ]
                          }
                     }
                }
           }
      ],
    
  6. Скопируйте и сохраните шаблон для использования в будущем автоматизации PowerShell и перенесите свойства в скрипт создания виртуальной машины PowerShell.

Получение свойств виртуальной машины с помощью REST API DevTest Labs Azure

Вы также можете вызвать REST API DevTest Labs, чтобы получить свойства существующих виртуальных машин лаборатории. Эти свойства можно использовать для создания дополнительных виртуальных машин лаборатории тех же типов.

  1. На странице списка виртуальных машин выберите "Попробовать" над первым блоком кода.
  2. На странице "Пробная попытка" REST API выполните следующие действия:
    • В разделе LabName введите имя лаборатории.
    • В разделе LabResourceGroup введите имя группы ресурсов лаборатории.
    • Под subscriptionId выберите подписку Azure лаборатории.
  3. Выберите Выполнить.
  4. В разделе "Ответ" под "Содержимое" просмотрите свойства всех существующих виртуальных машин в лаборатории.

Дата окончания срока действия виртуальной машины

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

Дальнейшие действия

Справочник по Az.DevTestLabs PowerShell