【问题标题】:How can I pass a reference in the TemplateParameterObject parameter when deploying an ARMtemplate部署 ARM 模板时如何在 TemplateParameterObject 参数中传递引用
【发布时间】:2017-02-10 08:32:04
【问题描述】:

执行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' 提供的值无效。'。

【问题讨论】:

    标签: powershell azure arm-template


    【解决方案1】:

    目前,ARM 模板参数中的 Key Vault 引用似乎仅通过参数文件而不是参数对象支持:See here for the issue that's been raised with Microsoft

    虽然它不像使用 -TemplateParameterObject 那样友好,但一种解决方法可以让您在不暴露 Key Vault 机密的情况下编写脚本,即通过 PowerShell 以编程方式创建和填充 JSON 模板文件,然后将其传递到 @987654323 @。通过这样做,您可以继续间接引用 Key Vault 机密,而无需将其存储在本地或以任何方式将其公开为明文。

    【讨论】:

    • 其实我最后就是这样做的。
    • 我现在给你分数,但是当他们添加支持时你必须回来更新你的答案:)
    • 哈哈 - 这是一笔交易;)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多