从 CLI 将 url 作为 ARM 模板中的参数传递

Passing url as parameter in ARM template from CLI

我正在尝试使用 Linked ARM 模板部署 azure 资源,为此我将参数文件和模板文件放在 blob 存储中。 Link 对于参数文件和 blob 存储,我需要在从 CLI 执行 azure 命令时作为参数传递。下面是我的示例 masterazuredeploy.json

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {
    "templateBaseUrl": "[parameters('templateBaseUrl')]",
    "parameterBaseUrl": "[parameters('parameterBaseUrl')]",
    "keyVaultDeployTemplateUrl": "[uri(variables('templateBaseUrl'), 'keyvaultdeploy.json')]"
  },
  "resources": [
    {
      "apiVersion": "[variables('apiVersionResourceDeployment')]",
      "name": "keyVaultDeployment",
      "type": "Microsoft.Resources/deployments",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[variables('keyVaultDeployTemplateUrl')]"
        },
        "parametersLink": {
          "uri": "[variables('keyVaultparameterFileUrl')]"
        }
      }
    }

  ]
}

为了执行这个,我给出了以下 CLI 命令:

az group deployment create --resource-group abc-devops-test --template-file .\masterazuredeploy.json  --parameters templateBaseUrl="https://test.blob.core
.windows.net/azurestackautomationtest/resourcetemplates/"  parameterBaseUrl="https://test.blob.core.windows.net/azurestackautomationtest/parameters/dev/" --verbose

执行时出现以下错误:

unrecognized template parameter 'templateBaseUrl'. Allowed parameters:
command ran in 1.918 seconds.

我试过不带反引号的参数值,带单引号的。还是行不通。我到底错过了什么。

也尝试了另一种方法,将两个参数都放在 global.parameters.json 中,如下所示,

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "templateBaseUrl": {
      "value": "https://test.blob.core.windows.net/azurestackautomation/resourcetemplates/"
    },
    "parameterBaseUrl": {
      "value": "https://test.blob.core.windows.net/azurestackautomation/parameters/dev/"
    }
  }
}

并将此文件上传到 blob 存储,并将 blob 存储的路径作为参数

az group deployment create --resource-group abc-devops-test --template-file .\masterazuredeploy.json  --parameters https://test.blob.core.windows.net/azur
estackautomationtest/parameters/dev/global.parameters.json  --verbose

但出现以下错误:

400 Client Error: Bad Request for url: https://management.azure.com/subscriptions/XXXX-xx-x-x-x--x-x/resourcegroups/abc-devops-test/providers/Microsoft.Resources/deployments/masterazuredeploy?api-version=2018-05-01
command ran in 5.646 seconds.

正如我在你的模板中看到的那样,你错过了设置参数,你所做的是将参数值输入到模板中的参数中,无论你提供了两个 CLI 命令。但是你没有设置参数所以没有参数你可以使用。我建议您将模板更改为以下内容:

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "templateBaseUrl": {
            "type": "string"
        },
        "parameterBaseUrl": {
            "type": "string"
        }
    },
    "variables": {
      "keyVaultDeployTemplateUrl": "[uri(parameters('templateBaseUrl'), 'keyvaultdeploy.json')]"
    },
    "resources": [
      {
        "apiVersion": "[variables('apiVersionResourceDeployment')]",    #1
        "name": "keyVaultDeployment",
        "type": "Microsoft.Resources/deployments",
        "properties": {
          "mode": "Incremental",
          "templateLink": {
            "uri": "[variables('keyVaultDeployTemplateUrl')]"
          },
          "parametersLink": {
            "uri": "[variables('keyVaultparameterFileUrl')]"     #2
          }
        }
      }

    ]
  }

而且您还错过了设置变量 apiVersionResourceDeploymentkeyVaultparameterFileUrl。您可以根据需要使用参数和变量。