3

我正在尝试参数化使用可用区的 VM 部署。但是,我在部署时不断收到此错误:

'在'1'行和'5118'列中为模板参数'availabilityZoneParameter'提供的值无效。'

或者:

“部署模板解析失败:'错误转换值\“['1']\”以键入'System.String[]'。路径''。'。”

参数文件语法目前为:

"availabilityZoneParameter": {
  "value": "[ '1' ]"
}

然后我将它作为参数移植并将其转换为变量,然后将其导出到其他链接模板以及在初始构建模板中使用它。

部署文件语法中的参数:

"availabilityZoneParameter": {
  "type": "string"
}

原始部署文件语法中的变量:

"availabilityZone": "[parameters('availabilityZoneParameter')]"

原始部署文件中的磁盘创建语法:

    {
  "name": "[variables('diskName')]",
  "type": "Microsoft.Compute/disks",
  "apiVersion": "2017-03-30",
  "location": "[resourceGroup().location]",
  "zones": [ "[variables('availabilityZone')]" ],
  "sku": {
    "name": "Standard_LRS"
  },
  "properties": {
    "creationData": {
      "createOption": "Empty"
    },
    "diskSizeGB": 1023
  }
},

原始部署模板中的 VM 参数,该参数输入链接模板:

      "name": "PAN-VM",
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2018-05-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/disks/', variables('diskName'))]",
    "Microsoft.Resources/deployments/SettingUpVirtualNetwork",
    "Microsoft.Resources/deployments/SettingUpPublicIP",
    "Microsoft.Resources/deployments/SetupNetworkInterfaces"
  ],
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "[concat(variables('virtualMachineTemplate'), parameters('artifactsLocationSasToken'))]",
      "contentVersion": "1.0.0.5"
    },
    "parameters": {
"avZone": {
        "value": "[variables('availabilityZone')]"

虚拟机模板参数:

    "avZone": {
  "type": "string"

虚拟机模板变量:

  "variables": {
"apiVersion": "2018-04-01",
"availabilityZone": "[parameters('avZone')]"

VM模板资源(调用参数):

  "resources": [
{
  "apiVersion": "[variables('apiVersion')]",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('location')]",
  "zones": "[variables('availabilityZone')]",
  "plan": {
    "name": "[parameters('imageSku')]",
    "product": "[parameters('imageOffer')]",
    "publisher": "[parameters('imagePublisher')]"
  },
  "properties":

对于上下文 - 这里有几个文件在起作用。一个初始的 azureparameters 文件、一个 azuredeploy 文件,然后是至少两个也依赖于可用区值的链接模板。

关于正确语法的任何建议?

4

3 回答 3

3

根据我在网上找到的例子,应该是这样的:

"availabilityZoneParameter": {
    "value": [ "1" ]
}

另外,它应该是数组:

"availabilityZoneParameter": {
    "type": "array"
}

因为它除了一个数组,而不是一个看起来像数组的字符串:

https://github.com/Azure/azure-quickstart-templates/blob/master/101-vm-simple-zones/azuredeploy.json#L176

于 2019-02-21T12:45:48.003 回答
0

参数应该只是?

"availabilityZoneParameter": {
  "value": "1"
}
于 2019-02-21T13:16:32.703 回答
0

最后的语法,对于那些来到这个董事会寻求相同答案的人:

请注意,正如贡献者 4c74356b41 在此线程中指出的那样,该值是一个数组而不是字符串。

在原始 azureparameter 文件中:

    },
"availabilityZone": {
  "value": [ "3" ]
}

在 azuredeploy 文件中:

    },
"availabilityZone": {
  "type": "array"
}

调用嵌套模板中的可用区参数(使用存储磁盘资源的示例):

  "name": "[variables('diskName')]",
  "type": "Microsoft.Compute/disks",
  "apiVersion": "2017-03-30",
  "location": "[resourceGroup().location]",
  "zones": "[parameters('availabilityZone')]",
  "sku": {

如果使用链接模板,在表达链接模板参数时,我使用了以下语法:

"avZone": {
  "value": "[parameters('availabilityZone')]"

在链接模板中导入参数:

    },
"avZone": {
  "type": "array"
}

然后在链接模板内的资源中,我以与 azuredeploy 模板相同的方式调用参数:

  "apiVersion": "[variables('apiVersion')]",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('location')]",
  "zones": "[parameters('avZone')]",

正如你所看到的,我决定不把它变成一个变量,因为这对我来说是不必要的。

于 2019-02-21T15:48:31.377 回答