Saltar al contenido principal

Ahorro de costos con Azure para sus aplicaciones web

· 5 min de lectura

Introducción

Muchas de nuestras aplicaciones web hospedadas en Azure se crean sobre un servicio PaaS, como Azure App Service y SQL Azure. Estos servicios generalmente se facturan en función de la cantidad de recursos que consumen. Cuantos más recursos consumen, más pagamos. Sin embargo, hay algunas mejores prácticas que podemos seguir para reducir la cantidad de recursos consumidos y, por lo tanto, reducir la cantidad de dinero que pagamos. Especialmente si estamos ejecutando una aplicación web que no se usa 24/7 o solo se usa durante el horario comercial en la misma zona horaria.

Uno de los principios de la computación en la nube es el elasticidad, lo que significa que podemos escalar hacia arriba o hacia abajo los recursos que consume nuestra aplicación en función de la demanda o el horario. Esta es una gran característica de la nube, pero debemos ser conscientes de las implicaciones de costos de esta característica. Si ampliamos nuestra aplicación para manejar un pico de tráfico, también debemos reducir los recursos cuando el tráfico vuelva a la normalidad.

En el Servicio de aplicaciones de Azure tenemos dos formas de escalar verticalmente, verticalmente o abajo y escalar horizontalmente o entrar. Escalar hacia arriba o hacia abajo significa que podemos cambiar el tamaño de la máquina virtual en la que se ejecuta nuestra aplicación. Escalar horizontalmente o en significa que podemos agregar o quitar máquinas virtuales de nuestra aplicación. Podemos escalar hacia arriba o hacia abajo y escalar hacia afuera o hacia adentro al mismo tiempo. Por ejemplo, podemos escalar verticalmente el tamaño de las máquinas virtuales y agregar más máquinas virtuales a nuestra aplicación.

Así que si tenemos una Web App de producción que no se utiliza 24/7, debemos considerar lo siguiente:

  • Reduzca la aplicación y la base de datos a los recursos mínimos necesarios durante las horas de menor actividad.
  • Escale verticalmente la aplicación y la base de datos a los recursos máximos necesarios durante las horas punta. (Además, debemos habilitar el escalado automático para escalar horizontalmente la aplicación y agregar más instancias cuando sea necesario, a través de las reglas que defina para escalar horizontalmente o en.

El proceso de escalado vertical y vertical se puede reducir manualmente desde el portal, como se muestra en la imagen.

Sin embargo, este proceso puede ser tedioso y propenso a errores. Podemos automatizar el proceso para escalar hacia arriba y hacia abajo la aplicación web y la base de datos durante la noche y los fines de semana. Esto reducirá la cantidad de recursos consumidos y, por lo tanto, reducirá la cantidad de dinero que pagamos.

Solución

Podemos utilizar Automatización de Azure para programar un script de PowerShell para reducir la escala de la aplicación web y la base de datos durante la noche y los fines de semana. También podemos programar otro script de PowerShell para escalar verticalmente la aplicación web y la base de datos antes del horario comercial.

Deberá configurar una identidad asignada por el sistema a la cuenta de Azure Automation para conectarse con los recursos de Azure. Puede seguir los pasos de este artículo.

Exploremos los scripts de PowerShell que podemos usar:

Escalar verticalmente o reducir verticalmente la aplicación web

$resourceGroupName = '<Your Resource Group>'
$appServicePlanName = '<Your App Service>'
$tier = '<Tier you would like to scale down - For example: Basic>'
try
{
filter timestamp {"[$(Get-Date -Format G)]: $_"}
Write-Output "Script started." | timestamp
Write-Verbose "Logging in to Azure..." -Verbose
Connect-AzAccount -Identity
Write-Verbose "Login sucessful. Proceding to update service plan..." -Verbose
Set-AzAppServicePlan -ResourceGroupName $resourceGroupName -Name $appServicePlanName -tier $tier
Write-Verbose "Service plan updated. Getting information about the update..." -Verbose
$appPlanService = Get-AzAppServicePlan -ResourceGroupName $resourceGroupName -Name $appServicePlanName
Write-Output "App Service Plan name: $($appPlanService.Name)" | timestamp
Write-Output "Current App Service Plan status: $($appPlanService.Status), tier: $($appPlanService.Sku.Name)" | timestamp
Write-Output "Script finished."
}
catch {
Write-Verbose "Error... '$_.Exception'" -Verbose
Write-Error -Message $_.Exception
throw $_.Exception
}

Escalar verticalmente o reducir el SQL Azure

$resourceGroupName = '<Your Resource Group>'
$SqlServerName = '<Your SQL Azure Server Name>'
$DatabaseName = '<Your SQL Azure DB Name>'
$Edition = '<Tier you would like to scale down - For example: Basic>'
$PerfLevel = '<Tier you would like to scale down - For example: Basic>'
try{
filter timestamp {"[$(Get-Date -Format G)]: $_"}
Write-Output "Script started." | timestamp
Write-Verbose "Logging in to Azure..." -Verbose
Connect-AzAccount -Identity
Write-Verbose "Login sucessful. Proceding to update SQL Server plan..." -Verbose
Set-AzSqlDatabase -ResourceGroupName $resourceGroupName -DatabaseName $DatabaseName -ServerName $SqlServerName -Edition $Edition -RequestedServiceObjectiveName $PerfLevel
Write-Verbose "SQL Server plan updated. Getting information about the update..." -Verbose
$sqlServerPlan = Get-AzSqlDatabase -ResourceGroupName $resourceGroupName -DatabaseName $DatabaseName -ServerName $SqlServerName
Write-Output "SQL Server Edition: $($sqlServerPlan.Edition)" | timestamp
Write-Output "Current SQL Server Plan status: $($sqlServerPlan.Status)" | timestamp
Write-Output "Script finished."
}
catch{
Write-Verbose "Error... '$_.Exception'" -Verbose
Write-Error -Message $_.Exception
throw $_.Exception
}

Una vez creados los Runbooks en Automatización de Azure, puede crear las programaciones y vincularlas a las programaciones.

Conclusión

Hemos visto cómo podemos usar Azure Automation y PowerShell para programar el escalado vertical o vertical de la aplicación web y SQL Azure. Esto nos ayudará a ahorrar dinero y también a evitar el tiempo de inactividad durante el horario comercial al agregar los recursos que no usamos por la noche.