参数化 Azure 数据工厂中的连接(ARM 模板)

use*_*198 5 azure azure-resource-manager azure-data-factory

我正在尝试在 CI/CD 设置中设置 Azure 数据工厂。我遵循了 Microsoft 的最佳实践(https://docs.microsoft.com/en-us/azure/data-factory/continuous-integration-deployment)。

我有 4 个环境(开发、测试、UAT、PRD)

简而言之,我做了什么:

  • 创建一个 Azure 数据工厂并将其链接到我在 DEV 环境中的 Azure DevOps 存储库

  • 在其他环境(测试、UAT 和 PRD)上创建 Azure 数据工厂,但不要将其链接到 DevOps。而是使用 ARM 模板在这些数据工厂上发布管道,并在 Azure DevOps 中发布管道。

  • 我已经参数化了所有必要的部分,以便能够覆盖我每个环境中的设置。

此时,我能够成功部署到我的其他环境,但是,我在 azure 上的数据库的链接服务无法正常工作。我已经参数化了一切,就像微软建议的那样,但是当我将我的链接服务导出到 ARM 模板时,它使用连接字符串而不是我的参数化设置。

下面是我在 Azure 数据工厂门户中的设置图片: daf 设置

当我尝试将其导出到 ARM 模板时,我得到以下信息:

{
            "name": "[concat(parameters('factoryName'), '/database')]",
            "type": "Microsoft.DataFactory/factories/linkedServices",
            "apiVersion": "2018-06-01",
            "properties": {
                "parameters": {
                    "sqlServerUrl": {
                        "type": "string"
                    },
                    "databaseName": {
                        "type": "string"
                    },
                    "sqlPwd": {
                        "type": "string"
                    },
                    "sqlAdminUsername": {
                        "type": "string"
                    }
                },
                "annotations": [],
                "type": "AzureSqlDatabase",
                "typeProperties": {
                    "connectionString": {
                        "type": "SecureString",
                        "value": "[parameters('database_connectionString')]"
                    }
                }
            },
            "dependsOn": []
        },
Run Code Online (Sandbox Code Playgroud)

这个ARM模板的问题是它没有使用参数来创建连接字符串,而是使用连接字符串参数database_connectionString(默认情况下连接字符串总是由Azure参数化,所以我不能删除这个参数)。

发布管道使用此模板时,没有填写连接字符串(仅填写参数),因此与数据库的连接失败。您应该如何设置连接,以便您只需更改参数即可自动(无需人工交互)部署到所有环境?

我不想更改来自 Azure 数据工厂的 ARM 模板,因为这需要人工交互

Bev*_*van 0

我通过使用Azure resource group deployment发布中的任务来完成此操作。其中一个选项Override template parameters可以让您完全按照您的需要进行操作。您可以创建一个空格分隔的参数列表来覆盖您的 ARM 模板并传入变量

在你的情况下它会是

-database_connectionstring $(VariableHere)
Run Code Online (Sandbox Code Playgroud)

我会将连接字符串存储在 Azure KeyVault 中并将其链接到安全变量组。您也可以直接点击标准变量上的挂锁来保护它。

然后将您的自定义变量绑定到发布中的每个阶段

任务 在此输入图像描述

覆盖 在此输入图像描述