miércoles, 17 de abril de 2019

Azure - Crear una VM tras subir un VHD y recomendaciones

Hola,

A continuación os detallo el script necesarios para, usando Azure Powershell, crear una VM tras haber subido el disco VHD a un Container existente en un Blob Page.

Antes de detallaros el scipt, tener en cuenta lo siguiente:

- Si la máquina corre actualmente en un Hyper-V y tiene un disco VHDX, con la propia consola de Hyper-V y con la VM apagada, podéis editar el disco y partiendo de él, crear un archivo VHD Fijo.

- Crear VM en modo Generalized, se considera que el disco ha sido preparado para partiendo de él, crear varias máquinas virtuales. Por ello, a la VM modelo se le hace un sysprep antes de subir el VHD a Azure. (https://docs.microsoft.com/es-es/azure/virtual-machines/windows/capture-image-resource)

- El script es válido para una VM “Specialized”. Esto es una AzureVM creada a partir del VHD que es el mismo disco duro que estaba corriendo en una VM Hyper-V/Vmware en los que se ha convertido su disco VHDX o VMDK a VHD Fijo.

- Que tras crear la VM tenéis que instalar el agente de gestión de Azure, para el mero hecho de poder hacer Backups de la VM o bien por ejemplo utilizar opciones como resetear contraseña, monitorizarla, etc. (https://go.microsoft.com/fwlink/?LinkID=394789&clcid=0x409) A riesgo de ver errores como estos:

https://docs.microsoft.com/es-es/azure/backup/backup-azure-troubleshoot-vm-backup-fails-snapshot-timeout#the-agent-installed-in-the-vm-but-unresponsive-for-windows-vms

Script:

Este script cambia el orden y algunas pequeñas cosas, dando a mi juicio mayor sentido común, en relación a los pasos aparecidos aquí: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sa-create-vm-specialized

En el script partimos de tener un Grupo de recursos creado y el VHD subido.

$rgName = "RG1"
$location = "North Europe"
$vnetName = "Vnet1"
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location -AddressPrefix     172.16.224.0/19 -Subnet $singleSubnet

$nsgName = "SG1"
$rdpRule = New-AzNetworkSecurityRuleConfig -Name myRdpRule -Description "Allow RDP" `
     -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 `
     -SourceAddressPrefix Internet -SourcePortRange * `
     -DestinationAddressPrefix * -DestinationPortRange 3389
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $rgName -Location $location `
     -Name $nsgName -SecurityRules $rdpRule

$subnetName = "Vnet1_subnet1"
$singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 172.16.224.0/24

$ipName = "PUblicIP1"
$pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location -AllocationMethod Static

$nicName = "VM1Nic1"
$nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

$vmName = "Vm1"
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize "Standard_A2"

$vm = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id

$osDiskUri = https://XXXXXXXX.blob.core.windows.net/xxxxx/XXXXXX.vhd

$osDiskName = $vmName + "osDisk"
$vm = Set-AzVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri -CreateOption attach –Windows


New-AzVM -ResourceGroupName $rgName -Location $location -VM $vm –DisableBginfoExtension –credential (get-credential)

*Atentos a DisableBGINfoExtension  : De no deshabilitar tendréis problemas por ejemplo a la hora de configurar los discos como gestionados.

*-Credential: Es importante proporcionar a Azure las credenciales de un usuario administrador de la máquina, Si esto se realiza, se puede evitar la variable –DisableBgInfoExtension.

No hay comentarios: