Acompáñanos en este artículo para aprender cómo desplegar una VM en Azure con PowerShell
Vamos a ver un ejemplo de script de PowerShell para desplecar una máquina virtual (VM) en Azure, la VM va a ser de Windows Server, y con un servidor IIS, para posteriormente añadir dos discos virtuales (VHDX) de 100GB cada uno.
Comenzamos por declarar las variables que se van a usar en el script:
# Variables
$resourceGroupName = «MiGrupoDeRecursos»
$location = «westeurope»
$vmName = «MiMaquinaVirtual»
$adminUsername = «azureuser»
$adminPassword = «TuContraseña123!»
Lo siguiente sería crear el grupo de recursos en el que se creará la VM:
# Crear grupo de recursos
New-AzResourceGroup -Name $resourceGroupName -Location $location
Después crear las credenciales de las VM:
# Configurar credenciales de la máquina virtual
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($adminUsername, (ConvertTo-SecureString -String $adminPassword -AsPlainText -Force))
Creamos el disco para la instalación del SO:
# Configurar disco para el sistema operativo
$osDiskName = $vmName + «-osDisk»
$osDiskUri = «https://$resourceGroupName.blob.core.windows.net/vhds/» + $osDiskName + «.vhd»
$osConfig = New-AzDiskConfig -SkuName «Standard_LRS» -OsType Windows -Location $location -CreateOption FromImage -SourceUri «https://yourimage.blob.core.windows.net/system/MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest»
A continuación creamos la VM:
# Crear máquina virtual
New-AzVM -ResourceGroupName $resourceGroupName -Name $vmName -Location $location -VirtualNetworkName «MiRedVirtual» -SubnetName «MiSubred» -SecurityGroupName «MiGrupoDeSeguridad» -PublicIpAddressName «MiIPPublica» -Credential $cred -OpenPorts 80,3389 -Image $osConfig -Size «Standard_DS2_v2» -DataDiskNames «disk1», «disk2» -DataDiskSizesGB 100
# Configurar servidor IIS
Invoke-AzVMRunCommand -ResourceGroupName $resourceGroupName -VMName $vmName -CommandId ‘RunPowerShellScript’ -ScriptPath ‘./Install-IIS.ps1’ -Parameter @{«Param1» = «Value1»}
Creamos los discos duros adicionales (2):
# Adjuntar discos virtuales adicionales
$diskConfig = New-AzDiskConfig -SkuName «Standard_LRS» -Location $location -CreateOption Empty -DiskSizeGB 100
$disk1 = New-AzDisk -ResourceGroupName $resourceGroupName -DiskName «disk1» -Disk $diskConfig
$disk2 = New-AzDisk -ResourceGroupName $resourceGroupName -DiskName «disk2» -Disk $diskConfig
Add-AzVMDataDisk -VMName $vmName -ResourceGroupName $resourceGroupName -Name «disk1» -CreateOption Attach -ManagedDiskId $disk1.Id -Lun 1
Add-AzVMDataDisk -VMName $vmName -ResourceGroupName $resourceGroupName -Name «disk2» -CreateOption Attach -ManagedDiskId $disk2.Id -Lun 2
Quedando finalmente de la siguiente manera:
# Variables
$resourceGroupName = «MiGrupoDeRecursos»
$location = «westeurope»
$vmName = «MiMaquinaVirtual»
$adminUsername = «azureuser»
$adminPassword = «TuContraseña123!»
# Crear grupo de recursos
New-AzResourceGroup -Name $resourceGroupName -Location $location
# Configurar credenciales de la máquina virtual
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($adminUsername, (ConvertTo-SecureString -String $adminPassword -AsPlainText -Force))
# Configurar disco para el sistema operativo
$osDiskName = $vmName + «-osDisk»
$osDiskUri = «https://$resourceGroupName.blob.core.windows.net/vhds/» + $osDiskName + «.vhd»
$osConfig = New-AzDiskConfig -SkuName «Standard_LRS» -OsType Windows -Location $location -CreateOption FromImage -SourceUri «https://yourimage.blob.core.windows.net/system/MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest»
# Crear máquina virtual
New-AzVM -ResourceGroupName $resourceGroupName -Name $vmName -Location $location -VirtualNetworkName «MiRedVirtual» -SubnetName «MiSubred» -SecurityGroupName «MiGrupoDeSeguridad» -PublicIpAddressName «MiIPPublica» -Credential $cred -OpenPorts 80,3389 -Image $osConfig -Size «Standard_DS2_v2» -DataDiskNames «disk1», «disk2» -DataDiskSizesGB 100
# Configurar servidor IIS
Invoke-AzVMRunCommand -ResourceGroupName $resourceGroupName -VMName $vmName -CommandId ‘RunPowerShellScript’ -ScriptPath ‘./Install-IIS.ps1’ -Parameter @{«Param1» = «Value1»}
# Adjuntar discos virtuales adicionales
$diskConfig = New-AzDiskConfig -SkuName «Standard_LRS» -Location $location -CreateOption Empty -DiskSizeGB 100
$disk1 = New-AzDisk -ResourceGroupName $resourceGroupName -DiskName «disk1» -Disk $diskConfig
$disk2 = New-AzDisk -ResourceGroupName $resourceGroupName -DiskName «disk2» -Disk $diskConfig
Add-AzVMDataDisk -VMName $vmName -ResourceGroupName $resourceGroupName -Name «disk1» -CreateOption Attach -ManagedDiskId $disk1.Id -Lun 1
Add-AzVMDataDisk -VMName $vmName -ResourceGroupName $resourceGroupName -Name «disk2» -CreateOption Attach -ManagedDiskId $disk2.Id -Lun 2
Este script crea una máquina virtual en Azure con Windows Server instalado, configura un servidor IIS en la máquina virtual y añade dos discos virtuales de 100GB cada uno.
En caso de que quieras usar este script para probarlo debes reemplazar los valores de las variables con los adecuados para tu entorno, como el nombre del grupo de recursos, el nombre de la máquina virtual, el nombre de usuario y contraseña, etc.
Para poder ejecutarlo, o bien lo lanzas desde PowerShell ISE o se debe guardar en un archivo de script llamado <loquesea>.ps1 donde <loquesea> es un nombre que le queramos dar.
Espero que os resulte útil.
Un abrazo!