Criar VMs do DevTest Labs usando o Azure PowerShell
Este artigo mostra como criar uma VM (máquina virtual) do Azure DevTest Labs em um laboratório usando o Azure PowerShell. Você pode usar scripts do PowerShell para automatizar a criação da VM do laboratório.
Pré-requisitos
Você precisa dos seguintes pré-requisitos para acompanhar este artigo:
- Acesso a um laboratório no DevTest Labs. Crie um laboratório ou use um existente.
- PowerShell do Azure. Instale o Azure PowerShell ou use o Azure Cloud Shell no portal do Azure.
Script de criação de VM do PowerShell
O cmdlet Invoke-AzResourceAction do PowerShell invoca a ação createEnvironment
com a ID de recurso do laboratório e os parâmetros da VM. Os parâmetros ficam em uma tabela de hash que contém todas as propriedades da VM. As propriedades são diferentes para cada tipo de VM. Para obter as propriedades do tipo de VM que você deseja, confira Obter as propriedades da VM.
Este script de exemplo cria uma VM do Windows Server 2019 Datacenter. O exemplo também inclui propriedades para adicionar um segundo disco de dados em 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
}
Salve o script anterior em um arquivo chamado Create-LabVirtualMachine.ps1. Execute o script usando o seguinte comando. Insira seus valores para os espaços reservados.
.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'
Obter as propriedades da VM
Esta seção mostra como obter as propriedades específicas do tipo de VM que você quer criar. Você pode obter as propriedades de um modelo do ARM (Azure Resource Manager) no portal do Azure ou chamando a API REST do Azure do DevTest Labs.
Usar o portal do Azure para obter as propriedades da VM
A criação de uma VM no portal do Azure gera um modelo do ARM (Azure Resource Manager) que mostra as propriedades da VM. Depois de escolher uma base de VM, você poderá ver o modelo do ARM e obter as propriedades sem realmente criar a VM. Esse método é a maneira mais fácil de obter a descrição da VM JSON quando você ainda não tem uma VM de laboratório desse tipo.
No portal do Azure, na página Visão geral do laboratório, selecione Adicionar na barra de ferramentas superior.
Na página Escolher uma base, selecione o tipo de VM desejado. Dependendo das configurações do laboratório, a base da VM pode ser uma imagem do Azure Marketplace, uma imagem personalizada, uma fórmula ou um ambiente.
Na página Criar recurso de laboratório, opcionalmente, adicione artefatos e defina as outras configurações desejadas nas guias Configurações básicas e Configurações avançadas.
Na guia Configurações avançadas, selecione Exibir modelo do ARM na parte inferior da página.
Na página Ver o modelo do Azure Resource Manager, examine o modelo JSON para criar a VM. A seção de recursos tem as propriedades da VM.
Por exemplo, a seguinte seção
resources
tem as propriedades de uma VM do 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 } ] } } } } ],
Copie e salve o modelo a ser usado na automação futura do PowerShell e transfira as propriedades para o script de criação de VM do PowerShell.
Usar a API REST do Azure do DevTest Labs para obter as propriedades da VM
Você também pode chamar a API REST do DevTest Labs para obter as propriedades das VMs de laboratório existentes. Você pode usar essas propriedades para criar mais VMs de laboratório dos mesmos tipos.
- Na página Máquinas virtuais – Lista, selecione Experimentar acima do primeiro bloco de código.
- Na página Experimentar a API REST:
- Em labName, insira o nome do laboratório.
- Em labResourceGroup, insira o nome do grupo de recursos do laboratório.
- Em subscriptionId, selecione a assinatura do Azure do laboratório.
- Selecione Executar.
- Na seção Resposta, em Corpo, veja as propriedades de todas as VMs existentes no laboratório.
Definir a data de validade da VM
Em cenários de treinamento, demonstração e avaliação, você pode evitar custos desnecessários excluindo VMs automaticamente em uma determinada data. Você pode definir a propriedade expirationDate
da VM ao criar uma VM. O script de criação de VM do PowerShell mostrado neste artigo define uma data de validade em properties
:
"expirationDate": "2022-12-01"
Você também pode definir datas de validade em VMs existentes usando o PowerShell. O seguinte script do PowerShell define uma data de validade para uma VM de laboratório existente quando ela ainda não tem uma data de expiração:
# 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