Azure可用性区域参数语法

Azure可用性区域参数语法,azure,jenkins,cloud,infrastructure-as-code,Azure,Jenkins,Cloud,Infrastructure As Code,我正在尝试参数化使用可用性区域的VM部署。但是,我在部署时不断收到此错误: '为第'1'行和第'5118'列的模板参数'availabilityZoneParameter'提供的值无效。' 或: 部署模板分析失败:“将值\“['1']\”转换为类型“System.String[]”。路径“”时出错。” 参数文件语法当前为: "availabilityZoneParameter": { "value": "[ '1' ]" } 然后,我将它作为一个参数进行移植,并将其转换为一个变量,然后将其

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

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

或:

部署模板分析失败:“将值\“['1']\”转换为类型“System.String[]”。路径“”时出错。”

参数文件语法当前为:

"availabilityZoneParameter": {
  "value": "[ '1' ]"
}
然后,我将它作为一个参数进行移植,并将其转换为一个变量,然后将其导出到其他链接模板,并在初始构建模板中使用它

部署文件语法中的参数:

"availabilityZoneParameter": {
  "type": "string"
}
"availabilityZone": "[parameters('availabilityZoneParameter')]"
原始部署文件语法中的变量:

"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
  }
},
    },
"availabilityZone": {
  "type": "array"
}
原始部署模板中的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": "array"
}
  "apiVersion": "[variables('apiVersion')]",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('location')]",
  "zones": "[parameters('avZone')]",
VM模板参数:

    "avZone": {
  "type": "string"
  "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":
VM模板变量:

  "variables": {
"apiVersion": "2018-04-01",
"availabilityZone": "[parameters('avZone')]"
VM模板资源(调用参数):

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


关于正确语法有什么建议吗?

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

"availabilityZoneParameter": {
    "value": [ "1" ]
}
此外,它应该是数组:

"availabilityZoneParameter": {
    "type": "array"
}
因为它不包括数组,而不是看起来像数组的字符串:


参数是否应为

"availabilityZoneParameter": {
  "value": "1"
}

最后的语法,对于来到本委员会寻求相同答案的人:

请注意,正如参与者4c74356b41在本线程中指出的,该值是一个数组而不是字符串。

在原始azureparameter文件中:

    },
"availabilityZone": {
  "value": [ "3" ]
}
在azuredeploy文件中:

    {
  "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
  }
},
    },
"availabilityZone": {
  "type": "array"
}
要在嵌套模板中调用可用性区域参数(例如使用存储磁盘资源),请执行以下操作:

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

"avZone": {
  "value": "[parameters('availabilityZone')]"
在链接样板中导入参数:

      "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": "array"
}
  "apiVersion": "[variables('apiVersion')]",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('location')]",
  "zones": "[parameters('avZone')]",
然后在链接模板中的参考资料中,我以与azuredeploy模板相同的方式调用了参数:

      "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": "array"
}
  "apiVersion": "[variables('apiVersion')]",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('location')]",
  "zones": "[parameters('avZone')]",

如您所见,我决定不将其转换为变量,因为这在我的情况下是不必要的。

您能缩小一点吗?当然,我会更新一些详细信息。好的,我已经添加了各种语法,按照我认为它们执行的顺序。是的,这已经奏效了。当我尝试将它用作数组时,我遇到了一些错误。。。然后我意识到我有一些额外的括号在那里!现在已经修好了。谢谢你的帮助!嗨,德韦恩。参数值需要写入为数组和模板中指定的“数组”类型,而不是“字符串”类型。如果您感兴趣,那么请参阅我的“最终语法”的完整语法答案。