Синтаксис параметров зоны доступности Azure
Я пытаюсь параметризовать развертывание виртуальной машины, которая использует зоны доступности. Тем не менее, я продолжаю получать эту ошибку при развертывании:
"Предоставленное значение для параметра шаблона" AvailabilityZoneParameter "в строке" 1 "и столбце" 5118 "недопустимо."
или же:
"Сбой анализа шаблона развертывания: 'Ошибка преобразования значения \"[ '1' ]\"в тип'System.String[]'. Path ''.'."
Синтаксис файла параметров в настоящее время:
"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')]"
Ресурс шаблона виртуальной машины (параметр вызова):
"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":
Для контекста - здесь есть несколько файлов. Исходный файл параметров Azure, файл Azuredeploy, а затем, по крайней мере, два связанных шаблона, которые также зависят от значения зоны доступности.
Любой совет о правильном синтаксисе?
3 ответа
Согласно примеру, который я нашел в Интернете, это должно быть так:
"availabilityZoneParameter": {
"value": [ "1" ]
}
также это должен быть массив:
"availabilityZoneParameter": {
"type": "array"
}
Поскольку он исключает массив, а не строку, которая выглядит как массив:
Окончательный синтаксис для тех, кто приходит на эту доску и ищет тот же ответ:
Обратите внимание, что значение является массивом, а не строкой, как указано автором 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')]",
Как видите, я решил не превращать его в переменную, поскольку в моем случае это было не нужно.
Должен ли параметр просто быть?
"availabilityZoneParameter": {
"value": "1"
}