Mostrando entradas con la etiqueta Máquina Virtual. Mostrar todas las entradas
Mostrando entradas con la etiqueta Máquina Virtual. Mostrar todas las entradas

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