簡體   English   中英

使用參數化數據庫連接部署 Azure 數據工廠

[英]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 模板參數文件沒有正確創建? 有人遇到過這個問題嗎?

我的動態連接在 ADF UI 中的外觀

有多種方法可以解決這個問題。 我假設您使用 Azure Pipelines 來部署您的 ARM 模板。 總的來說,您沒有提供有關如何部署 ARM 模板的任何細節。

對於下面的兩個示例,我將創建一個 ARM parameters.json 文件並將其保存在存儲庫中。

  1. 您可以使用 PowerShell 腳本來更改文件。 下面是一個例子:
- 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

  1. 我們個人使用這樣的東西: https : //marketplace.visualstudio.com/items?itemName=qetza.replacetokens

然后您將標記 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 中的值作為變量讀取到管道中,然后您可以在部署中使用這些值。 在您的情況下,每個環境都有一個舞台。

上述任務也可以在經典管道中使用。

總體而言,要使其正常工作,您應該以某種方式設計部署管道,即每個環境都有自己的階段,並且每個環境都可以替換配置值,如下所示: 在此處輸入圖片說明

經典管道的文檔:

yaml 管道變量的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM