我需要很快地解决问题-当我们在开发ADF管道中添加Az函数时,这在开发过程中是一个新的惊喜。
在ADF V2中使用函数应用程序时,生成ARM模板时,它不会像其他链接服务中那样对键引用进行参数化。 gh!
因此,对于CI / CD场景,当我们部署时,我们现在有了固定功能的应用程序参考。我们想要做的与其他链接服务相同-覆盖关键参数以指向功能的正确Dev / UAT / Production环境版本。
我可以想到使用powershell进行覆盖的肮脏黑客(powershell是否支持ADF功能?不知道-一月份他们还不支持)。
关于如何覆盖功能应用链接服务设置的其他想法?
键参数在typeProperties下(假设功能键在keyvault中):
{"functionAppUrl:="https://xxx.azurewebsites.net"}
{"functionkey":{"store":{"referenceName"="xxxKeyVaultLS"}}}
{"functionkey":{"secretName"="xxxKeyName"}}
现在这些都是通过UI设置硬编码的-没有参数,没有默认值。
答案 0 :(得分:0)
好的,最终回到这个问题。
解决方案看起来很多,但是非常简单。
在我的devops发行版中,我已经在部署了数据工厂ARM模板并且已在Deployment.ps1上运行了具有“ predeployment = $ false”设置的powershell任务之后创建了Powershell任务(请参阅ADF CI / CD {{ 3}}。)
我的git仓库中有每个环境(dev / uat / prod)的json文件(实际上,我使用一个单独的“通用”仓库来存储除ADF git仓库之外的脚本,其在DevOps中的别名为“ _Common” -您将在下面的脚本的-File参数中看到此内容。
用于替换已部署的功能链接服务的json文件是ADF中功能链接服务json的副本,对于DEV来说,如下所示:
(scripts / Powershell / dev.json)
{
"name": "FuncLinkedServiceName",
"type": "Microsoft.DataFactory/factories/linkedservices",
"properties": {
"annotations": [],
"type": "AzureFunction",
"typeProperties": {
"functionAppUrl": "https://myDEVfunction.azurewebsites.net",
"functionKey": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "MyKeyvault_LS",
"type": "LinkedServiceReference"
},
"secretName": "MyFunctionKeyInKeyvault"
}
},
"connectVia": {
"referenceName": "MyintegrationRuntime",
"type": "IntegrationRuntimeReference"
}
}
}
...并且PROD文件将如下所示:
(scripts / Powershell / prod.json)
{
"name": "FuncLinkedServiceName",
"type": "Microsoft.DataFactory/factories/linkedservices",
"properties": {
"annotations": [],
"type": "AzureFunction",
"typeProperties": {
"functionAppUrl": "https://myPRODfunction.azurewebsites.net",
"functionKey": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "MyKeyvault_LS",
"type": "LinkedServiceReference"
},
"secretName": "MyFunctionKeyInKeyvault"
}
},
"connectVia": {
"referenceName": "MyintegrationRuntime",
"type": "IntegrationRuntimeReference"
}
}
}
然后在devops管道中,我使用一个如下所示的Powershell脚本块:
Set-AzureRMDataFactoryV2LinkedService -ResourceGroup "$(varRGName)" -DataFactoryName "$(varAdfName)" -Name "$(varFuncLinkedServiceName)" -File "$(System.DefaultWorkingDirectory)/_Common/Scripts/Powershell/$(varEnvironment).json" -Force
或表示Az
Set-AzDataFactoryV2LinkedService -ResourceGroupName "$(varRGName)" -DataFactoryName "$(varAdfName)" -Name "$(varFuncLinkedServiceName)" -DefinitionFile "$(System.DefaultWorkingDirectory)/_Common/Scripts/Powershell/Converter/$(varEnvironment).json" -Force
注意:
希望MSFT将发布使用参数的功能应用程序链接服务,但在那之前,这已经使我们沿着发布渠道发展。
HTH。马克。
更新:添加了AzureRM命令的Az cmdlet版本,并更改为Set(“ New-Az ...”有效,但在新的Az中-仅Set- for V2链接服务)。