如何按计划扩大或缩小 Azure 应用服务实例的大小?

Posted

技术标签:

【中文标题】如何按计划扩大或缩小 Azure 应用服务实例的大小?【英文标题】:How to scale Azure App Service instance size up or down on a schedule? 【发布时间】:2016-03-09 00:52:20 【问题描述】:

关于 Azure App Service 的自动缩放,我只找到以下内容。

Scale a web app in Azure App Service

这仅允许扩展到更多或更少的实例。它不允许扩展到更大或更小的实例。

我想按计划在小型、中型和大型之间安排应用服务实例大小。是否有 API 可以让我这样做?

非常感谢。

【问题讨论】:

【参考方案1】:

我认为您正在寻找的是按计划或 CPU 类型的指标自动缩放 Azure WebApp

1.将您的托管计划更改为标准,您无法在标准层以下设置自动缩放。

2.在 portal.azure.com 上使用 Azure 预览门户。

3.Azure Preview Portal:正确的设置是使用“CPU百分比”

4.Azure 门户,您可以将 Scale by Metrics 从 None 设置为 CPU

5.Set Instance count 介于 1 和 4 或 8 之间,以后可以更改,最多可以增加到 10。

更多细节你可以参考这篇文章http://blogs.msdn.com/b/devschool/archive/2015/05/24/azure-webjobs.aspx这篇文章没有讨论的是按计划扩展,我想你到了那里就知道了。 确保使用 portal.azure.com

【讨论】:

不。这仅允许实例数量,而不是实例大小。【参考方案2】:

很遗憾,目前无法按计划扩展 Azure 应用服务实例的大小(即应用服务计划定价层)。

截至目前,Azure App Service 仅支持按计划进行水平扩展(即实例计数扩展),但不支持垂直扩展(即实例大小扩展)。

希望这会有所帮助!

【讨论】:

【参考方案3】:

没有简单的方法可以做到这一点。

但是,如果您愿意编写一些代码,您可以使用带有 Azure 自动化的 PowerShell api 来为自己创建此功能。

您将使用 API 每 X 分钟检查一次指标(如 CPU),如果 CPU 高于 Y,则向上扩展至下一个更大的实例。如果低于您的阈值,则按比例缩小。

【讨论】:

谢谢。您是否知道这些 API 允许放大和缩小实例大小? @JacquesBosch:是的,它们绝对支持上下缩放实例大小。如果我没记错的话,size 属性是在应用服务计划而不是网站上,所以这就是您要查看的位置。 是的,我知道实例大小在计划级别。再次感谢。我去看看。【参考方案4】:

使用powershell,你可以像这样切换web应用的应用服务计划

PS C:\> $Resource = Get-AzureRmResource -ResourceType "microsoft.web/sites" -ResourceGroupName "ResourceGroup11" -ResourceName "ContosoSite" 
PS C:\> $Resource.Properties.ServerFarmId = "/subscriptions/subscr_id/resourceGroups/FriendsRGrp/provider
s/Microsoft.Web/serverfarms/FriendsPlan"
PS C:\> $Resource | Set-AzureRmResource -Force

这里的服务器场 ID 只不过是服务计划的资源 ID,您可以通过查看计划的属性从新门户获得。

您可以有两个服务计划,一个是基本的,另一个是标准的。然后,您可以使用 Azure 自动化在工作日升级到标准并在周末降级到基本。

我了解您的要求是更改现有计划本身,而不是在计划之间切换。我认为这应该是可能的,虽然我自己没有尝试过。但是如果你通过上面返回的Azure Web应用资源的Resource.Properties中返回的属性,你应该能够弄清楚。

【讨论】:

【参考方案5】:

实际上,您可以自动扩展(垂直,即更改服务计划)以及扩展(实例计数)。

横向扩展选项一直存在,允许您设置规则(例如 CPU 超过 %、内存超过阈值等)

纵向扩展选项需要使用 Azure 自动化。它有完整的文档here

希望有帮助!

【讨论】:

【参考方案6】:

由于缺乏简单的解决方案,我创建了一个一键部署来完成您的要求。

https://github.com/jraps20/jrap-AzureVerticalScaling

概述

我的方法使用 Azure 自动化 Runbook。通过一键部署方法,您可以在几分钟内完全启动并运行。两个互补的运行手册(ScaleAppServicePlansUp 和 ScaleAppServicePlansDown)协同工作以存储、读取和修改您选择的任何应用服务计划。这些 Runbook 的主要目标是非生产环境。

不幸的是,代码太长,无法包含在此答案中(所以是的,这主要是仅链接的答案)。

伪代码

缩小

Iterate across all Resource Groups (or pass in specific one)
Iterate across all App Service Plans (or pass in specific one)
Iterate across all App Services (identify Tier-specific settings)

During iteration, the current App Service Plan Service Tier is stored in Azure Automation Variables (3 distinct variables for each App Service Plan)

Within each App Service Plan, each App Service is iterated to identify tier-specific settings. Some of these settings include: AlwaysOn, Use32BitWorkerProcess, and ClientCertEnabled. All current settings are stored in Azure Automation Variables.

All App Service Plans are then scaled down to the FREE tier.

放大

Iterate across all Resource Groups (or pass in specific one)
Iterate across all App Service Plans (or pass in specific one)
Iterate across all App Services (identify Tier-specific settings)

During iteration, the original App Service Plan Service Tier is retrieved from Azure Automation Variables (3 distinct variables for each App Service Plan)

Within each App Service Plan, each App Service is iterated and any previously stored tier-specific settings are retrieved.

All App Service Plans are then scaled up to their original tier.
All App Services with tier-specific settings are reapplied to their original values.

其他资源

Video tutorial of one-click deployment Additional write-up with Sitecore (enterprise CMS on PaaS) example:

免责声明

我意识到Sam Spoerles technique 在完成我的工作之后。我的方法比他的好处如下:

一键部署到 Azure 通用基于参数的特定 使用更新的Az modules instead of AzureRm modules 依靠存储来保留以前的状态,通过自动化变量

【讨论】:

以上是关于如何按计划扩大或缩小 Azure 应用服务实例的大小?的主要内容,如果未能解决你的问题,请参考以下文章

缩小 Azure Web 应用程序时打开套接字会发生啥情况?

Azure 函数实例和缩放

必看!如何计划您的Microsoft Teams+Azure之旅

如何淡入和淡出小部件(包括缩小/扩大其大小)?

delphi7中如何设定窗体里的组件随窗体变化?(按比例扩大或缩小)

Azure Functions 主机实例与 VM 实例