Cuando necesitamos tener una creación estructurada de un conjunto de máquinas es interesante apoyarnos en PowerShell, ya que una vez establecidos los parámetros es un proceso mucho más rápido y personalizable que desde el portal.
Por otro lado, cuando trabajamos con Virtual Networks en Microsoft Azure, es importante saber que existe la posibilidad de asignar una IP específica a una máquina virtual, dentro del rango de IPs de la subnet elegida.
En este post voy a mostrar cómo es posible crear una máquina virtual desde Powershell y cómo configurar una IP estática interna para dicha máquina.
Creación de una máquina virtual desde PowerShell
Si bien es cierto que existen numerosos parámetros para la creación de una máquina, en este post voy a intentar simplificarlo a los mínimos necesarios para la creación. Hay que tener en cuenta de que debemos combinar varios comandos:
- New-AzureVMConfig: Crea un objeto de configuración de la VM, donde se indica el tamaño que debe tener la máquina, la imagen que se va a utilizar, el availability set, etcétera.
- Add-AzureProvisioningConfig: Una vez que se ha elegido el tipo de máquina, a través de la imagen, es necesario establecer algunos valores como el nombre de usuario, la contraseña, dominio, certificados, etcétera.
- New-AzureVM: Una vez completados los pasos anteriores ya es posible lanzar la creación de la máquina. A través de este comando confirmamos el nombre del cloud service a usar, affinity group o localización, etcétera.
Un ejemplo de creación de una máquina virtual small con Windows Server 2012 R2 Datacenter sería el siguiente:
$image = (Get-AzureVMImage | Where-Object {$_.Label -like "Windows Server 2012 R2 Datacenter, March 2014"}).ImageName $adminUserName = "gis" $pwd = "Passw0rd!" $serviceName = "myfarmscv" $affinitygroup = "Europe" $vm = "mygisvm2" New-AzureVMConfig -Name $vm -InstanceSize Small -ImageName $image | Add-AzureProvisioningConfig -windows -AdminUsername $adminUserName -Password $pwd | New-AzureVM -ServiceName $serviceName -AffinityGroup $affinitygroup
En el apartado superior, he creado un conjunto de variables con los datos que necesito para la creación: el nombre de la imagen que quiero utilizar, nombre de usuario, contraseña, nombre del cloud service, el affinity group que quiero utilizar y el nombre de la máquina.
El segundo apartado es la ejecución de los tres comandos mencionados anteriormente concatenados entre sí. El resultado esperado de la operación debe ser similar al siguiente:
Por otro lado, si quisiéramos indicar el storage a utilizar en cada creación, debemos utilizar el parámetro -MediaLocation a nivel del comando New-AzureVMConfig
Creación y asignación de IP
Otra de las configuraciones que podríamos añadir a la creación de una máquina virtual es la asociación a una red virtual y, además, la IP queremos que tenga la máquina dentro de la misma (desde el portal a día de hoy no es posible esta operación). Para ello, podemos ampliar el comando anterior con Set-AzureSubnet y Set-AzureStaticVNetIP, además de añadir, a través del comando New-AzureVM, la red virtual a la que debe pertenecer la máquina:
$image = (Get-AzureVMImage | Where-Object {$_.Label -like "Windows Server 2012 R2 Datacenter, March 2014"}).ImageName $adminUserName = "gis" $pwd = "Passw0rd!" $serviceName = "myfarmscv" $vm = "mygisvm2" $vnet = "gis-network" $subnet = "front-end" New-AzureVMConfig -Name $vm -InstanceSize Small -ImageName $image | Set-AzureSubnet -SubnetNames $subnet | Set-AzureStaticVNetIP -IPAddress 192.168.1.5 | Add-AzureProvisioningConfig -Windows -AdminUsername $adminUserName -Password $pwd | New-AzureVM -ServiceName $serviceName -VNetName $vnet
En el código anterior, he creado una VM dentro de un cloud service que ya existe y le he asignado una red virtual (gis-network), la subnet a la que debe pertenecer y qué IP quiero asignarle de manera explícita. Existe un comando que podemos utilizar para comprobar la disponibilidad de una IP dentro de una subnet:
Test-AzureStaticVNetIP -VNetName "gis-network" -IPAddress 192.168.1.5
Para más información sobre la configuración de IPs internas puedes consultar el siguiente enlace.
¡Saludos!