Cerrar
InicioAzureMicrosoft Azure: cambiar el tamaño de nuestras máquinas virtuales vía PowerShell

Microsoft Azure: cambiar el tamaño de nuestras máquinas virtuales vía PowerShell

Hoy vamos a ver como podemos cambiar el tamaño de nuestras máquinas en Azure vía PowerShell, algo que nos vendrá muy bien cuando además, queremos automatizarlo.

Será un artículo muy sencillo, pero espero que muy útil. Las razones más comunes por las que debemos ajustar los tamaños de nuestras máquina virtuales pueden ser:

  • Ahorra de costes: en entornos cloud que son de pago por uso,  es muy importante que nuestras máquinas virtuales estén correctamente dimensionadas para pagar por lo que consumimos.
  • Rendimiento: el ajustar los requisitos de nuestros servidores en base a los requisitos de los servicios que están ejecutando sobre el (File Server, Exchange, SharePoint, SQL, etc…)

Identificadas las razones por las cuales debemos ajustar correctamente el tamaño de nuestros servidores, es probable/posible, que necesitemos ajustar nuestras máquinas virtuales para que cumplan ambos escenarios.

Dicho esto, os voy a poner un escenario simple  de como podemos ajustar el coste y rendimiento de nuestros servidores virtuales en Azure:

Optimización de costes de nuestras MV en Azure

Como habéis podido apreciar en la infografía, el escenario es poder ajustar el rendimiento en los días de la semana que más lo necesitamos y apagar los servidores cuando no tenemos usuarios conectados.

No voy a tratar al 100% de como configurar una cuenta de automatización, pero aquí os dejo varios enlaces que os pueden interesar:

Dicho esto, lo que haré será dejaros el código de dos scripts muy sencillos, con los que combinándolos podéis configurar el cambio de tamaño de los servidores y encender/apagar dichos servidores.

Antes de nada, debemos conocer el SKU de los servidores de Azure que tenemos por regiones. Necesitamos conocer el nombre de cada SKU, sino no podemos cambiar los tamaños de nuestros servidores. El proceso es muy sencillo, desde una línea de comandos de Azure debéis ejecutar el siguiente cmdlet: Get-AzVmSize -Location <region>

Ahora que ya tenemos el código del SKU de nuestros servidores en la región donde tenemos los tenemos desplegados, ya podemos empezar a crear nuestro script. Aquí os dejo el código que podéis copiar/pegar y probarlo:

# Conexión a Azure con la cuenta de automatización

Disable-AzContextAutosave -Scope Process
$connection = Get-AutomationConnection -Name AzureRunAsConnection
# Wrap authentication in retry logic for transient network failures
$logonAttempt = 0
while(!($connectionResult) -and ($logonAttempt -le 10))
{
$LogonAttempt++
# Logging in to Azure…
$connectionResult = Connect-AzAccount `
-ServicePrincipal `
-Tenant $connection.TenantID `
-ApplicationId $connection.ApplicationID `
-CertificateThumbprint $connection.CertificateThumbprint

Start-Sleep -Seconds 30
}

# Ahora definimos las variables del grupo de recursos, vm, Sku, etc…

$resourceGroup = “Nombre-Grupo-Recursos
$vmName = “Nombre-Servidor
Stop-AzVM -ResourceGroupName $resourceGroup -Name $vmName -Force
$Size = “Standard_D3_v2
$vm = Get-AzVM -ResourceGroupName $resourceGroup -VMName $vmName
$vm.HardwareProfile.VmSize = $Size
Update-AzVM -VM $vm -ResourceGroupName $resourceGroup
Start-AzVM -ResourceGroupName $resourceGroup -Name $vmName

Ahora este código lo guardáis como un .PS1, lo subís al runbook que os creéis y le asignáis una programación para que se ejecute cuando lo necesitéis.

Aunque es súper sencillo, el script realiza las siguientes tareas:

  1. Se conectará a Azure
  2. Obtiene el nombre del servidor sobre el cual vamos a aplicar un nuevo SKU
  3. Apagamos el servidor (recordar que cuando hacemos un cambio de SKU, el servidor siempre se reiniciará)
  4. Definimos el valor del SKU en la variable $Size
  5. Actualizamos la configuración de hardware del equipo (Update-AzVM) con el nuevo SKU
  6. Iniciamos nuevamente el servidor ya con el nuevo SKU

Pues ya tenéis el script listo, como veis es muy sencillo. Ahora, como habíamos comentado, de este vamos a “sacar” dos scripts más:

Apagado:

Disable-AzContextAutosave -Scope Process
$connection = Get-AutomationConnection -Name AzureRunAsConnection
# Wrap authentication in retry logic for transient network failures
$logonAttempt = 0
while(!($connectionResult) -and ($logonAttempt -le 10))
{
$LogonAttempt++
# Logging in to Azure…
$connectionResult = Connect-AzAccount `
-ServicePrincipal `
-Tenant $connection.TenantID `
-ApplicationId $connection.ApplicationID `
-CertificateThumbprint $connection.CertificateThumbprint

Start-Sleep -Seconds 30
}

$resourceGroup = “Nombre-Grupo-Recursos
$vmName = “Nombre-Servidor
Stop-AzVM -ResourceGroupName $resourceGroup -Name $vmName -Force

Iniciado:

Disable-AzContextAutosave -Scope Process
$connection = Get-AutomationConnection -Name AzureRunAsConnection
# Wrap authentication in retry logic for transient network failures
$logonAttempt = 0
while(!($connectionResult) -and ($logonAttempt -le 10))
{
$LogonAttempt++
# Logging in to Azure…
$connectionResult = Connect-AzAccount `
-ServicePrincipal `
-Tenant $connection.TenantID `
-ApplicationId $connection.ApplicationID `
-CertificateThumbprint $connection.CertificateThumbprint

Start-Sleep -Seconds 30
}

$resourceGroup = “Nombre-Grupo-Recursos
$vmName = “Nombre-Servidor
Start-AzVM -ResourceGroupName $resourceGroup -Name $vmName -Force

Ahora con todo estos, ya podemos combinarlos en diferentes runbooks, con sus programaciones y cumplir el objetivo de la infografía.

Con esto tenéis una referencia inicial de la configuración, pero todo el proceso lo podéis hacer con un solo runbook, Para ello, debéis modificar el script y ajustarlo para que compruebe los días de ejecución, etc.. pero vamos, para que empecéis a configurarlo, este script hace su trabajo.

Como siempre, ahora, os toca probarlo a vosotros!!!

Microsoft Azure: Pas
NO HAY COMENTARIOS

Este sitio web utiliza cookies. Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra política de cookies. ACEPTAR

Aviso de cookies
Share This