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:
- DevTest Labs'deki bir laboratuvara erişim. Laboratuvar oluşturun veya var olan bir laboratuvarı kullanın.
- Azure PowerShell. Azure PowerShell yükleyin veya Azure portal Azure Cloud Shell kullanın.
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 dataDiskParameters
ikinci 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.
Azure portal, laboratuvarınızın Genel Bakış sayfasında üst araç çubuğunda Ekle'yi seçin.
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.
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.
Gelişmiş ayarlar sekmesinde, sayfanın alt kısmındaki ARM şablonunu görüntüle'yi seçin.
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 } ] } } } } ],
Ş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.
- Sanal Makineler - liste sayfasında, ilk kod bloğunun üzerinde Deneyin'i seçin.
-
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.
- Çalıştır'ı seçin.
- 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 properties
bir 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