在 ADF ARM 模板中参数化自托管集成运行时

Parameterize Self hosted integration runtime in ADF ARM Template

我们有不同的 ADF 环境,例如 TST、UAT 和 prod。在每个环境中,自托管 IR 名称都不同。 是否可以在 ADF ARM 模板中参数化集成运行时,以便在通过 CI/CD 部署 ARM 模板时,我们可以在部署期间在 DevOps 变量组中传递 IR 名称。

我已尝试使用以下设置更改 ADF 中的参数化模板,但 IR 名称在 ARM 模板参数中仍然不可用 JSON 'arm_template_parameters.json'.

在搜索时,我发现它无法在 ADF ARM 模板中参数化集成运行时。

其他人已经发布了几乎相同的问题,Microsoft 工程师提供了一些可能有用的解决方法。他还说:

  • "您的意思是使用自定义参数来参数化 IR 名称?没有 别无他法。"

您可以参考这个问题:ARM Template Custom Parameters for (self-hosted)Integration Runtime

是的,您可以参数化 IR 运行时。但这是内在的障碍。

您可以为要使用的 IR 指定别名,并在 DEV/UAT 和 PROD 上使用相同的别名。

然后该别名将显示在您的 ARM 模板中,向要用于它的集成运行时请求 resourceId。

为了更清楚,让我们假设您有 3 个不同的 ADF 帐户:

  • ADF_DEV
  • ADF_UAT
  • ADF_PRD

有人设置了自托管 IR,它的资源 ID 类似于: /subscriptions/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourcegroups/some-resource-group/providers/Microsoft.DataFactory/factories/SHARED_ADF/integrationruntimes/SOMESELFHOSTEDIR

所以在 ADF-DEV 中你会有这样的 IR:

{
    "name": "SELFHOSTEDGW",
    "properties": {
        "type": "SelfHosted",
        "typeProperties": {
            "linkedInfo": {
                "resourceId": "/subscriptions/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourcegroups/some-resource-group/providers/Microsoft.DataFactory/factories/SHARED_ADF/integrationruntimes/SOMESELFHOSTEDIR",
                "authorizationType": "Rbac"
            }
        }
    }
}

在这里您可以看到 IR 的自定义别名是 SELFHOSTEDGW。 只需将您的链接服务指向此别名,在 Devops 上只需指定此 SELFHOSTEDGW 别名的不同资源 ID。

嘿@Aneesh 和@Leon Yue, 美好的一天!

实际上可以在arm模板中参数化IR名称并基于Azure Devops进行部署:) 为此,您必须在 ARM 模板和从 ADF 门户中提取的模板参数中显式创建新参数。

如下所示,直到 SQL Server1_properties 是在 ARM 模板导出后自动创建的。 我们手动创建了一个新参数 IRName_properties_typeProperties_parametervalue"

然后在模板本身内,用参数替换所有 IR 名称值:

注意:您还需要在参数模板中添加新的手动创建的参数。

然后在 Azure Devops 发布管道中,您可以使用 Devops 变量覆盖参数

发现它无法在 ADF ARM 模板中参数化集成运行时。 我们有解决此问题的方法。在 Azure DevOps 管道中,我们创建了一个 PowerShell 任务,以根据 DevOps 发布管道中定义的变量组替换自托管 IR 名称。在将 ADF ARM 模板部署到不同环境时,shell 脚本将 IR 名称替换为环境特定的 IR 名称。

#Powershell 脚本

#从 Devops 验证组获取新的 IR 名称 $integrationRuntime="$(integrationRuntimeName)"

#replacing IR名称 ((Get-Content -path ARMTemplateForFactory.json -Raw) -replace 'The IR NAME to be replaced',$integrationRuntime) |设置内容-路径 ARMTemplateForFactory.json

Get-Content -path ARMTemplateForFactory.json -Raw