Azure Runbook para apagar máquinas virtuales IaaS | PowerShell

En Microsoft Azure, tenemos la capacidad de generar cuentas de automatización las cuales nos permiten ejecutar workflows o scripts de PowerShell de forma programada para realizar por ejemplo una acción sobre máquinas virtuales IaaS.

En esta oportunidad mostraremos como realizar un workflow para realizar el apagado y encendido de todas las máquinas virtuales de un grupo de recursos y de una máquina especifica del grupo de recursos.

Requerimientos

  • Contar una suscripción de Microsoft Azure.
  • Tener generada una cuenta de automatización y un runbook.
  • Un despliegue de máquinas virtuales en ARM (IaaS v2).
  • Un usuario generado en el servicio de directorio activo de Azure como co-administrador, para utilizar sus credenciales en el runbook (No funciona con un usuario Live/ Microsoft Account, ya que no podemos generar la redirección hacia live.com para autenticar).
  • Generar una credencial desde el Asset de la cuenta de automatización con el usuario generado del punto anterior.

Enlaces útiles:

  • Crear una cuenta de automatización
  • Crear un runbook
  • Crear un usuario de Azure AD
  • Credential assets Azure Automation

¿Cómo crear los workflows en los runbook?

Solo debemos copiar, pegar, guardar y publicar el siguiente workflow:

Apagar todas las máquinas virtuales de un grupo de recursos:


Workflow ApagarTodasLasMaquinas{
Param
    (
        [Parameter(Mandatory=$true)]
        [String]
        $AzureResourceGroup,
                        [Parameter(Mandatory=$true)]
        [Boolean]
                        $Shutdown,
                        [Parameter(Mandatory=$true)]
        [String]
                        $AssetCredential
    )

$Credential = Get-AutomationPSCredential -Name $AssetCredential

Add-AzureRmAccount  -Credential $Credential 

  Get-AzureRmVM -ResourceGroupName $AzureResourceGroup | ForEach-Object {

                        if($Shutdown -eq $true){

                                    Write-Output "Stopping '$($_.Name)' ..."
                                       Stop-AzureRmVM -ResourceGroupName $AzureResourceGroup -Name $_.Name -Force
                        }
                        else{
                                    Write-Output "Starting '$($_.Name)' ..."
                                    Start-AzureRmVM -ResourceGroupName $AzureResourceGroup -Name $_.Name
                        }
            }
}

Como ven se debe ingresar como parámetro el nombre de las credenciales, el grupo de recursos y la acción a relizar(Apagado o encendido).

Apagar una máquina virtual de un grupo de recursos:

Workflow ApagarUnaLasMaquinas{
    Param
        (
            [Parameter(Mandatory=$true)]
            [String]
            $AzureResourceGroup,
                 [Parameter(Mandatory=$true)]
            [Boolean]
                 $Shutdown,
                 [Parameter(Mandatory=$true)]
            [String]
                 $AssetCredential,
            [Parameter(Mandatory=$true)]
            [String]
                 $AzureRmVmName
        )

    $Credential = Get-AutomationPSCredential -Name $AssetCredential

    Add-AzureRmAccount  -Credential $Credential 

                if($Shutdown -eq $true)
                {

                     Write-Output "Stopping '$($AzureRMVMName)' ..."
                        Stop-AzureRmVM -ResourceGroupName $AzureResourceGroup -Name $AzureRMVMName -Force
                     }
                else
                {

                     Write-Output "Starting '$($AzureRMVMName)' ..."
                         Start-AzureRmVM -ResourceGroupName $AzureResourceGroup -Name $AzureRMVMName

                  }

 }

Como ven se debe ingresar como parámetro el nombre de las credenciales, el grupo de recursos, la acción a realizar(Apagado o encendido) y el nombre de la máquina virtual.

Listo, ya podemos utilizarlo para programar nuestras tarras de apagado y encendido.

Saludos,

Advertisements

2 thoughts on “Azure Runbook para apagar máquinas virtuales IaaS | PowerShell

Add yours

  1. Buenas, estoy siguiendo tu manual, pero siempre acaba devolviendome este error.

    PSComputerName : localhost
    PSSourceJobInstanceId : 870b4f56-ebac-4632-883a
    Environments : {AzureCloud, AzureChinaCloud, AzureUSGovernment}
    Context : Microsoft.Azure.Commands.Profile.Models.PSAzureContext
    Stopping ‘UbuntuServer’ …
    Stop-AzureRmVM : No tenant found in the context. Please ensure that the credentials you provided are authorized to
    access an Azure subscription, then run Login-AzureRMAccount to login.
    At ApagadoBlog:35 char:35
    +
    + CategoryInfo : CloseError: (:) [Stop-AzureRmVM], ArgumentException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.StopAzureVMCommand

    Las credenciales son del usuario y password con el que entro a la máquina que pretendo apagar. Tienese alguna idea de donde está el problema?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

Up ↑

%d bloggers like this: