如何获取ADF管道关联资源并通过ARM模板完成跨环境迁移
查找待迁移Pipeline关联的所有依赖资源
两种常用方案,按需选择即可:
- 可视化溯源
打开源ADF Studio进入目标pipeline编辑页,切换到代码视图,搜索所有referenceName字段,对应值就是该pipeline直接关联的数据集、链接服务、被调用的其他pipeline、触发器、集成运行时、数据流资源名。
对每一个找到的关联资源,进入对应资源的代码视图,递归查找其自身的依赖:比如数据集会关联对应链接服务、集成运行时,链接服务如果用Key Vault存密钥,还会关联对应的Key Vault类型链接服务。递归遍历完所有层级,就能拿到完整的依赖清单。 - PowerShell脚本批量拉取
用Az.DataFactory模块自动递归爬取所有依赖,避免手动漏查,核心脚本如下:# 登录并选择源ADF所在订阅 Connect-AzAccount Select-AzSubscription -SubscriptionId "<源ADF订阅ID>" $targetPipelineName = "<待迁移pipeline名称>" $adfName = "<源ADF实例名>" $rgName = "<源ADF资源组名>" $dependencies = @() # 递归查找依赖的方法 function Get-AdfDependency($resourceType, $resourceName) { if ($dependencies | Where-Object { $_.Type -eq $resourceType -and $_.Name -eq $resourceName }) { return } $resource = Get-AzDataFactoryV2$resourceType -ResourceGroupName $rgName -DataFactoryName $adfName -Name $resourceName -ErrorAction SilentlyContinue if (-not $resource) { return } $dependencies += [PSCustomObject]@{Type = $resourceType; Name = $resourceName} $resourceJson = $resource | ConvertTo-Json -Depth 20 $refMatches = [regex]::Matches($resourceJson, '"referenceName":\s*"([^"]+)",\s*"type":\s*"([^"]+)"') $typeMap = @{ "DatasetReference" = "Dataset" "LinkedServiceReference" = "LinkedService" "PipelineReference" = "Pipeline" "IntegrationRuntimeReference" = "IntegrationRuntime" "TriggerReference" = "Trigger" "DataFlowReference" = "DataFlow" } foreach ($match in $refMatches) { $refName = $match.Groups[1].Value $refType = $match.Groups[2].Value if ($typeMap.ContainsKey($refType)) { Get-AdfDependency -resourceType $typeMap[$refType] -resourceName $refName } } } Get-AdfDependency -resourceType "Pipeline" -resourceName $targetPipelineName # 输出完整依赖清单 $dependencies | Format-Table
在发布管道中使用ARM Template完成迁移
按以下步骤操作即可,注意避开常见坑:
- 导出裁剪后的ARM模板
不要直接导出整个ADF实例的全量模板,在源ADF Studio的「管理」-「ARM模板」板块选择导出模板,在资源选择列表中,只勾选待迁移pipeline和前面整理的所有依赖资源,导出后得到arm_template.json(资源定义文件)和arm_template_parameters.json(参数文件)。注意:如果依赖资源包含自托管集成运行时,不要直接导出IR资源定义,提前在目标环境建好对应自托管IR,修改模板中IR引用名为目标环境已存在的IR名即可,否则会覆盖目标环境IR配置导致节点失联。
- 适配目标环境参数
打开导出的参数文件,替换所有和目标环境不匹配的配置:包括链接服务连接字符串、Key Vault地址、下游资源路径、全局参数值,建议先将所有触发器的状态参数设为stopped,等迁移验证完成后再手动开启,避免迁移过程中触发非预期的任务运行。如果链接服务用托管身份鉴权,提前给目标ADF的托管身份分配下游资源的对应访问权限,避免部署后出现鉴权错误。 - 配置发布管道部署任务
以Azure DevOps发布管道为例,添加Azure Resource Group Deployment任务,核心配置如下:- 选择目标ADF对应的Azure服务连接、目标资源组、部署区域
- 模板路径选择裁剪后的
arm_template.json,参数路径选择适配完目标环境的参数文件 - 部署模式必须选择增量模式,禁止选完整模式,否则会删除目标ADF中不在本次模板内的其他现有资源
核心YAML配置参考:
- task: AzureResourceManagerTemplateDeployment@3 inputs: deploymentScope: 'Resource Group' azureResourceManagerConnection: '<目标环境Azure服务连接名>' subscriptionId: '<目标ADF订阅ID>' action: 'Create Or Update Resource Group' resourceGroupName: '<目标ADF所在资源组>' location: '<目标区域>' templateLocation: 'Linked artifact' csmFile: '$(Build.ArtifactStagingDirectory)/adf-migration/arm_template.json' csmParametersFile: '$(Build.ArtifactStagingDirectory)/adf-migration/arm_template_parameters_target.json' deploymentMode: 'Incremental' deploymentName: 'adf-single-pipeline-migration' - 迁移后校验
部署完成后进入目标ADF,先逐个测试迁移过来的链接服务连通性,再对迁移的pipeline做调试运行,确认所有活动执行正常、无依赖缺失后,再按需开启对应触发器。
内容的提问来源于stack exchange,提问作者user10486706
相关产品推荐
相关产品推荐

