Aracılığıyla paylaş


Azure PowerShell kullanarak DevTest Labs VM'leri oluşturma

Bu makalede, Azure PowerShell kullanarak bir laboratuvarda Azure DevTest Labs sanal makinesinin (VM) nasıl oluşturulacağı gösterilmektedir. Laboratuvar VM oluşturmayı 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 komut dosyası bir Windows Server 2019 Datacenter VM oluşturur. Örnek, altına dataDiskParametersikinci bir veri diski ekleme özelliklerini de 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ında bir Azure Resource Manager (ARM) şablonundan veya DevTest Labs Azure REST API'sini çağırarak alabilirsiniz.

VM özelliklerini almak için Azure portalını kullanma

Azure portalında 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ında, 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, isteğe bağlı olarak yapıtlar ekleyin ve Temel ayarlar ve Gelişmiş ayarlar sekmelerinde 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

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

  1. Sanal Makineler - liste sayfasında, ilk kod bloğunun üstündeki 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 maliyetleri önleyebilirsiniz. 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'i kullanarak mevcut VM'lerde son kullanma tarihlerini de ayarlayabilirsiniz. Aşağıdaki PowerShell betiği, henüz bir sona erme tarihi yoksa mevcut laboratuvar VM'sinin son kullanma 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 referansı