我正在尝试参数化使用可用性区域的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')]"
VM模板参数:
"avZone": {
"type": "string"
VM模板变量:
"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文件,然后是至少两个也依赖于可用区值的链接模板。
对正确语法有何建议?
答案 0 :(得分:2)
根据我在网上找到的示例,它应该像这样:
"availabilityZoneParameter": {
"value": [ "1" ]
}
另外,它应该是数组:
"availabilityZoneParameter": {
"type": "array"
}
因为它是数组,而不是看起来像数组的字符串:
答案 1 :(得分:0)
参数应该是吗?
"availabilityZoneParameter": {
"value": "1"
}
答案 2 :(得分:0)
最终语法,对于那些来此理事会寻求相同答案的人:
请注意,该值是一个数组,而不是字符串,正如该线程中的贡献者4c74356b41所指出的那样。
在原始的Azure参数文件中:
},
"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')]",
如您所见,我决定不将其转换为变量,因为对于我而言这是不必要的。