Backup de Base de Datos SQL Azure Mejorado y PowerShell

En esta entrada voy presentar un script de PowerShell que nos va a permitir realizar un backup de una base de datos de Azure con tan solo un click.

Hace tiempo publique la entrada Backup de Base de Datos SQL Azure con tan un solo comando. En el Portal de Azure posteriormente utilizando la misma idea se incorporo la posibilidad de realizar backups en la nube. Mediante la API PowerShell de Azure vamos a ser capaces de conseguir nuestro objetivo ;-).

Uso

  • 1.- Editamos los parámetros de configuración del script

    • $serverName: Nombre de nuestro servidor de Sql en la Nube.
    • $databaseOriginal: Nombre de la base de datos que queremos realizar el backup.
    • $databaseCopy: Nombre de base de datos temporal para mantener transaccionalidad del backup.
    • $StorageAccountName: Cuenta del Storage donde almacenaremos el backup.
    • $storageContainerName: Container donde donde almacenaremos el backup.
  • 2.- Ejecutamos el powerShell
    powershell .\Script.ps1
    
    • 2.1.-Introducimos las credenciales de acceso a nuestra cuenta de Azure.
      SignInAzure
    • 2.2.- Introducimos el usuario de acceso al Sql Server (sin @ServerName).
      SingInDatabase
    • 2.3.- Al final de la ejecución del script se muestra la ruta al blob donde se ha almacenado el backup (la url que esta en fuente roja con fondo amarillo :-))
      Backup Database

    El Script

    $serverName = "SqlServerName"
    $databaseOriginal = "database"
    $databaseCopy = "databaseCopy"
    $StorageAccountName = "storageName"
    $storageContainerName = "containerName"
    
    Add-AzureAccount
    #if we have multiple Subscriptions ;-) 
    #       Get-AzureSubscription 
    #       Select-AzureSubscription "Subscription"
    
    #Copy Database 
    Start-AzureSqlDatabaseCopy -ServerName $serverName -DatabaseName $databaseOriginal -PartnerDatabase $databaseCopy
    do
    {
        sleep -Seconds 10
        $statusCopy = Get-AzureSqlDatabaseCopy -ServerName $serverName -DatabaseName $databaseCopy
        $exist = $statusCopy.PercentComplete
    	Write-Host $exist
    }
    while ($exist -ne $null)
    
    #Backup Database Copied
    #Doesn't work on Start-AzureSqlDatabaseExport 
    #$sqlContext = New-AzureSqlDatabaseServerContext -ServerName $serverName -UseSubscription
    $credential = Get-Credential
    $sqlContext = New-AzureSqlDatabaseServerContext -ServerName $serverName -credential $credential
    $SubscriptionName =  (Get-AzureSubscription -Current).SubscriptionName
    Write-Host "SubscriptionName:"$SubscriptionName
    Set-AzureSubscription -SubscriptionName $SubscriptionName -CurrentStorageAccountName $StorageAccountName
    $storageContainer = Get-AzureStorageContainer -Name $storageContainerName
    $now=Get-Date -format 'yyyyMMdd_HHmmss'
    $storageBlobName = "BackupOf" + $databaseOriginal + $now + ".bacpac"
    $exportRequest = Start-AzureSqlDatabaseExport -SqlConnectionContext $sqlContext -StorageContainer $storageContainer -DatabaseName $databaseCopy -BlobName $storageBlobName
    Get-AzureSqlDatabaseImportExportStatus -Request $exportRequest
    do
    {
        sleep -Seconds 10
        $statusExport = Get-AzureSqlDatabaseImportExportStatus -Request $exportRequest
        $status = $statusExport.Status
    	Write-Host $status
    }
    while ($status -ne 'Completed')
    
    #Remove Copied Database
    Remove-AzureSqlDatabase -ServerName $serverName -DatabaseName $databaseCopy -Force
    
    Write-Host "The backup is on this url:"
    Write-Host "https://"$StorageAccountName".blob.core.windows.net/"$storageContainerName"/"$storageBlobName".bacpac" -foregroundcolor red -backgroundcolor yellow
    

    Como funciona

Publicado en Azure, PowerShell, Sql Server | Etiquetado | 1 comentario

Analizando los datos y Azure Machine Learning

En esta entrada se describen como conocer los datos en Azure Machine Learing; es una paso necesario para el punto 4.- Determinar los elementos clave a analizar descrito en la entrada Pasos para realizar un experimento de Aprendizaje Automático y Azure Machine Learning.

En la entrada se describen los diferentes aspectos por los que los datos pueden ser analizados.

Tendencia Central

  • Media: El valor promedio de tendencia central.
  • Mediana: El valor de la variable de posición central en un conjunto de datos ordenados.
  • Moda: El valor con una mayor frecuencia en una distribución de datos.

En Azure Machine Learing, disponemos del módulo Descriptive Statistics que nos ofrece un conjunto amplio de estadísticas sobre los datos. Al visualizar la información de este módulo; disponemos la lista de las columnas con los diferentes valores estadísticos de los mismos.

Visualización del Modulo Descriptive Statistics

Visualización del Modulo Descriptive Statistics

Distribución

La forma que presentan los datos: siguen una distribución normal, hay outliers o errores, distribución asimétrica…

  • Histograma en Azure Machine Learning

    Histograma en Azure Machine Learning

    Histograma: Gráfico de barras donde se muestra la frecuencia de los valores de la variable.
    En Azure Machine Learing sobre el menú contextual de los datos seleccionamos Visualize, posteriormente pulsamos una columna y en la derecha se nos muestra el histograma.
  • Rango: Diferencia entre el valor maximo y minimo de la variable.
  • Cuartiles: El valor de la variable al 25% (Q1), 50% (Q2) y 75% (Q3) en un conjunto de datos ordenados. Se suele presentar en un diagrama de caja.
  • Variancia: Media de la diferencia al cuadrado entre los valores y la media de la variable.
  • Desviacion Standard: raiz cuadrada de la variancia.
  • Distribución Asimétrica: Para analizar si la distribución esta más a la izquierda o la derecha de la media. Momento de Pearson o Kurtosis.

En el módulo Descriptive Statistics encontraremos esta información.

Representavidad de la Muestra

Determinan el error en función del numero de valores capturados de la variable.

  • Error Standard:Desviación estándar dividido por la raíz del numero de muestras.
  • Intervalos de Confianza: Intervalo de los datos para un nivel de confianza; suponiendo distribución normal.

Relación entre variables

Determinan la interacción entre los valores de las diferentes variables.

  • Diagrama de Dispersión en Azure Machine Learning

    Diagrama de Dispersión en Azure Machine Learning

    Diagramas de Dispersión:Muestran en un gráfico x/y la relación entre dos variables.
    En Azure Machine Learing sobre el menú contextual de los datos seleccionamos Visualize, posteriormente pulsamos la columna X. En la derecha se nos muestra el histograma. En la combo superior seleccionamos la columna Y.
  • Tablas de Contingencia: Muestran una tabla x/y con la distribución entre dos variables categóricas.
    En Azure Machine Learning se obtiene de la misma forma que el punto anterior.
  • Coeficiente de Correlación: Determina si hay una relación lineal (1), inversamente lineal (-1) o no la hay (0).
    Coeficiente de Correlación en Azure Machine Learning

    Linear Correlation en Azure Machine Learning


    En Azure Machine Learning, disponemos del módulo Linear Correlation que nos retorna un matriz con la coeficientes de correlación entre las diferentes columnas.
  • Tau de Kendal: Dos variables son concordantes si dos valores consecutivos de la primera variable tienen el mismo signo la diferencia de la segunda variable observada. Determina si hay una relación de concordancia (1), discordancia (-1) o no la hay (0).
  • T-Test: Determina si dos muestras son similares o desapareadas.
    En Azure Machine Learning, disponemos del módulo Hypothesis Testing T-Test.
  • Anova: Permite determinar si muestras que presentan una distribución normal y variancia parecida pertenecen al mismo grupo.
  • Chi-Square: Determina si entre dos muestras hay una relación de independencia o dependencia.
Publicado en Machine Learning | Etiquetado | Deja un comentario

Técnicas de Aprendizaje automático y Azure Machine Learning

Estaba pendiente determinar la técnica de aprendizaje a usar en la anterior entrada Pasos para realizar un experimento de Aprendizaje Automático. En esta entrada se describen las principales técnicas existentes de aprendizaje automático. Estas técnicas se pueden clasificar en función de la información que se quiere predecir.
La entrada se organiza en función de esta clasificación:

Módulos de Regresión (Regression)

Técnicas que predicen un dato en función de datos de entrada. Por ejemplo, el precio de un vehículo en función de sus características.

  • Regresión Lineal:
    Método estadístico. En Azure Machine Learning, el módulo Linear Regression.

    VariablePredecida = B0 + B1[Variable1] + B2[Variable2] + … + BN[VariableN] + Error

  • Arboles de Decisión:
    Crea un árbol donde en cada nodo se asocia un decisión en función de una variable. En Azure Machine Learning, el módulo Decision Forest Regression.
    Formula Árbol de decisión
  • Gradient Tree Boosting:
    Aplica una técnica que combina múltiples arboles de decisión. En Azure Machine Learning, el módulo Boosted Decision Tree Regression.
  • Redes Bayesianas:
    Aplica una técnica que combina un grafo de nodos y método de probabilidad que se adapta en los casos que los valores de las variables están influenciados entre ellos. Hay que tener en cuenta que es un método costoso; a mayor numero de variables y valores.
  • Redes Neuronales:
    Aplica una malla de nodos (perceptores) que recibe unos pesos de entradas que se pueden activar (activation function) y generar unos pesos de salida. Los nodos de inicio de la red neuronal son nuestras variables de entrada (deben ser numéricas) y los nodos finales nuestra variable de salida. Es un método que requiere de un gran numero de datos para obtener resultados óptimos. En Azure Machine Learning, el módulo Neural Network Regression.

Módulos de clasificación (Classification)

Técnicas que clasifican la información en un grupo mediante una etiqueta o clase. Por ejemplo, el tipo de vehículo en función de sus características. Incluye todas las técnicas anteriores de regresión.

Módulos de Agrupación (Clustering)

Técnicas que clasifican los datos en grupos, pero a diferencia de la técnica anterior los grupos no se conocen a priori. Es el sistema quien determina los grupos a partir de los patrones obtenidos de los datos. En este caso el grupo creado se llama cluster. Por ejemplo, extraer los segmentos que agrupan nuestros clientes.

Módulos de Recomendación (Recomendation Engines)

Realiza recomendaciones de datos en función de un análisis de los mismos. Por ejemplo, recomendar productos en función de los productos en la cesta de compra. En Azure Machine Learning, se deben utilizar los módulos Train Matchbox Recommender y Score Matchbox Recommender.

Publicado en Azure, Machine Learning | Etiquetado , | Deja un comentario

Pasos para realizar un experimento de Aprendizaje Automático y Azure Machine Learning

En esta entrada se describen los pasos estándar para realizar un experimento de aprendizaje automático y su equivalencia en Azure Machine Learning.
En la galería de ML publique un experimento muy simple que realiza una predicción del precio de un vehículo en función de sus características.

Pasos para realizar un experimento de Aprendizaje Automático

  • 1.- Determinar el objetivo del experimento. Generalmente se inicia con una pregunta a responder. En nuestro caso, puedo determinar el precio de un vehículo en función de sus características?
  • 2.- Obtener los datos. En Azure Machine Learning, estos pueden ser obtenidos de múltiples fuentes (maquina local, Blob Storage, Sql, Url…) y en diferentes formatos (CSV, Excel, OData…). La datos se obtienen:
    • Mediante el módulo Reader que permite acceder a las múltiples fuentes externas; a excepción de la maquina local.
    • Los Saved Datasets que contienen datos almacenados. Para adjuntar datos de la maquina local debemos crear un Saved Dataset.
      AzureML Cargar Datos
  • 3.- Preparar los datos para su posterior análisis.
    • Validar datos vacíos o nulos en las columnas. En Azure Machine Learning disponemos del módulo Missing Values Scrubber que nos ayuda en esta tarea.
    • Validar la corrección de tipos en los datos de las columnas.
    • Validar la corrección de valores en los datos de las columnas.
    • Validar ciertos formatos de datos (Por ejemplo: fechas, emails…)
    • Aglutinar datos similares (Por ejemplo: Irlanda, República de Irlanda, Eire, Eir… pero no Irlanda del Norte).
    • AzureML Preparar Datos

  • 4.- Determinar los elementos clave a analizar. Es un paso fundamental sobretodo en volúmenes grandes de datos ya que sino realizamos la correcta elección gastaremos tiempo de proceso analizando datos innecesarios y también reduciremos la precisión de la predicción. En Azure Machine Learning disponemos del módulo Filter Based Feature Selection que nos ayuda en esta tarea; también podemos determinar directamente la columnas a analizar mediante el módulo Project Columns.
    AzureML Determinar Elementos Clave
  • 5.- Aplicar la técnica de aprendizaje automático. La técnica de análisis se aplica sobre un subconjunto de los datos obteniendo un modelo (entrenamos nuestro experimento). El módulo Train Model es el que realiza dicha tarea que alimentamos con el subconjunto de datos obtenido mediante el módulo Split.
    AzureML Aplicar Tecnica Analisis
    En otra entrada futura se describirán las técnicas de aprendizaje automático de la información y sus usos ;-).
  • 6.- Evaluar los resultados del Experimento. El modelo generado en el paso anterior se aplica sobre el En Azure Machine Learning disponemos del módulo Evaluate Model que nos ayuda en esta tarea. Una buena técnica es aplicar varias técnicas en el paso anterior y evaluar la que nos ofrece mejores resultados. En el siguiente enlace se muestra un ejemplo.
    AzureML Evaluar Experimento
Publicado en Azure, Machine Learning | Etiquetado | 3 comentarios

Información del Sistema en PowerShell

System Information en PowerShell

Se enumeran comandos útiles de PowerShell para determinar información del Sistema:

  • Versión de PowerShell
    (Get-Host).Version
    
  • PowerShell de 32 bits
  • # $True it's running PowerShell 32 bits
    # $False it's running PowerShell 64 bits
    [IntPtr]::size -eq 4
    
  • Versión de Sistema Operativo
    $major = [environment]::OSVersion.Version.Major
    $minor = [environment]::OSVersion.Version.Minor
    

    En función del valor de estas variables y la siguiente tabla anexa podemos determinar el Sistema Operativo.

    Sistema Operativo $major $minor
    Windows 8.1 6 3
    Windows Server 2012 R2 6 3
    Windows 8 6 2
    Windows Server 2012 6 2
    Windows 7 6 1
    Windows Server 2008 R2 6 1
    Windows Server 2008 6 0
    Windows Vista 6 0
    Windows Server 2003 R2 5 2
    Windows Home Server 5 2
    Windows Server 2003 5 2
    Windows XP Professional x64 Edition 5 2
    Windows XP 5 1
    Windows 2000 5 0
  • Versión de Internet Information Server
  • Get-ItemProperty "HKLM:\software\microsoft\InetStp";
    
Publicado en PowerShell, Sistemas | Deja un comentario

Ejecutar comando PowerShell al crear la maquina virtual de Azure

En la anterior entrada vimos la posibilidad de crear una maquina de Azure mediante Powershell. En esta nueva maquina nos puede resultar interesante que se ejecute un comando PowerShell para acabar de configurar ciertos aspectos de la misma. Así dispondríamos de la maquina lista para nuestro uso; sin necesidad de realizar nosotros ninguna tarea repetitiva.

Ejecutando el comando en la creación de la maquina

  • 1.- Creamos el script a ejecutar en la maquina virtual. Por ejemplo test.ps1.
    #Script that creates a directory 
    mkdir("c:\basura2");
    
  • 2.- Ejecutamos NewMachineOnAzure con el nuevo parámetro RunScript donde se indica el script a ejecutar.
    ./NewMachineOnAzure -RunScript "test.ps1"
    
  • 3.- De esta manera al crear la maquina nos ejecutará nuestro script. Podemos visualizar, si lo vemos necesario el log de ejecución en el fichero
    C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.2\CustomScriptHandler.log de la maquina virtual.
    Log de Ejecución Script

    Log de Ejecución Script

Como funciona

Hay un comando de PowerShell Set-AzureVMCustomScriptExtension que permite indicar un script a ejecutar. El script debe estar disponible en una url.

  • 1.- Creamos un contenedor publico donde subir el script.

    $containerStorage = "scripts";	
    New-AzureStorageContainer $containerStorage -Permission Blob
    
  • 2.- Subimos el fichero de script al contenedor.
    $file = ".\" + $RunScript
    Set-AzureStorageBlobContent -Blob $RunScript -Container $containerStorage -File $file
    
  • 3.- Indicamos el script a ejecutar, indicando la url del fichero subido en el paso anterior.
    $fileUri = "https://" + $StorageAccountName + ".blob.core.windows.net/" + $containerStorage + "/" + $RunScript;
    $vmConfig = $vmConfig | Set-AzureVMCustomScriptExtension -FileUri $fileUri -Run $RunScript
    

Nuevo Script NewMachineOnAzure

Os adjunto el nuevo script actualizado ;-)

################################################################################################################################################################  
# 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 = "",
        [Parameter(ValueFromPipeline=$true)]
	[string] $RunScript = ""
)

#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
if ($RunScript -ne "") {
	$containerStorage = "scripts";	
    New-AzureStorageContainer $containerStorage -Permission Blob
	$file = ".\" + $RunScript
    Set-AzureStorageBlobContent -Blob $RunScript -Container $containerStorage -File $file
	$fileUri = "https://" + $StorageAccountName + ".blob.core.windows.net/" + $containerStorage + "/" + $RunScript;
	$vmConfig = $vmConfig | Set-AzureVMCustomScriptExtension -FileUri $fileUri -Run $RunScript
}
$vmConfig | New-AzureVM -ServiceName $ServiceName -Location $Location

Write-Host "Virtual Machine: " $NameMachine " creatted!!!"
Publicado en Azure, PowerShell | Etiquetado | Deja un comentario

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!!!"
Publicado en Azure, PowerShell | Etiquetado | 1 comentario