[Azure] 我尝试使用 Azure 自动化自动缩放 SQL 数据库的 DTU。

目录
您好,我是系统开发部的 Hase。
我目前正在使用 Azure 提供的应用服务和 SQL 数据库开发一个 Web 系统,但在开始运行之前,我正在考虑实施自动缩放以尽可能降低成本。
但是,应用服务具有自动缩放功能,而 SQL 数据库则没有。
我想知道是否有办法做到这一点,所以我做了一些研究,找到了一篇文章,文章说可以使用名为 Azure Automation 的功能自动缩放 SQL 数据库。
实际测试时,自动缩放功能运行完美,所以这次我想介绍一下它的实现方法。
前提
SQL 数据库有多种购买模式(DTU、基于 vCore 的和无服务器的),但在本例中我们将使用 DTU。
什么是 Azure 自动化?
- Azure Portal 的一项功能是能够自动执行任务(在 Azure Automation 中称为 Runbook)。
- 可以通过指定时间定期执行(例如,每天午夜)
- Runbook 可以用 PowerShell、PowerShell Workflow、Python 2 和 DSC 编写。
实现图像
- 使用 PowerShell 在 Azure Automation 中创建 SQL 数据库扩展运行手册。
- 将创建的运行手册添加到计划中,以便在指定时间自动执行该运行手册。
程序
添加 Azure 自动化帐户
① 登录 Azure 门户
② 从 Azure 服务中选择“自动化帐户”
③ 选择“+添加”以添加自动化帐户

④ 输入您的自动化帐户信息并创建它
| 姓名 | 任何名字 |
|---|---|
| 订阅 | 选择您正在使用的订阅方案 |
| 资源组 | 选择您正在使用的资源组 |
| 地方 | 服务器区域 |
| 创建 Azure 运行身份帐户 | 选择“是”*1 |
*1) 请务必选择“是”以创建 Azure 运行身份帐户。⇒
要使用
Runbook 操作 SQL 数据库,需要批准运行身份帐户。如果选择“否”,则无法从 Runbook 执行 SQL 数据库操作。
创建完成后,您的自动化帐户将出现在列表中。

向已添加的自动化帐户添加模块
要从 Runbook(任务)中操作 SQL 数据库,请添加以下模块:
| Az.Account | 用于管理所有 Azure 凭据和常用配置的模块 |
|---|---|
| AZ自动化 | 管理 Azure 自动化相关信息的模块 |
| SQL Server | 包含支持最新 SQL 功能的新 cmdlet 的模块 |
⑤ 每个自动化帐户都配置了模块,因此请选择您创建的帐户。

⑥ 选择“模块库”
共享资源 > 模块库

⑦ 从模块库屏幕安装要注册的模块
在这里我们注册 Az.Account 模块(安装顺序无关紧要)。

8. 将显示 Az.Accounts 模块的详细信息屏幕。单击“导入”。

9. 将出现导入确认屏幕,点击“确定”。

Az.Accounts 模块导入开始。
如果导入成功,屏幕右上角将显示“导入成功”的消息。
10. 以同样的方式导入剩余的模块。
创建运行手册(任务)
⑪ 从您创建的自动化帐户中选择“运行手册”。
流程自动化 > 运行手册

⑫ 选择“+ 创建运行手册”以创建运行手册
⑬ 输入运行手册信息并创建它
| 姓名 | 任何名字 |
|---|---|
| 运行手册类型 | 电源外壳 |
| 解释 | 可选描述 |

创建的运行手册将显示在列表中。

*AzureAutomationTutorial、AzureAutomationTutorialPython2 和 AzureAutomationTutorialScript 是创建自动化帐户时默认提供的运行手册,因此本次我们不会使用它们。
在运行手册中编写代码
在创建的 Runbook 中编写执行自动缩放的流程。
* 使用 PowerShell 作为编程语言。
■ 大致实现流程
① 获取 Azure Automation 连接信息
② 使用获取的 Azure Automation 连接信息连接到您的 Azure 帐户
③ 更改 SQL 数据库规范
※ 要使用 PowerShell 更改 SQL 数据库规范,您必须连接到您的 Azure 帐户。
⑭ 选择您创建的运行手册
⑮ 选择“编辑”打开代码编辑器

在此处编写代码
16. 编写一个流程来获取 Azure Automation 连接信息
■ 代码
# 编写命令以获取 Azure Automation 连接信息并将其分配给变量 $connection = Get-AutomationConnection -Name "{自动化帐户连接名称}"
■ 命令详情
| 获取自动化连接 | |
|---|---|
| 获取有关 Azure Automation 连接的信息。 | |
| 选项 | |
| -姓名 | 要检索信息的 Azure 帐户名称 |
⑰ 可以在“连接”中确认步骤 21 中的自动化帐户连接名称。
共享资源 > 连接

18. 使用您获得的 Azure Automation 连接信息连接到您的 Azure 帐户。
■ 代码
# 授权 Azure 帐户 Connect-AzAccount -Tenant $connection.TenantID -ApplicationId $connection.ApplicationID -CertificateThumbprint $connection.CertificateThumbprint
* 如果要在表达式中间另起一行,请在末尾添加反引号(`)。
■ 命令详情
| 连接-AzAccount | |
|---|---|
| 连接到您的 Azure 帐户 | |
| 选项 | |
| -租户 | Azure Automation 租户 ID |
| -应用程序ID | Azure 自动化应用程序 ID |
| -证书指纹 | Azure 自动化证书信息 |
⑲ 更改 SQL 数据库规范
■ 代码
# 将 SQL 数据库计划更改为 S0(标准 DTU 10) Set-AzSqlDatabase -ResourceGroupName "{资源组名称}" ` -DatabaseName "{SQL 数据库名称}" -ServerName "{SQL 服务器名称}" ` -Edition "Standard" -RequestedServiceObjectiveName "S0"
■ 命令详情
| 设置-AzSql数据库 | |
|---|---|
| 设置 SQL 数据库属性 | |
| 选项 | |
| -资源组名称 | 您正在使用的资源组 |
| -数据库名称 | 要使用的 SQL 数据库名称。 |
| -服务器名称 | 要使用的 SQL Server 的名称 |
| -版 | 您想更改为的套餐(基本套餐、标准套餐或高级套餐) |
| -请求的服务对象名称 | 输入您要更改的 DTU(例如 S1、P2 等) |
已完成的代码
合并以上代码将得到以下结果。
# 编写命令以获取 Azure 自动化连接信息并将其分配给变量 $connection = Get-AutomationConnection -Name "{自动化帐户连接名称}" # 授权您的 Azure 帐户 Connect-AzAccount -Tenant $connection.TenantID ` -ApplicationId $connection.ApplicationID -CertificateThumbprint ` $connection.CertificateThumbprint # 将 SQL 数据库计划更改为 S0(标准 DTU 10) Set-AzSqlDatabase -ResourceGroupName "{资源组名称}" ` -DatabaseName "{SQL 数据库名称}" -ServerName "{SQL 服务器名称}" ` -Edition "Standard" -RequestedServiceObjectiveName "S0"
检查已创建的运行手册的运行情况
⑳ 打开测试窗口,检查创建的运行手册的操作。
在代码编辑器屏幕上选择“测试窗口”
21. 选择“开始”运行测试
22. 如果测试成功完成,则会显示流。

如果测试失败,错误信息将以红色显示。
您可以确认目标 SQL 数据库的计划已更改。
将创建的运行手册注册到日程表中
将创建的 Runbook 注册到计划任务中,以便定期执行。
* 要将 Runbook 注册到计划任务中,您必须先发布该 Runbook,使其可以在生产环境中使用。
22) 要发布运行手册,请单击“发布”并选择“是”。

如果运行手册发布成功,屏幕右上角将显示一条消息。
22. 接下来,点击“链接到日程表”进行日程注册。

22. 将出现日程设置屏幕,请创建一个新的日程并注册它。
安排日程 > + 创建新日程。
*如果已有日程安排,则无需创建新日程。
27. 输入日程时间设置信息,然后点击“创建”。
| 姓名 | 任何名字 |
|---|---|
| 解释 | 可选描述 |
| 开始时 | 选择任意开始日期和时间 |
| 时区 | 选择您所需的时区 |
| 重复 | 请选择“一次”或“定期”。 |
| 间隔 | (可选)选择执行间隔(仅当“重复”设置为“定期”时) |
| 设置到期日 | 请选择“是”或“否”。 |
| 到期日期 | (可选)选择到期日期和时间(仅当“设置到期日期”设置为“是”时) |
22. 创建的日程表将被选中,点击“确定”。
如果日程注册成功,屏幕上将显示一条蓝色背景的消息。
22) 当计划执行时,它将显示在作业列表中。
流程自动化 > 作业

概括
以上步骤将启用 SQL 数据库的自动扩展功能。
顺便说一下,要实现横向扩展/缩减,你只需要创建两个类似的 Runbook 并重写计划(-RequestedServiceObjectiveName)部分。
然而,它只能在指定时间运行,而且无法使用关键负载状态作为阈值进行自动扩缩容,这算是一个缺点……
如果有人知道如何做到这一点,请务必告诉我!
另外,虽然这次我们使用了 DTU,但我认为您也可以用其他采购模型以类似的方式实现这一点,所以请尝试一下。
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
就这些了。
再次感谢您抽出时间。
1