Azure PowerShell kullanarak DevTest Labs VM'leri oluşturma

Bu makalede, Azure PowerShell kullanarak laboratuvarda Azure DevTest Labs sanal makinesi (VM) oluşturma adımları gösterilmektedir. Laboratuvar VM oluşturma işlemini otomatikleştirmek için PowerShell betiklerini kullanabilirsiniz.

Önkoşullar

Bu makalede çalışmak için aşağıdaki önkoşullara ihtiyacınız vardır:

PowerShell VM oluşturma betiği

PowerShell Invoke-AzResourceAction cmdlet'i, laboratuvarın createEnvironment kaynak kimliği ve VM parametreleriyle eylemi çağırır. Parametreler, tüm VM özelliklerini içeren bir karma tabloda yer alır. Özellikler her vm türü için farklıdır. İstediğiniz VM türünün özelliklerini almak için bkz. VM özelliklerini alma.

Bu örnek betik bir Windows Server 2019 Datacenter VM oluşturur. Örnek ayrıca altına dataDiskParametersikinci bir veri diski eklemek için özellikler içerir.

[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
}

Önceki betiği Create-LabVirtualMachine.ps1adlı bir dosyaya kaydedin. Aşağıdaki komutu kullanarak betiği çalıştırın. Yer tutucular için kendi değerlerinizi girin.

.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'

VM özelliklerini alma

Bu bölümde, oluşturmak istediğiniz VM türü için belirli özelliklerin nasıl alınacağı gösterilmektedir. Özellikleri Azure portal bir Azure Resource Manager (ARM) şablonundan veya DevTest Labs Azure REST API'sini çağırarak alabilirsiniz.

VM özelliklerini almak için Azure portal kullanma

Azure portal vm oluşturmak, VM'nin özelliklerini gösteren bir Azure Resource Manager (ARM) şablonu oluşturur. Bir VM tabanı seçtikten sonra ARM şablonunu görebilir ve VM'yi oluşturmadan özellikleri alabilirsiniz. Bu yöntem, henüz bu tür bir laboratuvar VM'niz yoksa JSON VM açıklamasını almanın en kolay yoludur.

  1. Azure portal, laboratuvarınızın Genel Bakış sayfasında üst araç çubuğunda Ekle'yi seçin.

  2. Temel seçin sayfasında, istediğiniz VM türünü seçin. Laboratuvar ayarlarına bağlı olarak VM tabanı bir Azure Market görüntüsü, özel görüntü, formül veya ortam olabilir.

  3. Laboratuvar kaynağı oluştur sayfasında, temel ayarlar ve Gelişmiş ayarlar sekmelerinde isteğe bağlı olarak yapıtlar ekleyin ve istediğiniz diğer ayarları yapılandırın.

  4. Gelişmiş ayarlar sekmesinde, sayfanın alt kısmındaki ARM şablonunu görüntüle'yi seçin.

  5. Azure Resource Manager şablonunu görüntüle sayfasında VM oluşturmak için JSON şablonunu gözden geçirin. Kaynaklar bölümünde VM özellikleri bulunur.

    Örneğin, aşağıdaki resources bölümde Bir Windows Server 2022 Datacenter VM'sinin özellikleri vardır:

      "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. Şablonu kopyalayıp gelecekteki PowerShell otomasyonunda kullanmak üzere kaydedin ve özellikleri PowerShell VM oluşturma betiğine aktarın.

VM özelliklerini almak için DevTest Labs Azure REST API'sini kullanma

Var olan laboratuvar VM'lerinin özelliklerini almak için DevTest Labs REST API'sini de çağırabilirsiniz. Aynı türdeki daha fazla laboratuvar VM'sini oluşturmak için bu özellikleri kullanabilirsiniz.

  1. Sanal Makineler - liste sayfasında, ilk kod bloğunun üzerinde Deneyin'i seçin.
  2. REST API Deneyin sayfasında:
    • labName alanına laboratuvar adınızı girin.
    • labResourceGroup altında laboratuvar kaynak grubu adını girin.
    • subscriptionId bölümünde laboratuvarın Azure aboneliğini seçin.
  3. Çalıştır'ı seçin.
  4. Gövde altındaki Yanıt bölümünde, laboratuvardaki tüm mevcut VM'lerin özelliklerini görüntüleyin.

VM sona erme tarihini ayarlama

Eğitim, tanıtım ve deneme senaryolarında VM'leri belirli bir tarihte otomatik olarak silerek gereksiz maliyetlerden kaçınabilirsiniz. VM oluştururken VM expirationDate özelliğini ayarlayabilirsiniz. Bu makalenin önceki bölümlerinde yer alan PowerShell VM oluşturma betiği altında propertiesbir sona erme tarihi ayarlar:

  "expirationDate": "2022-12-01"

PowerShell kullanarak mevcut VM'lerde son kullanma tarihleri de ayarlayabilirsiniz. Aşağıdaki PowerShell betiği, henüz bir sona erme tarihi yoksa mevcut laboratuvar VM'sinin sona erme tarihini ayarlar:

# 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

Sonraki adımlar

Az.DevTestLabs PowerShell başvurusu