如何在ADF中创建可动态传入自托管IR参数的SQL MI链接服务?
动态配置Azure数据工厂链接服务的自托管集成运行时
需求说明
我拥有5个自托管集成运行时,分别为shir、shir 1、shir2……shir5。需要在Azure数据工厂(ADF)中创建指向SQL托管实例(SQL MI)的链接服务,实现动态传入自托管集成运行时名称的功能。
现有方案问题分析
你尝试的两种ARM模板均存在逻辑错误:
- 第一种模板通过ARM部署参数传递IR名称,属于部署时静态绑定,无法在运行时动态切换IR;
- 第二种模板错误混用了ARM模板函数与ADF运行时表达式,
@{linkedService().xxx}是ADF运行时语法,但嵌套在ARM的concat函数中会被当作纯字符串处理,无法生效。
正确实现方案
要实现运行时动态指定IR,需创建带参数的链接服务,并在使用该服务的活动(如复制活动)中传递参数。以下是适配SQL MI的正确ARM模板:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ { "type": "Microsoft.DataFactory/factories/linkedservices", "apiVersion": "2018-06-01", "name": "[concat(parameters('factoryName'), '/LS_SQL_MI_Dynamic_IR')]", "properties": { "type": "SqlManagedInstance", "typeProperties": { "connectionString": "Data Source=tcp:<你的SQL MI服务器名称>.database.windows.net,1433;Initial Catalog=<目标数据库名称>;Integrated Security=False;", "authenticationType": "SqlAuthentication", "userName": "<SQL登录用户名>", "password": { "type": "SecureString", "value": "<SQL登录密码>" } }, "connectVia": { "referenceName": "@{linkedService().IntegrationRuntimeName}", "type": "IntegrationRuntimeReference" }, "parameters": { "IntegrationRuntimeName": { "type": "String", "defaultValue": "shir" } } } } ], "parameters": { "factoryName": { "type": "String" } } }
核心配置说明
- 定义链接服务参数:在
parameters节点新增IntegrationRuntimeName参数,可设置默认值(可选); - 动态引用IR:
connectVia.referenceName直接使用ADF运行时表达式@{linkedService().IntegrationRuntimeName},无需嵌套ARM函数; - 运行时传参:在复制活动或其他调用该链接服务的环节中,进入链接服务参数配置界面,通过以下方式传递目标IR名称:
- 静态值:直接输入
shir2等具体IR名称; - 动态表达式:如
@pipeline().parameters.TargetIRName,通过管道参数传递。
- 静态值:直接输入
常见误区规避
- 区分ARM部署语法与ADF运行时表达式:ARM的
[]为部署时求值,ADF的@{}为运行时求值,两者不可混用; - 若需批量创建绑定不同IR的静态链接服务,才使用第一种ARM参数化方式,但该方式无法实现运行时切换;
- 确保目标自托管IR已在ADF中完成注册,且网络环境可访问SQL托管实例。
相关配置截图:
内容的提问来源于stack exchange,提问作者bin
相关产品推荐
相关产品推荐

