Creación de máquinas virtuales de DevTest Labs mediante Azure PowerShell
Este artículo muestra cómo crear una máquina virtual Azure DevTest Labs en un laboratorio mediante Azure PowerShell. Puede usar scripts de PowerShell para automatizar la creación de máquinas virtuales de laboratorio.
Requisitos previos
Necesita los siguientes requisitos previos para seguir los pasos de este artículo:
- Acceso a un laboratorio en DevTest Labs. Cree un laboratorio o use uno existente.
- Azure PowerShell. Instale Azure PowerShell o use Azure Cloud Shell en el Azure Portal.
Script de creación de máquinas virtuales de PowerShell
El cmdlet Invoke-AzResourceAction de PowerShell invoca la createEnvironment
acción con el identificador de recurso y los parámetros de máquina virtual del laboratorio. Los parámetros están en una tabla hash que contiene todas las propiedades de descripción de la máquina virtual. Las propiedades son diferentes para cada tipo de máquina virtual. Para obtener las propiedades del tipo de máquina virtual que desea, consulte Obtener propiedades de máquina virtual.
Este script de ejemplo crea una máquina virtual Windows Server 2019 Datacenter. El ejemplo también incluye propiedades para agregar un segundo disco de datos en 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
}
Guarde el script anterior en un archivo denominado Create-LabVirtualMachine.ps1. Ejecute el script con el siguiente comando. Escriba sus propios valores para los siguientes elementos.
.\Create-LabVirtualMachine.ps1 -ResourceGroupName '<lab resource group name>' -LabName '<lab name>' -userName '<VM administrative username>' -password '<VM admin password>' -VMName '<VM name to create>'
Obtener propiedades de la VM
Esta sección muestra cómo obtener las propiedades específicas para el tipo de máquina virtual que desea crear. Puede obtener las propiedades de una plantilla Azure Resource Manager (ARM) en el Azure Portal o llamando a la API REST de Azure DevTest Labs.
Uso del Azure Portal para obtener las propiedades de la máquina virtual
La creación de una máquina virtual en Azure Portal genera una plantilla Azure Resource Manager (ARM) que muestra las propiedades de la máquina virtual. Una vez que elija una base de máquina virtual, puede ver la plantilla de ARM y obtener las propiedades sin crear realmente la máquina virtual. Este método es la manera más fácil de obtener la descripción de la máquina virtual JSON si aún no tiene una máquina virtual de laboratorio de ese tipo.
En Azure Portal, en la página Información general del laboratorio, seleccione Agregar en la barra de herramientas superior.
En la página Elegir una base, seleccione el tipo de máquina virtual que prefiera. En función de la configuración del laboratorio, la base de la máquina virtual puede ser una Azure Marketplace, una imagen personalizada, una fórmula o un entorno.
En la página Crear recurso de laboratorio, puede agregar artefactos y configurar cualquier otra configuración que desee en las pestañas Configuración básica y Configuración avanzada.
En la pestaña Configuración avanzada, seleccione Ver plantilla de ARM en la parte inferior de la página.
En la página Ver plantilla de Azure Resource Manager, revise la plantilla JSON para crear la máquina virtual. La sección de recursos tiene las propiedades de la máquina virtual.
Por ejemplo, la sección siguiente
resources
tiene las propiedades de una máquina virtual 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 y guarde la plantilla para usarla en la futura automatización de PowerShell y transfiera las propiedades al script de creación de máquinas virtuales de PowerShell.
Uso de la API REST de Azure DevTest Labs para obtener las propiedades de la máquina virtual
También puede llamar a la API REST de DevTest Labs para obtener las propiedades de las máquinas virtuales de laboratorio existentes. Puede usar esas propiedades para crear más máquinas virtuales de laboratorio de los mismos tipos.
- En la página Máquinas virtuales: lista, seleccione Prueba en la parte superior del primer bloque de código.
- En la página Prueba de la API REST:
- En labName, escriba el nombre del laboratorio.
- En labResourceGroup, escriba el nombre del grupo de recursos de laboratorio.
- En subscriptionId, seleccione la suscripción de Azure del laboratorio.
- Seleccione Run (Ejecutar).
- En la sección Respuesta, en Cuerpo, vea las propiedades de todas las máquinas virtuales existentes en el laboratorio.
Establecimiento de fecha de expiración de la VM
En escenarios de entrenamiento, demostración y prueba, puede evitar costes innecesarios mediante la eliminación automática de máquinas virtuales en una fecha determinada. Puede establecer la propiedad de máquina expirationDate
virtual al crear una máquina virtual. El script de creación de máquinas virtuales de PowerShell anterior en este artículo establece una fecha de expiración en properties
:
"expirationDate": "2022-12-01"
También puede establecer fechas de expiración en máquinas virtuales existentes mediante PowerShell. El siguiente script de PowerShell establece una fecha de expiración para una máquina virtual de laboratorio existente si aún no tiene una fecha de expiración:
# 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