使用参数化数据库连接部署Azure数据工厂
我已在Azure Data Factory中为我的Azure SQL DB成功创建了参数化链接服务。但是,当我尝试跨环境部署它时,我会遇到问题。发布数据工厂时,生成的ARM模板参数文件仅包含链接服务的单个参数,并且未填充该文件使用参数化数据库连接部署Azure数据工厂,azure,azure-data-factory,azure-data-factory-2,Azure,Azure Data Factory,Azure Data Factory 2,我已在Azure Data Factory中为我的Azure SQL DB成功创建了参数化链接服务。但是,当我尝试跨环境部署它时,我会遇到问题。发布数据工厂时,生成的ARM模板参数文件仅包含链接服务的单个参数,并且未填充该文件 "Generic_Databases_connectionString": { "value": "" }, 根据microsoft提供的文档,我想我可以在部署中用正确的参数化值
"Generic_Databases_connectionString": {
"value": ""
},
根据microsoft提供的文档,我想我可以在部署中用正确的参数化值覆盖它。比如:
"Server=tcp:myserver.database.windows.net,1433;Database=@{linkedService().DBName};User ID=user;Password=fake;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
然而,由于我的密码存储在密钥库中,我不能简单地将其包含在这里。我认为问题在于我的ARM模板参数文件没有正确创建?有人面对过这个问题吗
有多种方法可以实现这一点。我假设您使用Azure管道来部署ARM模板。总的来说,您没有给出关于如何部署ARM模板的任何细节 对于下面的两个示例,我将创建一个ARM parameters.json文件并将其保存在存储库中
-任务:PowerShell@2
投入:
targetType:“内联”
脚本:|
$filePath='arm.parameters.json'
$tempFilePath=“temp.arm.parameters.json”
$find='dbSecret'
$replace='VariableNameFromKV'
(获取内容-路径$filePath)-替换$find,$replace |添加内容-路径$tempFilePath
删除项-路径$filePath
移动项目-路径$tempFilePath-目标$filePath
"Generic_Databases_connectionString": {
"value": "#{NameOfKVSecret}#"
},
然后在每个环境的管道中运行此任务,以替换标记化值:
#YAML文件
-任务:a8515ec8-7254-4ffd-912c-86772e2b5962@3
displayName:“替换ARM参数中的令牌”
投入:
根目录:“$(Pipeline.Workspace)/drop”
targetFiles:“**/fileToReplace.json”
编码:“自动”
writeBOM:对
基普顿肯:错
标记前缀:'#{'
标记后缀:'}#'
启用遥测:错误
actionOnMissing:“继续”
详细的
#使用替换的parameters.json文件执行其余部署任务
您需要将变量导入管道。有多种方法可以做到这一点,具体取决于您是使用经典管道还是YAML。例如,如果您的环境有单独的密钥保险库,您可以将这些值存储在其中并使用:
#YAML文件
-任务:AzureKeyVault@1
displayName:获取KeyVault变量
投入:
azureSubscription:“${{parameters.KV_APP_NAME}”
KeyVault名称:“$(vg.KeyVault名称)”
此任务将KV中的值作为变量读取到管道中,然后您可以在部署中使用这些变量。在您的情况下,每个环境都有一个阶段
上述两个任务也可以在经典管道中使用
总的来说,为了实现这一点,您应该以这样的方式设计部署管道:每个环境都有自己的阶段,每个环境的配置值都可以替换,如下所示: