Ejecución de scripts de PowerShell en Azure Automation y Backup de SQL Azure


Que es Azure Automation?

azureautomationAzure Automation es un servicio que permite realizar procesos contra recursos de Azure. Esto nos permite automatizar tareas que realizamos con frecuencia. Las tareas que queremos automatizar en Azure Automation se llaman RunBooks. Las tareas se realizan mediante comandos de PowerShell.
El RunBook puede ser principalmente de dos tipos:

  • PowerShell: Directamente el script de PowerShell.
  • Graphical: Editor gráfico que permite ir construyendo el script PowerShell.

Pasos para crear nuestra tarea en Azure Automation

  • Crear Automation Account

    Crear Automation Account

    1.- Crear el Azure Automation.
  • 2.- Crear el RunBook.
  • 3.- Editar y añadir nuestro script de PowerShell. Podemos probarlo en el Test Pane
  • 4.- Publicar el RunBook.
  • 5.- Una vez publicado; podemos programarlo para ejecutarlo periódicamente Schedule o ejecutarlo a demanda mediante un Webhook. Un Webhook es una url a la cual realizamos un post y permite lanzar la ejecución del RunBook.
    Crear RunBook

    Crear RunBook

Ejecución de Scripts de PowerShell en entorno de Azure Automation

En el nuevo portal de Azure se utiliza un nuevo modelo de API AzureRM para trabajar con los recursos de Azure. Este API es bastante parecida al anterior aunque suelen cambiar los parámetros de las funciones. Para logarse y poder utilizar los comandos de PowerShell; a continuación se muestran los nuevos comandos que lo posibilitan.

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

Se actualizado el script que realiza un backup de SQL Azure, con la nueva API 🙂

$ResourceGroupName = "jobs"     #Nombre del Resource Group
$serverName = "sqlserver"  #Nombre del Servidor de Sql
$databaseOriginal = "db"   #Nombre de la base de datos a realizar el backup
$databaseCopy = "dbCopy" #Nombre de la base de datos temporal usada para realizar el backup
$storageUrl = "https://{storageaccountname}.blob.core.windows.net/{containername}/"   #Url del storage donde poner el backup
$storageKey = "sadfsdafsdaf"  #Secret Key del Storage
$SubscriptionId = "dadd4a7b-2345-31dd-ba34-abc1774513c3"   #Identificador de la subscripcion
$databaseLogin = "login"  #Login del usuario del SQL
$databasePassword="passowrd"  #Contraseña del usuario de SQL

Write-Output -inputobject "Backuping Database..."

Write-Output -inputobject "Authenticating..." 
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
Select-AzureRmSubscription -SubscriptionId $SubscriptionId
Write-Output -inputobject "Authenticated"

Write-Output -inputobject "CopyDatabase..." 
New-AzureRmSqlDatabaseCopy -ResourceGroupName $ResourceGroupName -ServerName $serverName -DatabaseName $databaseOriginal -CopyDatabaseName $databaseCopy
do
{
    sleep -Seconds 10
    $status = Get-AzureRmSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $serverName -DatabaseName $databaseCopy
    $exist = $status.Status
}
while ($exist -ne 'Online')
Write-Output -inputobject "Copy Database Completed"

$now=Get-Date -format 'yyyyMMdd_HHmmss'
$storageBlobName = "BackupOf" + $databaseOriginal + $now + ".bacpac"
$storageUrl = $storageUrl + $storageBlobName
    
                   
$databaseSecurePassword =  ConvertTo-SecureString -String $databasePassword -asPlainText -Force                   
$exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $serverName -DatabaseName $databaseCopy -AdministratorLogin $databaseLogin -AdministratorLoginPassword $databaseSecurePassword -StorageKey $storageKey -StorageUri $storageUrl -StorageKeyType "StorageAccessKey"   
Write-Output -inputobject "Exporting to Bacpac..."
do
{
    sleep -Seconds 10
    $statusExport = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
    $status = $statusExport.Status
}
while ($status -ne 'Succeeded')
Write-Output -inputobject "Export to Bacpac Completed" 
Write-Output -inputobject "Delete CopyDatabase..."
Remove-AzureRmSqlDatabase -ResourceGroupName $ResourceGroupName -ServerName $serverName -DatabaseName $databaseCopy -Force
Write-Output -inputobject "Backup de Database Completed"
 
Write-Output "The backup is on this url:"
Write-Output "https://"$StorageAccountName".blob.core.windows.net/"$storageContainerName"/"$storageBlobName".bacpac"

Problema de Versión

Al ejecutar puede ser que os encontréis un error de comando no reconocido error. Este error es debido a que no tenemos disponible la ultima versión de AzureRM.

New-AzureRmSqlDatabaseExport : The term 'New-AzureRmSqlDatabaseExport' is not recognized as the name of a cmdlet, 
function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the 
path is correct and try again.

Se describen los pasos para actualizar a la ultima versión de PowerShell:

  • 1.- Añadir el modulo ModulesInAutomationToLatestVersion que contiene el comando PowerShell que permite migrar a la ultima versión de la API AzureRM y importarlo en nuestro Azure Automation.
    Búsqueda del Modulo ModulesInAutomationToLatestVersion

    Búsqueda del Modulo ModulesInAutomationToLatestVersion


    Importar Modulo ModulesInAutomationToLatestVersion

    Importar Modulo ModulesInAutomationToLatestVersion

  • 2.- La importación nos ha creado un nuevo RunBook con el nombre Update-ModulesInAutomationToLatestVersion. Nos vamos al Test Pane del RunBook (tras editar y salvar ;-)). Aquí introducimos los parámetros que se nos solicitan:
    • RESOURCEGROUPNAME: El grupo que tiene nuestro Azure Automation.
    • AUTOMATIONACCOUNTNAME: Nombre de la cuenta de Azure Automation.
    • NEWMODULENAME: Nombre del Modulo que queremos subir a la ultima versión.

    OJO: Rellanar todos los parámetros, ya que sino afectaríamos a todos los Azure Automation.

    Upgrating modules

    Upgrating modules

Anuncios
Esta entrada fue publicada en Azure, Sql Azure. Guarda el enlace permanente.

2 respuestas a Ejecución de scripts de PowerShell en Azure Automation y Backup de SQL Azure

  1. Pingback: Backup de Base de Datos SQL Azure Mejorado y PowerShell | Pensando bajo la lluvia

  2. Pingback: Azure Sdk For Net | 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