[英]Deployment of Azure Data Factory with parameterized database connections
我已成功為 Azure 數據工廠中的 Azure SQL DB 創建了參數化鏈接服務。 但是,當我嘗試跨環境部署它時,我遇到了問題。 當我發布我的數據工廠時,生成的 ARM 模板參數文件只包含我的鏈接服務的一個參數,並且沒有填充
"Generic_Databases_connectionString": {
"value": ""
},
按照微軟網站的文檔,我想我可以在我的部署中用正確的參數化值覆蓋它。 就像是:
"Server=tcp:myserver.database.windows.net,1433;Database=@{linkedService().DBName};User ID=user;Password=fake;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
但是,由於我的密碼存儲在 Key Vault 中,我不能簡單地將其包含在此處。 我認為問題是我的 ARM 模板參數文件沒有正確創建? 有人遇到過這個問題嗎?
有多種方法可以解決這個問題。 我假設您使用 Azure Pipelines 來部署您的 ARM 模板。 總的來說,您沒有提供有關如何部署 ARM 模板的任何細節。
對於下面的兩個示例,我將創建一個 ARM parameters.json 文件並將其保存在存儲庫中。
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$filePath = 'arm.parameters.json'
$tempFilePath = "temp.arm.parameters.json"
$find = 'dbSecret'
$replace = 'VariableNameFromKV'
(Get-Content -Path $filePath) -replace $find, $replace | Add-Content -Path $tempFilePath
Remove-Item -Path $filePath
Move-Item -Path $tempFilePath -Destination $filePath
然后您將標記 parameters.json 中的值
"Generic_Databases_connectionString": {
"value": "#{NameOfKVSecret}#"
},
然后在每個環境的管道中,您將運行此任務來替換標記化值:
#YAML file
- task: a8515ec8-7254-4ffd-912c-86772e2b5962@3
displayName: 'Replace Tokens in ARM parameters'
inputs:
rootDirectory: '$(Pipeline.Workspace)/drop'
targetFiles: '**/fileToReplace.json'
encoding: 'auto'
writeBOM: true
keepToken: false
tokenPrefix: '#{'
tokenSuffix: '}#'
enableTelemetry: false
actionOnMissing: 'continue'
verbosity: detailed
#Rest of deployment tasks using the replaced parameters.json file
您需要將變量導入管道。 有多種方法可以做到這一點,具體取決於您是使用經典管道還是 yaml。 例如,如果您的環境有單獨的 Key Vault,則可以將這些值存儲在那里並使用:
#YAML file
- task: AzureKeyVault@1
displayName: Get KeyVault variables
inputs:
azureSubscription: '${{ parameters.KV_APP_NAME }}'
KeyVaultName: '$(vg.keyVaultName)'
此任務將 KV 中的值作為變量讀取到管道中,然后您可以在部署中使用這些值。 在您的情況下,每個環境都有一個舞台。
上述任務也可以在經典管道中使用。
總體而言,要使其正常工作,您應該以某種方式設計部署管道,即每個環境都有自己的階段,並且每個環境都可以替換配置值,如下所示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.