使用 Synapse Pipelines 暂停和恢复专用 SQL 池

在 Azure Synapse Analytics 中,可以使用 Synapse Pipelines 来自动化暂停和恢复专用 SQL 池。 暂停和恢复可用于节省专用 SQL 池的成本。 此解决方案可以轻松纳入现有的数据编排过程中。

以下步骤将指导你设置自动暂停和恢复。

  1. 创建管道。
  2. 在管道中设置参数。
  3. 确定 Azure Synapse 工作区中专用 SQL 池的列表。
  4. 从列表中筛选不想暂停或恢复的所有专用 SQL 池。
  5. 循环访问每个专用 SQL 池,并:
    1. 检查专用 SQL 池的状态。
    2. 评估专用 SQL 池的状态。
    3. 暂停或恢复专用 SQL 池。

这些步骤被排列在 Azure Synapse 的简单流程中:

简单的 Synapse 管道

根据环境的性质,此处所述的整个过程可能不适用,你可能只想选择相应的步骤。 此处介绍的过程可用于暂停或恢复开发、测试或 PoC 环境中的所有实例。 对于生产环境,你更有可能按实例计划暂停或恢复,因此只需要步骤 5a 到 5c。

上述步骤使用适用于 Azure Synapse 和 Azure SQL 的 REST API:

Synapse Pipelines 允许自动暂停和恢复,但可以通过所选的工具或应用程序按需执行这些命令。

先决条件

步骤 1:在 Synapse Studio 中创建管道。

  1. 导航到工作区并打开 Synapse Studio。

  2. 选择 “集成 ”图标,然后选择用于创建新管道的 + 符号。

  3. 将管道命名为 PauseResume。

    在 Synapse Studio 中创建管道

步骤 2:创建管道参数

你将创建的管道由参数驱动。 通过参数,可以创建可在多个订阅、资源组或专用 SQL 池中使用的通用管道。 选择管道屏幕底部附近的 “参数 ”选项卡。 选择 “+新建 ”以创建以下每个参数:

名字 类型 默认值 DESCRIPTION
ResourceGroup 字符串 Synapse 专用 SQL 池的资源组的名称
订阅ID 字符串 <SubscriptionID> 资源组的订阅 ID
工作区名称 字符串 Synapse 工作区的名称
SQLPoolName 字符串 SQLPool1 专用 SQL 池的名称
暂停或继续 字符串 暂停 管道运行结束时所需的状态

Synapse Studio 中的管道参数。

步骤 3:创建专用 SQL 池的列表

设置“Web”活动,你将通过调用专用 SQL 池(List By Server REST API 请求)使用此活动创建专用 SQL 池的列表。 输出是一个 JSON 字符串,其中包含工作区中专用 SQL 池的列表。 JSON 字符串将传递给下一个活动。

  1. 在“活动”>“常规”下,将一个“Web”活动拖动到管道画布,作为管道的第一阶段。

  2. 在“ 常规 ”选项卡中,将此阶段命名为 GET 列表。

  3. 选择 “设置” 选项卡,然后单击 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')
    
  4. 选择 “方法 ”下拉列表,然后选择“ 获取”。

  5. 选择 “系统分配的托管标识 ”作为“身份验证”类型。 对于“资源”,输入 https://management.chinacloudapi.cn/

    重要

    对于所有 Web 活动/REST API Web 调用,需要确保 Synapse 管道针对专用 SQL 池进行身份验证。 运行这些 REST API 调用需要托管标识

    专用 SQL 池的 Web 活动列表

步骤 4:筛选专用 SQL 池

删除不想暂停或恢复的专用 SQL 池。 使用筛选活动来筛选从 Get 列表活动传递的值。 在此示例中,我们将从名称中没有“prod”的数组中提取记录。 根据需要应用其他条件。 例如,根据 Synapse 工作区的 SKU/名称进行筛选,确保仅标识有效的专用 SQL 池。

  1. 选择“迭代”和“条件”下的“筛选器”活动并将其拖到管道画布上。
    筛选专用 SQL 池
  2. 将“获取列表”Web 活动连接到筛选器活动。 选择 Web 活动上的绿色选项卡,然后将其拖动到“筛选器”框。
  3. 对于“项”,请输入 @activity('Get list').output.value,其中的 GET List 是前面 Web 活动的名称
  4. 对于“条件”,请输入 @not(endswith(item().name,'prod'))。 然后将数组中的剩余记录传递给下一个活动。

步骤 5:创建 ForEach 循环

创建 ForEach 活动以循环访问每个专用 SQL 池。

  1. 选择“迭代和条件”下的“ForEach”活动并将其拖动到管道画布
  2. 常规选项卡上命名活动,我们使用了“ForEach_pool”。
  3. 在“设置”选项卡上,选择 “项 ”输入,然后选择“ 添加动态内容”。 滚动到 活动输出 ,并从过滤活动中选择输出。 将 .value 添加到活动。 该值应类似于 @activity('Filter_PROD').output.value。 选择 “完成”。
    遍历专用 SQL 池
  4. 选择“ 活动 ”选项卡,然后选择编辑铅笔以打开 ForEach 循环画布。

步骤 5a:检查专用 SQL 池的状态

检查专用 SQL 池的状态需要 Web 活动,类似于步骤 1。 此活动调用 适用于 Azure Synapse 的“检查专用 SQL 池状态 REST API”。

  1. 选择“常规”下的“Web”活动并将其拖到管道画布上

  2. 在“ 常规 ”选项卡中,将此阶段命名为 CheckState。

  3. 选择“设置”选项卡。

  4. 单击 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 字符串将传递给下一个活动。

  5. 选择 “方法 ”下拉列表,然后选择“ 获取”。 选择 “系统分配的托管标识 ”作为“身份验证”类型。 对于“资源”,输入 https://management.chinacloudapi.cn/

检查专用 SQL 池的状态

步骤 5b:评估专用 SQL 池的状态

评估所需状态(暂停或恢复)以及当前状态(在线或暂停),然后根据需要执行暂停或恢复操作。

  1. “迭代和条件”下选择并拖动 Switch 活动到管道画布上。

  2. Switch 活动连接到 CheckState 活动。 选择 Web 活动上的绿色选项卡,然后将其拖动到“切换”框。

  3. 在“ 常规 ”选项卡中,将此阶段命名为 State-PauseOrResume。

    根据所需状态和当前状态,只有以下两种组合需要更改状态:Paused-Resume> 或 Online-Pause>。

  4. 在“ 活动 ”选项卡上,将下面的代码复制到 “表达式”。

    @concat(activity('CheckState').output.properties.status,'-',pipeline().parameters.PauseOrResume)
    

    其中 Check State 是上述 Web 活动的名称,其中 output.properties.status 定义了当前状态和管道()。参数。PauseOrResume 指示所需的状态。

    检查条件会检查所需状态和当前状态。 如果所需状态为“恢复”,并且当前状态为“暂停”,则会在 Paused-Resume 案例中调用恢复活动。 如果所需状态为“暂停”,并且当前状态为“联机”,则会使用 Online-Pause Case 调用暂停活动。 在其他任何情况下(例如,所需状态为“暂停”且当前状态为“已暂停”,或所需状态为“恢复”且当前状态为“联机”),都不需要任何动作,将由没有活动的“默认情况”处理。

  5. 在“活动”选项卡上,选择“ + 添加案例”。 添加事例 Paused-ResumeOnline-Pause检查专用 SQL 池的状态条件

步骤 5c:暂停或恢复专用 SQL 池

对于某些要求,最后一步也是唯一相关的步骤是启动专用 SQL 池的暂停或恢复。 此步骤再次使用 Web 活动,调用 Azure Synapse 的暂停或恢复计算 REST API

  1. 选择活动编辑工具, 在 State-PauseorResume 画布上添加 Web 活动。

  2. 选择 “设置” 选项卡,然后单击 URL 条目空间,然后选择“ 添加动态内容”。 将使用以下字符串函数参数化的 @concat POST 请求复制并粘贴到动态内容框中。 选择完成

  3. 选择 “方法 ”下拉列表,然后选择 POST

  4. 在“正文”部分中键入“暂停和恢复”

  5. 选择 “系统分配的托管标识 ”作为“身份验证”类型。 对于“资源”,输入 https://management.chinacloudapi.cn/

  6. 使用以下参数化代码为恢复功能添加第二个活动。

    恢复专用 SQL 池

    以下示例是恢复专用 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 池的更多详细信息,可在此处找到:

Azure Synapse 工作区托管标识

向工作区托管标识授予权限