在部署ARMtemplate时,如何在TemplateParameterObject参数中传递引用

时间:2017-02-10 08:32:05

标签: powershell azure arm-template

执行New-AzureRmResourceGroupDeployment命令时,您可以通过TemplateParameterObject参数传递模板参数。这适用于简单的属性和数组,但我似乎无法让它用于引用。所以在ARM模板参数文件中看起来像这样:

"adminPassword": {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/365d8c14-efa0-437e-a2c8-c3ffc8f6287a/resourceGroups/musw1-prf-jboyd-kv-rg/providers/Microsoft.KeyVault/vaults/musw1-prf-jboyd-kv"
    },
    "secretName": "adminPassword"
  }
}

我试过这个:

$parameters = @{
    adminPassword = @{
        reference = @{
            keyVault = @{
                id = $KeyVaultId
            }
            secretName = 'adminPassword'
        }
    }
}

New-AzureRmResourceGroupDeployment `
    -ResourceGroupName $ResourceGroupName `
    -TemplateFile $TemplateFile `
    -TemplateParameterObject $parameters

但我得到的只是:

  

部署模板验证失败:'第13行和第27行的模板参数'adminPassword'的提供值无效。'。

2 个答案:

答案 0 :(得分:1)

目前,ARM模板参数中的密钥保管库引用似乎仅通过参数文件而非参数对象支持:See here for the issue that's been raised with Microsoft

虽然它不如使用-TemplateParameterObject那么友好,但是一个可以让您在不暴露Key Vault秘密的情况下编写脚本的解决方法是通过PowerShell以编程方式创建和填充您的JSON模板文件,然后将其传递给New-AzureRmResourceGroupDeployment。通过执行此操作,您可以间接继续引用密钥保管库密钥,而无需在本地存储或以任何方式将其作为明文显示。

答案 1 :(得分:0)

在PowerShell中不使用TemplateParameterObject参数的另一种解决方法是添加一个嵌套模板并传入包含reference to the dynamically generated Azure Key Vault resource ID的参数。