相关文章推荐
爱听歌的咖啡豆  ·  Multipart Content :: ...·  1 年前    · 
考研的丝瓜  ·  TcpClient.GetStream ...·  1 年前    · 
讲道义的脸盆  ·  python ...·  1 年前    · 

适用于: Azure 数据工厂 Azure Synapse Analytics

本文介绍如何使用 Azure 数据工厂 (ADF) 和 Azure Synapse 计划 Azure-SSIS Integration Runtime (IR) 的启动和停止。 Azure-SSIS IR 是专用于执行 SQL Server Integration Services (SSIS) 包的计算资源。 运行 Azure-SSIS IR 会产生相关成本。 因此,通常只有在需要在 Azure 中运行 SSIS 包时才运行 IR,而不再需要该包时则停止 IR。 可以使用 ADF 或 Synapse Pipelines 门户或 Azure PowerShell 来 手动启动或停止 IR )。

或者,可以在 ADF 或 Synapse 管道中创建 Web 活动,以按计划启动/停止 IR,例如,在早上执行每日 ETL 工作负载之前启动 IR,并在下午完成后将其停止。 还可以在启动和停止 IR 的两个 Web 活动之间链接一个执行 SSIS 包活动,这样 IR 就会按需在包执行之前/之后及时启动/停止。 有关执行 SSIS 包活动的详细信息,请参阅 在 ADF 管道中使用执行 SSIS 包活动运行 SSIS 包 一文。

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅 安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

需要一个 Azure 数据工厂实例来实现此演练。 如果尚未预配数据工厂,可以按照下文中的步骤进行操作: 快速入门:使用 Azure 门户和 Azure 数据工厂工作室创建数据工厂

Azure-SSIS 集成运行时 (IR )

如果尚未配置 Azure-SSIS IR,请按照 教程 中的说明进行配置。

创建和安排启动和/或停止 Azure-SSIS IR 的 ADF 管道

本部分不支持启用了 数据外泄保护 Azure Synapse 中的 Azure-SSIS。

本部分演示如何在 ADF 管道中使用 Web 活动按计划或按需启动/停止 Azure-SSIS IR。 我们将指导你创建三个管道:

  • 第一个管道包含启动 Azure-SSIS IR 的 Web 活动。
  • 第二个管道包含停止 Azure-SSIS IR 的 Web 活动。
  • 第三个管道包含一个执行 SSIS 包活动,该活动链接在两个启动/停止 Azure-SSIS IR 的 Web 活动之间。
  • 创建并测试管道后,可以创建一个计划触发器,并将其与任何管道相关联。 计划触发器定义了运行相关管道的计划。

    例如,可以创建两个触发器,第一个触发器计划在每天上午 6 点运行并与第一个管道相关联,而第二个触发器计划在每天晚上 6 点运行并与第二个管道相关联。 通过这种方式,IR 会在每天上午 6 点到晚上 6 点这一时段运行,可用于执行每日 ETL 工作负载。

    如果创建第三个触发器,计划在每天午夜运行并与第三个管道相关联,那么该管道将在每天午夜运行,在包执行前才启动 IR,随后执行包,然后在包执行后立即停止 IR,这样 IR 就不会空闲运行。

  • 在主页中,选择“协调”。

  • 在“活动”工具箱中,展开“常规”菜单,并将一个 Web 活动拖放到管道设计器图面。 在活动属性窗口的“常规”选项卡中,将活动名称更改为“startMyIR” 。 切换到“设置”选项卡,然后执行以下操作:

    对于 Azure Synapse 中的 Azure-SSIS,请使用相应的 Azure Synapse REST API 来 获取 Integration Runtime 状态 启动 Integration Runtime 停止 Integration Runtime。

  • 对于“URL”,请为启动 Azure-SSIS IR 的 REST API 输入以下 URL,将 {subscriptionId} {resourceGroupName} {factoryName} {integrationRuntimeName} 替换为 IR 的实际值: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/integrationRuntimes/{integrationRuntimeName}/start?api-version=2018-06-01 。 或者,也可以从 ADF UI/应用上的监视页面复制并粘贴 IR 的资源 ID,替换上述 URL 的以下部分: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/integrationRuntimes/{integrationRuntimeName}

  • 对于“方法”,请选择“POST”。

  • 对于“正文”,请输入 {"message":"Start my IR"}

  • 对于“身份验证”,请选择“托管标识”来使用 ADF 的指定系统托管标识,有关详细信息,请参阅 数据工厂托管标识 一文 。

  • 对于“资源”,请输入 https://management.azure.com/

  • 克隆第一个管道以创建第二个管道,将活动名称更改为 stopMyIR 并替换以下属性 。

  • 对于“URL”,请为停止 Azure-SSIS IR 的 REST API 输入以下 URL,将 {subscriptionId} {resourceGroupName} {factoryName} {integrationRuntimeName} 替换为 IR 的实际值: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/integrationRuntimes/{integrationRuntimeName}/stop?api-version=2018-06-01
  • 对于“正文”,请输入 {"message":"Stop my IR"}
  • 创建第三个管道,将“执行 SSIS 包”活动从“活动”工具箱拖放到管道设计器图面,然后按照 使用 ADF 中的执行 SSIS 包活动调用 SSIS 包 一文中的说明配置 SSIS 包活动。 接下来,在启动/停止 IR 的两个 Web 活动之间链接“执行 SSIS 包”活动,类似于第一个/第二个管道中的 Web 活动。

  • 还可以通过模板自动创建第三个管道,而不用手动创建。 为此,请选择“管道”旁边的“…”符号,下拉管道操作菜单,选择“模板中的管道”操作,选中“类别”下的“SSIS”复选框,然后选择“计划 ADF 管道以在运行 SSIS 包之前和之后及时启动和停止 Azure-SSIS IR”模板,在“Azure-SSIS Integration Runtime”下拉菜单中选择你的 IR,最后选择“使用此模板”按钮 。 管道将自动创建,只留下 SSIS 包,供你分配到“执行 SSIS 包”活动。

  • 若要使第三个管道更可靠,可以确保在网络连接或其他问题导致任何暂时性错误时重试启动/停止 IR 的 Web 活动,并且仅在 IR 实际启动/停止时完成。 为此,可以将每个 Web 活动替换成一个 Until 活动,而该活动又包含两个 Web 活动,一个活动用于启动/停止 IR,另一个活动用于检查 IR 状态。 让我们调用 Until 活动“启动 SSIS IR”和“停止 SSIS IR” 。 “启动 SSIS IR”Until 活动包含“尝试启动 SSIS IR”和“获取 SSIS IR 状态”Web 活动 。 “停止 SSIS IR”Until 活动包含“尝试停止 SSIS IR”和“获取 SSIS IR 状态”Web 活动 。 在“启动 SSIS IR”/“停止 SSIS IR”Until 活动的“设置”选项卡上,在“表达式”处输入 @equals('Started', activity('Get SSIS IR Status').output.properties.state) / @equals('Stopped', activity('Get SSIS IR Status').output.properties.state)

    在这两个 Until 活动中,“尝试启动 SSIS IR”/“尝试停止 SSIS IR”Web 活动类似于第一个/第二个管道中的 Web 活动 。 在“获取 SSIS IR 状态”Web 活动的“设置”选项卡上执行以下操作:

  • 对于“URL”,请为获取 Azure-SSIS IR 状态的 REST API 输入以下 URL,将 {subscriptionId} {resourceGroupName} {factoryName} {integrationRuntimeName} 替换为 IR 的实际值: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/integrationRuntimes/{integrationRuntimeName}?api-version=2018-06-01

  • 对于“方法”,请选择“GET” 。

  • 对于“身份验证”,请选择“托管标识”来使用 ADF 的指定系统托管标识,有关详细信息,请参阅 数据工厂托管标识 一文 。

  • 对于“资源”,请输入 https://management.azure.com/

  • 为 ADF 分配一个“参与者”角色的托管标识,这样,其管道中的 Web 活动便可以调用 REST API 来启动/停止在其中预配的 Azure-SSIS IR:

  • 在Azure 门户的 ADF 页上,选择“访问控制(IAM)”。

  • 选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。

  • 分配以下角色。 有关详细步骤,请参阅 使用 Azure 门户分配 Azure 角色

  • 若要测试第三个管道,将 SSIS 包存储在 SSIS 目录 (SSISDB) 中时,可以启动 SQL Server Management Studio (SSMS) 来检查其执行。 在“连接到服务器”窗口中执行以下操作 。

  • 对于“服务器名称”,请输入 <服务器名称>.database.windows.net 。
  • 选择“选项>>”。
  • 对于“连接到数据库”,请选择“SSISDB”。
  • 选择“连接” 。
  • 展开“Integration Services 目录”->“SSISDB”-> 你的文件夹 ->“项目”-> 你的 SSIS 项目 ->“包”。
  • 右键单击指定的 SSIS 包,运行并选择“报告”->“标准报告”->“所有执行”。
  • 验证是否已运行该包。
  • 对于“名称”,输入触发器的名称 。 在以下示例中,“每日运行”是触发器名称 。
  • 对于“类型”,请选择“计划”。
  • 对于“开始日期 (UTC)”,请在 UTC 中输入开始日期和时间 。
  • 对于“重复周期”,请输入触发器的频率 。 在以下示例中,频率为每日一次 。
  • 对于“结束”,请选择“不结束”或在选择“开始日期”后输入结束日期和时间 。
  • 发布整个 ADF 设置后,选择“激活”以立即激活触发器 。
  • 选择“ 下一步 ”。
  • 获取管道运行的状态。

    Get-AzDataFactoryV2PipelineRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -PipelineRunId $myPipelineRun
    
  • 获取有关触发器的信息。

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name  "myTrigger"
    
  • 获取触发器运行的状态。

    Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "myTrigger" -TriggerRunStartedAfter "2018-07-15" -TriggerRunStartedBefore "2018-07-16"
    

    创建并安排启动/停止 Azure-SSIS IR 的 Azure 自动化 Runbook

    本部分介绍如何创建 Azure 自动化 Runbook,该 Runbook 执行 PowerShell 脚本,按计划启动/停止 Azure-SSIS IR。 如果希望在开始/停止 IR 之前/之后执行其他脚本以进行预/后处理时,这非常有用。

    创建 Azure 自动化帐户

    如果没有 Azure 自动化帐户,请遵照此步骤中的说明创建一个。 有关详细步骤,请参阅创建 Azure 自动化帐户一文。 在执行此步骤的过程中,创建一个 Azure 运行方式帐户(Azure Active Directory 中的服务主体),并在 Azure 订阅中为其分配参与者角色。 确保其与包含带有 Azure SSIS IR 的 ADF 的订阅相同。 Azure 自动化将使用此帐户在 Azure 资源管理器中进行身份验证,并对资源执行操作。

  • 启动 Microsoft EdgeGoogle Chrome Web 浏览器。 目前,仅在 Microsoft Edge 和 Google Chrome 网络浏览器中支持 ADF UI/应用。

  • 登录到 Azure 门户

  • 在左侧菜单中选择“新建”,然后依次选择“监视 + 管理”、“自动化”。

  • 在“添加自动化帐户”窗格中,执行以下操作

  • 对于“名称”,请输入 Azure 自动化帐户的名称
  • 对于“订阅”,请选择具有 Azure-SSIS IR 的 ADF 的订阅
  • 对于“资源组”,请选择“新建”以创建新的资源组,或选择“使用现有项”以使用现有的资源组
  • 对于“位置”,选择 Azure 自动化的位置
  • 确认“创建 Azure 运行方式帐户”为“是”。 将在 Azure Active Directory 中创建服务主体,并在 Azure 订阅中为其分配“参与者”角色
  • 选择“固定到仪表板”以在 Azure 仪表板中永久显示该服务主体
  • 选择“创建”。
  • 创建 PowerShell Runbook

    以下部分提供创建 PowerShell Runbook 的步骤。 与 Runbook 关联的脚本会根据针对“操作”参数指定的命令来启动/停止 Azure SSIS IR。 本部分不提供有关创建 Runbook 的完整细节。 有关详细信息,请参阅创建 Runbook 一文。

  • 切换到“Runbook”选项卡,在工具栏中选择“+ 添加 Runbook”

  • 选择“创建新的 Runbook”并执行以下操作:

  • 对于“名称”,输入 StartStopAzureSsisRuntime
  • 对于“Runbook 类型”,请选择“PowerShell”。
  • 选择“创建”。
  • 本例使用系统分配的托管标识。 如果使用运行方式帐户(服务主体)或用户分配的托管标识,请参阅 Azure 自动化示例脚本的登录部分。

    为此自动化帐户的托管标识启用适当的 RBAC 权限。 请参阅 Azure 数据工厂的角色和权限

    Param
          [Parameter (Mandatory= $true)]
          [String] $ResourceGroupName,
          [Parameter (Mandatory= $true)]
          [String] $DataFactoryName,
          [Parameter (Mandatory= $true)]
          [String] $AzureSSISName,
          [Parameter (Mandatory= $true)]
          [String] $Operation
    $ErrorActionPreference = "Stop"
        "Logging in to Azure..."
        Connect-AzAccount -Identity
    catch {
        Write-Error -Message $_.Exception
        throw $_.Exception
    if($Operation -eq "START" -or $operation -eq "start")
        "##### Starting #####"
        Start-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $AzureSSISName -Force
    elseif($Operation -eq "STOP" -or $operation -eq "stop")
        "##### Stopping #####"
        Stop-AzDataFactoryV2IntegrationRuntime -DataFactoryName $DataFactoryName -Name $AzureSSISName -ResourceGroupName $ResourceGroupName -Force
    "##### Completed #####"    
    
  • 对“资源组名称”,请输入具有 Azure-SSIS IR 的 ADF 的资源组的名称
  • 对于“数据工厂名称”,请使用 Azure-SSIS IR 输入 ADF 的名称
  • 对于“AZURESSISNAME”,请输入 Azure SSIS IR 的名称
  • 对于“操作”,请输入“启动”。
  • 选择“确定”。
  • 重复上述两个步骤,但这一次要使用“停止”作为“操作”的值。 选择工具栏上的“开始”按钮,再次启动 Runbook。 输入资源组、ADF 和 Azure-SSIS IR 名称。 对于“操作”,请输入“停止”。 在输出窗口中,等到依次出现消息“##### 正在停止 #####”和“##### 已完成 #####”。 停止 Azure SSIS IR 所需的时间比启动 Azure SSIS IR 要短一些。 关闭“作业”窗口并返回到“Runbook”窗口

  • 还可以通过选择“Webhook”菜单项可创建的 Webhook 或按照通过选择以下指定的“计划”菜单项可创建的计划来触发 runbook。

    为 Runbook 创建计划来启动/停止 Azure SSIS IR

    在上一部分,已创建了一个可以启动或停止 Azure SSIS IR 的 Azure 自动化 Runbook。 在本部分,将为 Runbook 创建两个计划。 配置第一个计划时,为“操作”指定“启动”。 类似地,在配置第二个计划时,请为“操作”指定“停止”。 有关创建计划的详细步骤,请参阅创建计划一文。

  • 在“Runbook”窗口中选择“计划”,然后在工具栏上选择“+ 添加计划”

  • 在“计划 Runbook”窗格中,执行以下操作:

  • 选择“将计划链接到 Runbook”。
  • 选择“创建新计划”。
  • 在“新计划”窗格中,为“名称”输入“每天启动 IR”
  • 对于“开始”,请输入比当前时间晚几分钟的时间
  • 对于“重复周期 ”,请选择“定期”。
  • 对于“重复间隔”,请输入“1”并选择“日”
  • 选择“创建”。
  • 重复上述两个步骤,创建名为“每日停止 IR”的计划。 输入时间比“每日启动 IR”计划中指定的时间至少晚 30 分钟。 对于“操作”,请输入“停止”并选择“确定”。 再次选择“确定”,在 Runbook 的“计划”页上查看该计划

  • 在“Runbook”窗口上的左侧菜单中选择“作业”。 此时,应会看到计划在指定的时间创建的作业及其状态。 可以查看作业详细信息,例如其输出(与在测试 Runbook 后看到的内容类似)。

  • 完成测试后,通过编辑计划将其禁用。 在左侧菜单中选择“计划”,选择“每日启动 IR”/“每日停止 IR”,然后“已启用”旁边的“否”

    请参阅以下博客文章:

  • 使用 ADF 管道中的 SSIS 活动来实现 ETL/ELT 工作流的现代化并对其进行扩展
  • 参阅 SSIS 文档中的以下文章:

  • 在 Azure 上部署、运行和监视 SSIS 包
  • 连接到 Azure 上的 SSIS 目录
  • 在 Azure 上计划包执行
  • 使用 Windows 身份验证连接到本地数据源
  •