在 Azure Synapse Analytics 中,可以使用 Synapse Pipelines 来自动化暂停和恢复专用 SQL 池。 暂停和恢复可用于节省专用 SQL 池的成本。 此解决方案可以轻松纳入现有的数据编排过程中。
以下步骤将指导你设置自动暂停和恢复。
- 创建管道。
- 在管道中设置参数。
- 确定 Azure Synapse 工作区中专用 SQL 池的列表。
- 从列表中筛选不想暂停或恢复的所有专用 SQL 池。
- 循环访问每个专用 SQL 池,并:
- 检查专用 SQL 池的状态。
- 评估专用 SQL 池的状态。
- 暂停或恢复专用 SQL 池。
这些步骤被排列在 Azure Synapse 的简单流程中:

根据环境的性质,此处所述的整个过程可能不适用,你可能只想选择相应的步骤。 此处介绍的过程可用于暂停或恢复开发、测试或 PoC 环境中的所有实例。 对于生产环境,你更有可能按实例计划暂停或恢复,因此只需要步骤 5a 到 5c。
上述步骤使用适用于 Azure Synapse 和 Azure SQL 的 REST API:
Synapse Pipelines 允许自动暂停和恢复,但可以通过所选的工具或应用程序按需执行这些命令。
先决条件
- 现有的 Azure Synapse 工作区
- 至少一个 专用 SQL 池
- 必须将工作区分配给受影响的专用 SQL 池的 Azure 参与者角色。 请参阅向 Synapse 管理员授予工作区中的“Azure 参与者”角色
步骤 1:在 Synapse Studio 中创建管道。
导航到工作区并打开 Synapse Studio。
选择 “集成 ”图标,然后选择用于创建新管道的 + 符号。
将管道命名为 PauseResume。

步骤 2:创建管道参数
你将创建的管道由参数驱动。 通过参数,可以创建可在多个订阅、资源组或专用 SQL 池中使用的通用管道。 选择管道屏幕底部附近的 “参数 ”选项卡。 选择 “+新建 ”以创建以下每个参数:
| 名字 | 类型 | 默认值 | DESCRIPTION |
|---|---|---|---|
| ResourceGroup | 字符串 | Synapse | 专用 SQL 池的资源组的名称 |
| 订阅ID | 字符串 | <SubscriptionID> |
资源组的订阅 ID |
| 工作区名称 | 字符串 | Synapse | 工作区的名称 |
| SQLPoolName | 字符串 | SQLPool1 | 专用 SQL 池的名称 |
| 暂停或继续 | 字符串 | 暂停 | 管道运行结束时所需的状态 |

步骤 3:创建专用 SQL 池的列表
设置“Web”活动,你将通过调用专用 SQL 池(List By Server REST API 请求)使用此活动创建专用 SQL 池的列表。 输出是一个 JSON 字符串,其中包含工作区中专用 SQL 池的列表。 JSON 字符串将传递给下一个活动。
在“活动”>“常规”下,将一个“Web”活动拖动到管道画布,作为管道的第一阶段。
在“ 常规 ”选项卡中,将此阶段命名为 GET 列表。
选择 “设置” 选项卡,然后单击 URL 条目空间,然后选择“ 添加动态内容”。 将使用以下字符串函数参数化的 @concat GET 请求复制并粘贴到动态内容框中。 选择完成。 以下代码是一个简单的 Get 请求:
GET https://management.chinacloudapi.cn/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Synapse/workspaces/{workspace-name}/sqlPools?api-version=2021-06-01-preview使用 @concat 字符串函数参数化的 GET 请求:
@concat('https://management.chinacloudapi.cn/subscriptions/',pipeline().parameters.SubscriptionID,'/resourceGroups/',pipeline().parameters.ResourceGroup,'/providers/Microsoft.Synapse/workspaces/',pipeline().parameters.WorkspaceName,'/sqlPools?api-version=2021-06-01-preview')选择 “方法 ”下拉列表,然后选择“ 获取”。
选择 “系统分配的托管标识 ”作为“身份验证”类型。 对于“资源”,输入
https://management.chinacloudapi.cn/重要
对于所有 Web 活动/REST API Web 调用,需要确保 Synapse 管道针对专用 SQL 池进行身份验证。 运行这些 REST API 调用需要托管标识。

步骤 4:筛选专用 SQL 池
删除不想暂停或恢复的专用 SQL 池。 使用筛选活动来筛选从 Get 列表活动传递的值。 在此示例中,我们将从名称中没有“prod”的数组中提取记录。 根据需要应用其他条件。 例如,根据 Synapse 工作区的 SKU/名称进行筛选,确保仅标识有效的专用 SQL 池。
- 选择“迭代”和“条件”下的“筛选器”活动并将其拖到管道画布上。

- 将“获取列表”Web 活动连接到筛选器活动。 选择 Web 活动上的绿色选项卡,然后将其拖动到“筛选器”框。
- 对于“项”,请输入
@activity('Get list').output.value,其中的 GET List 是前面 Web 活动的名称 - 对于“条件”,请输入
@not(endswith(item().name,'prod'))。 然后将数组中的剩余记录传递给下一个活动。
步骤 5:创建 ForEach 循环
创建 ForEach 活动以循环访问每个专用 SQL 池。
- 选择“迭代和条件”下的“ForEach”活动并将其拖动到管道画布。
- 在常规选项卡上命名活动,我们使用了“ForEach_pool”。
- 在“设置”选项卡上,选择 “项 ”输入,然后选择“ 添加动态内容”。 滚动到 活动输出 ,并从过滤活动中选择输出。 将
.value添加到活动。 该值应类似于@activity('Filter_PROD').output.value。 选择 “完成”。

- 选择“ 活动 ”选项卡,然后选择编辑铅笔以打开 ForEach 循环画布。
步骤 5a:检查专用 SQL 池的状态
检查专用 SQL 池的状态需要 Web 活动,类似于步骤 1。 此活动调用 适用于 Azure Synapse 的“检查专用 SQL 池状态 REST API”。
选择“常规”下的“Web”活动并将其拖到管道画布上。
在“ 常规 ”选项卡中,将此阶段命名为 CheckState。
选择“设置”选项卡。
单击 URL 条目空间,然后选择 “添加动态内容”。 将使用以下字符串函数参数化的 @concat GET 请求复制并粘贴到动态内容框中。 选择完成。 再次检查状态时,通过以下调用使用 Get 请求:
GET https://management.chinacloudapi.cn/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Synapse/workspaces/{workspace-name}/sqlPools/{database-name}?api-version=2021-06-01-preview HTTP/1.1使用 @concat 字符串函数参数化 GET 请求:
@concat('https://management.chinacloudapi.cn/subscriptions/',pipeline().parameters.SubscriptionID,'/resourceGroups/',pipeline().parameters.ResourceGroup,'/providers/Microsoft.Synapse/workspaces/',pipeline().parameters.WorkspaceName,'/sqlPools/',item().name,'?api-version=2021-06-01-preview')在本例中,我们使用 item(.name),这是从 ForEach 循环传递到此活动的步骤 1 中专用 SQL 池的名称。 如果使用管道来控制单个专用 SQL 池,可以在此处嵌入专用 SQL 池的名称,或使用管道中的参数。 例如,可以使用 pipeline().parameters.SQLPoolName。
输出是一个 JSON 字符串,其中包含专用 SQL 池的详细信息,包括其状态(在 properties.status 中)。 JSON 字符串将传递给下一个活动。
选择 “方法 ”下拉列表,然后选择“ 获取”。 选择 “系统分配的托管标识 ”作为“身份验证”类型。 对于“资源”,输入
https://management.chinacloudapi.cn/

步骤 5b:评估专用 SQL 池的状态
评估所需状态(暂停或恢复)以及当前状态(在线或暂停),然后根据需要执行暂停或恢复操作。
在“迭代和条件”下选择并拖动 Switch 活动到管道画布上。
将 Switch 活动连接到 CheckState 活动。 选择 Web 活动上的绿色选项卡,然后将其拖动到“切换”框。
在“ 常规 ”选项卡中,将此阶段命名为 State-PauseOrResume。
根据所需状态和当前状态,只有以下两种组合需要更改状态:Paused-Resume> 或 Online-Pause>。
在“ 活动 ”选项卡上,将下面的代码复制到 “表达式”。
@concat(activity('CheckState').output.properties.status,'-',pipeline().parameters.PauseOrResume)其中 Check State 是上述 Web 活动的名称,其中 output.properties.status 定义了当前状态和管道()。参数。PauseOrResume 指示所需的状态。
检查条件会检查所需状态和当前状态。 如果所需状态为“恢复”,并且当前状态为“暂停”,则会在 Paused-Resume 案例中调用恢复活动。 如果所需状态为“暂停”,并且当前状态为“联机”,则会使用 Online-Pause Case 调用暂停活动。 在其他任何情况下(例如,所需状态为“暂停”且当前状态为“已暂停”,或所需状态为“恢复”且当前状态为“联机”),都不需要任何动作,将由没有活动的“默认情况”处理。
在“活动”选项卡上,选择“ + 添加案例”。 添加事例
Paused-Resume和Online-Pause。
步骤 5c:暂停或恢复专用 SQL 池
对于某些要求,最后一步也是唯一相关的步骤是启动专用 SQL 池的暂停或恢复。 此步骤再次使用 Web 活动,调用 Azure Synapse 的暂停或恢复计算 REST API。
选择活动编辑工具, 在 State-PauseorResume 画布上添加 Web 活动。
选择 “设置” 选项卡,然后单击 URL 条目空间,然后选择“ 添加动态内容”。 将使用以下字符串函数参数化的 @concat POST 请求复制并粘贴到动态内容框中。 选择完成。
选择 “方法 ”下拉列表,然后选择 POST。
在“正文”部分中键入“暂停和恢复”
选择 “系统分配的托管标识 ”作为“身份验证”类型。 对于“资源”,输入
https://management.chinacloudapi.cn/使用以下参数化代码为恢复功能添加第二个活动。

以下示例是恢复专用 SQL 池,使用以下调用调用 POST 请求:
POST https://management.chinacloudapi.cn/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Synapse/workspaces/{workspace-name}/sqlPools/{database-name}/resume?api-version=2021-06-01-preview HTTP/1.1可以使用字符串函数参数化上述 @concat POST 语句:
@concat('https://management.chinacloudapi.cn/subscriptions/',pipeline().parameters.SubscriptionID,'/resourceGroups/',pipeline().parameters.ResourceGroup,'/providers/Microsoft.Synapse/workspaces/',pipeline().parameters.WorkspaceName,'/sqlPools/',activity('CheckState').output.name,'/resume?api-version=2021-06-01-preview')在这种情况下,我们将活动 'Check State'.output.name 与步骤 3a 中通过“切换条件”传递给此活动的专用 SQL 池的名称一起使用。 如果对单个数据库使用单个活动,可以在此处嵌入专用 SQL 池的名称,或使用管道中的参数。 例如,可以使用pipeline().parameters.DatabaseName。
暂停专用 SQL 池的 POST 请求为:
POST https://management.chinacloudapi.cn/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Synapse/workspaces/{workspace-name}/sqlPools/{database-name}/pause?api-version=2021-06-01-preview HTTP/1.1可以使用字符串函数参数化 @concat POST 请求,如下所示:
@concat('https://management.chinacloudapi.cn/subscriptions/',pipeline().parameters.SubscriptionID,'/resourceGroups/',pipeline().parameters.ResourceGroup,'/providers/Microsoft.Synapse/workspaces/',pipeline().parameters.WorkspaceName,'/sqlPools/',activity('CheckState').output.name,'/pause?api-version=2021-06-01-preview')
管道运行输出
运行完整管道时,将看到下面列出的输出。 可以通过选择 “调试 ”模式或选择 “添加触发器”来运行管道。 对于下面的管道结果,名为“ResourceGroup”的管道参数设置为具有两个 Synapse Workspaces 的单个资源组。 其中一个被命名为 testprod,并被筛选掉,第二个被命名为 test1。 test1 专用 SQL 池已暂停,因此作业启动了恢复。

保存管道
若要保存管道,请选择管道上方的“全部发布”。
计划要运行的暂停或恢复管道
若要调度管道,请在管道顶部选择添加触发器。 请按照屏幕指引在指定时间安排管道运行。

后续步骤
有关 Azure Synapse 的托管标识以及如何将托管标识添加到专用 SQL 池的更多详细信息,可在此处找到: