miércoles, 17 de febrero de 2016

Azure RM (ARM). Crear Máquina Virtual en Azure con Powershell .Crear Grupo de Recursos, Almacen, RED, Grupo de Seguridad, IP pública, IP privada y Tarjeta de Red

Hay veces que tengo que generar varias máquinas en mis suscripciones de Azure.
O utilizo Azure con mis alumnos y quiero que todos tengan las máquinas configuradas de la misma manera.

Esto se podría hacer por la web http://portal.azure.com. Pero hay demasiados pasos y posibilidades de error. Es por eso que me he decidido a crear un powershell utilizando Azure RM que cree TODO desde cero con la configuración que quiero.



Creo todas las variables que voy a usar posteriormente:

#Con ARM.... la nueva versión de máquinas virtuales
$MiNN = "32" #Número a cambiar para crear varias máquinas virtuales
$MiDNS = "40.127.177.225" #Dirección IP del servidor DNS de la organización que quieres que utilicen las máquinas
#=============================================
$Migr = "gr$MiNN" #Grupo de recursos
$MiRed = "red$MiNN" #Nombre de red
$MiSubred = "misubred$MiNN" #Nombre de la subred
$MiRangoIP = "10.4.1$MiNN.0/24" #Rango de direcciones subrede
$MiLoc = "North Europe" #Localización de todos los recursos. Podría ser también "East US" o ....
$MiAlmacen = "almacensri$MiNN" #Nombre del almacenamiento
$MiVMSize = "Basic_A1" #Tamaño de la máquina virtual
#=============================================
$MiMVws = "ws2015$MiNN" #WINDOWS. Nombre de la máquina virtual
$MiIpPrivws = "10.4.1$MiNN.101" #WINDOWS. Dirección IP privada estática
$MiIPws = "IPws$MiNN" #WINDOWS. Nombre de la Dirección IP pública estática
$MiNICws = "NICws$MiNN" #WINDOWS. Tarjeta de red
$MiGSws = "GS_ws$MiNN" #WINDOWS. Grupo de seguridad. Se definirar las reglas de entrada y salida del tráfico
#=============================================
$MiMVus = "us2015$MiNN" #UBUNTU. Nombre de la máquina virtual
$MiIpPrivus = "10.4.1$MiNN.100" #UBUNTU. Dirección IP privada estática
$MiIPus = "IPus$MiNN" #UBUNTU. Nombre de la Dirección IP pública estática
$MiNICus = "NICus$MiNN" #UBUNTU. Tarjeta de red
$MiGSus = "GS_us$MiNN" #UBUNTU. Grupo de seguridad. Se definiran las reglas de entrada y salida del tráfico
#=============================================
Hay que crear:

GRUPO DE RECURSOS en la ubicación que quieras. En nuestro caso será el "Norte de Europa".
New-AzureRmResourceGroup
#Añadir Grupo de Recursos
$GrupoRecursos = New-AzureRmResourceGroup -Location $MiLoc -Name $Migr
#$GrupoRecursos = Get-AzureRmResourceGroup -Name $Migr

GRUPO DE ALMACENAMIENTO
ew-AzureRmStorageAccount
#Añadir Cuenta de almacenamiento
$CuentaAlmacen = New-AzureRmStorageAccount -Location $MiLoc -Name $MiAlmacen -Type Standard_LRS -ResourceGroupName $Migr

RED Y SUBRED. New-AzureRmVirtualNetworkSubnetConfig
New-AzureRmVirtualNetwork

#Añadir Red y Subred
$SubRed = New-AzureRmVirtualNetworkSubnetConfig -Name $MiSubred -AddressPrefix $MiRangoIP
$RedVirtual = New-AzureRmVirtualNetwork -Location $MiLoc -Name $MiRed -AddressPrefix "10.0.0.0/8" -DnsServer $MiDNS -Subnet $SubRed -ResourceGroupName $Migr

GRUPO DE SEGURIDAD (Sólo muestro la regla del RDP, las otras serían similares con distinta prioridad). New-AzureRmNetworkSecurityGroup
#WINDOWS. Añadir Grupo de seguridad
New-AzureRmNetworkSecurityGroup -Location $MiLoc -Name $MiGSws -ResourceGroupName $Migr
Get-AzureRMNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr | Add-AzurermNetworkSecurityRuleConfig -Name "allow-rdp-in" -Direction Inbound -Priority 100 -Access Allow -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Protocol TCP | Set-AzureRmNetworkSecurityGroup
Get-AzureRMNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr | Add-AzureRmNetworkSecurityRuleConfig -Name "allow-rdp-out" -Direction Outbound -Priority 100 -Access Allow -SourceAddressPrefix * -SourcePortRange 3389 -DestinationAddressPrefix * -DestinationPortRange * -Protocol TCP | Set-AzureRmNetworkSecurityGroup
$GrupoSeg_ws = Get-AzureRmNetworkSecurityGroup -Name $MiGSws -ResourceGroupName $Migr

CREACIÓN DE IP PÚBLICA ESTÁTICA Y DE LA TARJETA DE RED New-AzureRmPublicIpAddress
New-AzureRmNetworkInterface

$pipws = New-AzureRmPublicIpAddress -Location $MiLoc -Name $MiIPws -AllocationMethod static -ResourceGroupName $Migr -DomainNameLabel $MiMVws
$nicws = New-AzureRmNetworkInterface -Location $MiLoc -Name $MiNICws -SubnetId $RedVirtual.Subnets[0].Id -PublicIpAddressId $pipws.Id -PrivateIpAddress $MiIpPrivws -ResourceGroupName $Migr -NetworkSecurityGroupId $GrupoSeg_ws.Id

CREACIÓN DE LA MÁQUINA VIRTUAL New-AzureRmVM
#=========================== #WINDOWS. Creación de la máquina virtual
$imagePublisher = "MicrosoftWindowsServer"
$imageOffer = "WindowsServer"
$VersionOSSku = "2012-R2-Datacenter"
$pipws = New-AzureRmPublicIpAddress -Location $MiLoc -Name $MiIPws -AllocationMethod static -ResourceGroupName $Migr -DomainNameLabel $MiMVws
$nicws = New-AzureRmNetworkInterface -Location $MiLoc -Name $MiNICws -SubnetId $RedVirtual.Subnets[0].Id -PublicIpAddressId $pipws.Id -PrivateIpAddress $MiIpPrivws -ResourceGroupName $Migr -NetworkSecurityGroupId $GrupoSeg_ws.Id

$cred = Get-Credential -Message "Introduce el nombre del usuario y la contraseña"
$vm = New-AzureRmVMConfig -VMName $MiMVws -VMSize $MiVMSize
$vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName $MiMVws -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName $imagePublisher -Offer $imageOffer -Skus $VersionOSSku -Version "latest"
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nicws.Id
$osDiskUri = $CuentaAlmacen.PrimaryEndpoints.Blob.ToString() + "vhds/$MiMVws.vhd"
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $MiMVws -VhdUri $osDiskUri -CreateOption fromImage

New-AzureRmVM -ResourceGroupName $Migr -Location $MiLoc -VM $vm


De la misma forma se podría hacer con una máquina virtual Ubuntu.

Si queréis descargar el código podéis hacerlo de:
https://github.com/javiteran/powershellAzureRM
Espero que os sirva.



Para hacer esto hay que primero conectarse a la suscripción de Azure mediante powershell. Login-AzureRmAccount
$subscriptionId =
( Get-AzurermSubscription |
Out-GridView `
-Title "Selecciona cuenta ..." `
-PassThru
).SubscriptionId
Select-AzurermSubscription -SubscriptionId $subscriptionId

#Comprobación
Get-AzurermSubscription

No hay comentarios: