将Azure 流分析职位移到另一个区域

Azure 流分析 的作业是区域特定的计算资源,因此你不能直接在 Azure 区域之间移动它们。 你可能需要搬迁工作以满足数据驻留要求、减少数据源延迟或提升可用性。 要移动一个作业,你需要在目标区域部署一个新作业,并重建其输入、输出、托管身份和依赖。

本文将引导你了解一种推荐的端到端方法,用于将 Azure 流分析 作业迁移到其他区域。

Prerequisites

  • 源区域内已有的 Azure 流分析 职位。
  • 目标区域中的 Azure 流分析支持。
  • 对源订阅和目标订阅的访问权限。
  • 停止和启动流分析作业的功能。

移动任务的权限

没有一套权限集能覆盖所有迁移。 执行重定位所需的权限对所有作业都是一样的,但运行时权限取决于作业配置的输入和输出。 只分配工作所需的数据平面角色,遵循最小权限原则。

执行迁移所需的权限(始终需要)

  • 目标资源组或订阅的贡献者,负责在目标区域创建和配置作业。
  • 用户访问管理员所有者,仅当您作为迁移的一部分向该作业的托管标识分配基于角色的访问控制 (RBAC) 角色时才需要。 普通 贡献 者不能创建角色分配。
  • 网络参与者,仅当该作业使用了虚拟网络集成或需要在目标区域重新创建专用终结点时才需要。

作业运行时权限(只分配与作业输入和输出匹配的角色)

将这些权限授予作业系统分配或用户分配的下游资源管理身份,按最小权限排序。 只分配与作业实际输入和输出绑定对应的角色。

输入/输出源 要分配的角色
Event Hubs(输入) Azure 事件中心数据接收方
事件中心(输出) Azure 事件中心数据发送方
Blob 存储或Azure Data Lake Storage Gen2 存储 Blob 数据贡献者(如果使用表状态,添加存储表数据贡献者)
服务总线(输出) Azure 服务总线 数据发送方
Azure Cosmos DB Cosmos DB 内置数据参与者(数据平面角色;请通过 PowerShell 或 Azure CLI 分配,而不要通过门户)
Azure 数据资源管理器 目标数据库上的数据库级导入器(及查看器)
SQL 数据库或 Synapse 不是 RBAC 角色;请根据托管标识(FROM EXTERNAL PROVIDER)创建包含的数据库用户,并授予所需的权限

搬迁前,列举每个作业的具体输入和输出绑定,只分配相应的角色。 例如,写入 Azure Cosmos DB 的作业不需要 Storage Blob 数据贡献者。

确认目标地区提供以下附属服务:

  • Azure 事件中心 或 IoT 中心.
  • Azure 存储帐户(Azure Data Lake Storage Gen2 或 Blob 存储)。
  • Azure Synapse、SQL 或其他输出服务。
  • 虚拟网络和私有端点,如果工作需要的话。

规划迁移期间的空闲时间

Azure 流分析不支持实时跨区域迁移,因此切换需要停机时间。 为了最大限度地减少影响:

  • 在切换前部署并验证目标作业。
  • 在低流量时段规划迁移。
  • 确保上游输入端保留事件,以供重放。
  • 切换生产流量前先验证输出。

准备迁移

准备工作包括导出作业配置,并识别所有依赖关系,以便在目标区域重建。

查看依赖项

确保目标区域内有以下组件:

  • 职位定义:查询、兼容性等级和流媒体单元。
  • 输入:Event Hubs、IoT 中心、Blob 存储 和 服务总线。
  • 输出:Azure Data Lake Storage Gen2、Event Hubs、Synapse、SQL 和 Power BI。
  • 管理身份:Azure 会用新的主 ID 重新创建系统分配的身份,因此你必须重新配置 RBAC 的分配。
  • 网络:虚拟网络、私有终端、DNS和防火墙规则。
  • 参考数据:你必须分别迁移 Blob 存储 和 Azure Data Lake Storage 的输入。

使用 Visual Studio Code 导出作业

推荐的导出工作方式是使用 Visual Studio Code 和 Azure 流分析 Tools 扩展。 关于详细的导出步骤,请参见“复制、备份和移动你的 Azure 流分析 作业”。

出口流程如下:

  1. 安装 Visual Studio Code 和Azure 流分析 Tools 扩展

  2. 登录到Azure。

  3. 扩展 流分析 节点。

  4. 找到源工作。

  5. 将鼠标悬停在作业上,选择 导出作业到本地项目

    VS Code 的屏幕截图,其中已选中 Azure 流分析 作业。

  6. 选择一个本地文件夹。

导出会产生以下工件: Transformation.asaql输入的JSON文件、输出的JSON文件以及作业配置文件。

将作业编译为 Azure 资源管理器 模板

  1. 用VS代码打开 Transformation.asaql
  2. 在资源管理器窗口中右键点击该文件,选择 ASA:编译脚本。 此操作创建文件夹 Deploy
  3. 查看 JobTemplate.jsonJobTemplate.parameters.json

修改ARM模板

部署前请更新以下事项:

  • location 设置为目标区域。
  • 更新资源名称以避免冲突。
  • 移除只读属性。
  • 更新参数,包括事件中心的连接详情、存储账户引用和输出凭证。

部署流分析作业

通过使用 Azure 门户或 Azure PowerShell 部署修改后的模板。

使用 Azure 门户进行部署

  1. 在 Azure 门户中,搜索“部署自定义模板”。
  2. 选择“在编辑器中生成自己的模板”。
  3. 上传更新后的模板。
  4. 输入所需的数值,包括订阅、资源组和地点。
  5. 选择 “审阅 + 创建”,然后选择“ 创建”。

使用 Azure PowerShell 进行部署

Connect-AzAccount -Environment AzureChinaCloud
Set-AzContext -Subscription "<TargetSubscriptionId>"
New-AzResourceGroupDeployment `
  -Name "ASA-Region-Migration" `
  -ResourceGroupName "<TargetResourceGroup>" `
  -TemplateFile "JobTemplate.json" `
  -TemplateParameterFile "JobTemplate.parameters.json"

切换前进行验证

切换到目标任务前,请验证以下内容:

  • 事件中心和 IoT 中心 的输入连接。
  • 输出可达性。
  • 查询汇编。
  • 管理身份权限。
  • 端到端的数据流。

数据丢失与重放策略

Azure 流分析 保留了正常工作暂停和恢复的检查点。 但是,当你将作业重新部署到不同区域,或将其复制到不同区域时,检查点不会一并迁移。 重新部署后的作业会从已配置的默认起始位置开始继续运行,即最新到达位置或指定的时间戳,而不是从源作业的最后已知状态恢复。

当你在目标区域开始工作时,设置工作开始时间。 有关可用选项,请参见 开始选项

  • 自定义时间(推荐)。
  • 现在,这可能会跳过之前的事件。

根据您的配置和保留情况,可能出现以下结果:

  • 在重放场景中的重复处理
  • 如果保留不足,数据丢失

请遵循以下最佳实践以降低风险:

  • 确保上游保留期涵盖迁移窗口期。
  • 使用受控制的回放起始时间。
  • 在全面切换前验证输出。

执行切换

  1. 停止源 Stream Analytics 作业。
  2. 在合适的开始时间开始目标任务。
  3. 监控输入延迟、输出延迟和错误。
  4. 验证下游系统。

回滚失败的迁移操作

如果在切换后遇到问题:

  • 只有在输入保留数据中仍包含所需事件时,才重启源作业。
  • 注意可能的重复处理。
  • 在重新尝试迁移之前先解决问题。

验证迁移

请确认关于已迁移的 Azure 流分析 职位的以下细节:

  • 任务运行过程中未出现错误。
  • 该作业能够正确处理输入。
  • 输出准确。
  • 监控和警报功能已配置好。
  • 业务验证已完成。

清理源资源

在验证目标 Azure 流分析 作业正确运行后:

  • 停用源头任务。
  • 移除未使用的网络资源。
  • 将模板和配置归档。
  • 更新文档和运行手册。