PowerShell y Creación de una maquina virtual en Azure a tan solo un click


Siguiendo con PowerShell, disponemos también de la librería Microsoft Azure PowerShell. Esta librería nos permite trabajar directamente contra Azure sin necesidad de usar el portal. A tan solo un click podemos crear una máquina que nos puede ser muy útil, en diferentes operativas:

  • Para realizar test en diferentes entornos.
  • Realizar pruebas de instalacción de aplicativos.
  • Para crear rápidamente entornos de preproducción/producción.

Crear una maquina virtual con un Script de PowerShell

  • 1.- Descargar Modulo de Azure PowerShell en el siguiente enlace: http://go.microsoft.com/fwlink/p/?linkid=320376&clcid=0x40a
  • 2.- Importar el Modulo instalado en PowerShell
    Import-Module "C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\ShortcutStartup.ps1"
    
  • 3.- Ejecutar script de Creación de Maquina Virtual
    ./NewMachineOnAzure
    

    o

    ./NewMachineOnAzure -NameMachine "testrodrijp"
    

Script NewMachineOnAzure

Por defecto la maquina que se crea es Small, en West Europe y utiliza una Imagen de Windows 2008. En el script se pueden sobrescribir estos parámetros por defecto. Por ejemplo, para una maquina Medium con un Ubutu:

./NewMachineOnAzure -InstanceSize "Medium" -Image "0b11de9248dd4d87b18621318e037d37__RightImage-Ubuntu-12.04-x64-v5.8.8"

Hay un comando de PowerShell New-AzureQuickVM que permite realizar gran parte de la funcionalidad de este script. En nuestro caso hemos utilizado otra combinación de llamadas (New-AzureVMConfig, Add-AzureProvisioningConfig y New-AzureVM) que nos permite desplegar más parámetros adicionales. Por ejemplo en nuestro caso la maquina virtual por defecto usa horario UTC.

################################################################################################################################################################  
# This script Create a Virtual Machine on Azure
#
# To run the script
#  
# ./NewMachineOnAzure -NameMachine "testrodrijp"
################################################################################################################################################################  
Param(  
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $NameMachine = "",
# Specifies the size of the instance. Allowed values are ExtraSmall, Small, Medium, Large, ExtraLarge, A5, A6,
# A7, A8, A9, Basic_A0, Basic_A1, Basic_A2, Basic_A3, Basic_A4, Standard_D1, Standard_D2, Standard_D3,
# Standard_D4, Standard_D11, Standard_D12, Standard_D13, Standard_D14.	
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $InstanceSize = "Small",
# ImagesFor Example to Search Windows 2008 images
# Get-AzureVMImage | Where { $_.ImageName -like "*2008*" } 
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $Image = "bd507d3a70934695bc2128e3e5a255ba__RightImage-Windows-2008R2-SP1-x64-iis75-v5.8.8",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $User = "administrador",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $Password = "Poner1Passw",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $TimeZone = "GMT Standard Time",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $ServiceName = "",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $Location = "West Europe",
#The storage account name must be unique to Azure and must be between 3 and 24 characters in length and use lowercase letters and numbers only.	
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $StorageAccountName = ""
)

#Setting Default Parameters
if ($NameMachine -eq "") {
	$NameMachine = "a" + [guid]::NewGuid().ToString("N").substring(0,14);
}
if ($ServiceName -eq "") {
	$ServiceName = $NameMachine;
}
if ($StorageAccountName -eq "") {
	$StorageAccountName = $NameMachine;	
}
$StorageLabel = $NameMachine + "Storage";

#Log-in on Subscription
Add-AzureAccount

#Create Storage Account needed by Azure Virtual Machine & Setting it on AzureSubscription
New-AzureStorageAccount -StorageAccountName $StorageAccountName -Label $StorageLabel -Location $Location
$SubscriptionName =  (Get-AzureSubscription -Current).SubscriptionName
Set-AzureSubscription -SubscriptionName $SubscriptionName -CurrentStorageAccountName $StorageAccountName

#Create Virtual Machine
$vmConfig = New-AzureVMConfig -Name $NameMachine -InstanceSize $InstanceSize -Image $Image
$vmConfig = $vmConfig | Add-AzureProvisioningConfig -Windows -AdminUserName $User -Password $Password -TimeZone $TimeZone
$vmConfig | New-AzureVM -ServiceName $ServiceName -Location $Location

Write-Host "Virtual Machine: " $NameMachine " creatted!!!"

Script DeleteMachineOnAzure

También tenemos la posibilidad de borrar la maquina virtual creada con otro script.

./DeleteMachineOnAzure -NameMachine "testrodrijp"

OJO!!! también se borra automáticamente la cuenta de Storage asociada. Si la cuenta que creamos en su día al crear la maquina la hubiésemos usado para otros servicios, podríamos tener problemas ;-).

################################################################################################################################################################  
# This script Delete a Virtual Machine on Azure
#
# To run the script
#  
# ./DeleteMachineOnAzure -NameMachine "testrodrijp"
################################################################################################################################################################  
Param(  
	[Parameter(ValueFromPipeline=$true, Mandatory=$True)]  	
	[string] $NameMachine,
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $ServiceName = "",
#The storage account name must be unique to Azure and must be between 3 and 24 characters in length and use lowercase letters and numbers only.	
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $StorageAccountName = ""
)

#Setting Default Parameters
if ($ServiceName -eq "") {
	$ServiceName = $NameMachine;
}
if ($StorageAccountName -eq "") {
	$StorageAccountName = $NameMachine;	
}

#Log-in on Subscription
Add-AzureAccount

Remove-AzureVM -ServiceName $ServiceName -Name $NameMachine -DeleteVHD;

#Remove Azure Storage Account
$SubscriptionName =  (Get-AzureSubscription -Current).SubscriptionName;
Set-AzureSubscription -SubscriptionName $SubscriptionName -CurrentStorageAccountName $StorageAccountName;
#Wait until VHD are deleted (is Asynchronous Operation).
$AlredyExist = $true;
while($AlredyExist) 
{
	Write-Host "Waitting VHD deleted..."
	$AlredyExist = $false;
	$blobs = Get-AzureStorageBlob -Container "vhds" | select Name;
	foreach($blob in $blobs)
	{
		if ($blob.Name.EndsWith(".vhd")) { $AlredyExist = $true; }
	}
	Start-Sleep -m 20000
}
#VHD are deleted but there's a *.status file ¿?. 
$blobs = Get-AzureStorageBlob -Container "vhds" | select Name;
foreach($blob in $blobs)
{
	Remove-AzureStorageBlob -Container "vhds" -Blob $blob.Name 
}

Remove-AzureService -ServiceName $ServiceName -Force;
Remove-AzureStorageAccount -StorageAccountName $StorageAccountName  

Write-Host "Virtual Machine: " $NameMachine " removed!!!"
Anuncios
Esta entrada fue publicada en Azure, PowerShell y etiquetada . Guarda el enlace permanente.

Una respuesta a PowerShell y Creación de una maquina virtual en Azure a tan solo un click

  1. Pingback: Ejecutar comando PowerShell al crear la maquina virtual de Azure | Pensando bajo la lluvia

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s