Синтаксис параметров зоны доступности Azure - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь параметризовать развертывание виртуальной машины, которая использует зоны доступности.Тем не менее, я получаю эту ошибку при развертывании:

'Недопустимое значение для параметра шаблона' AvailabilityZoneParameter 'в строке' 1 'и столбце' 5118 '.'

или:

"Сбой анализа шаблона развертывания: 'Ошибка преобразования значения \" [' 1 '] \ "в тип' System.String [] '. Path' '.'.". "1007 *

ПараметрСинтаксис файла в настоящее время:

"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')]"

Ресурс шаблона виртуальной машины (параметр вызова):

  "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, а затем по крайней мере два связанных шаблона, которые также зависят от значения зоны доступности.

Любой совет относительно правильного синтаксиса?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Должен ли параметр быть просто?

"availabilityZoneParameter": {
  "value": "1"
}
0 голосов
/ 21 февраля 2019

Окончательный синтаксис для тех, кто приходит на эту доску и ищет тот же ответ:

Обратите внимание, что значение является массивом, а не строкой, как указано автором 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')]",

Как видите, я решил не превращать его в переменнуюкак это было ненужно в моем случае.

0 голосов
/ 21 февраля 2019

В соответствии с примером, который я нашел в сети, он должен выглядеть следующим образом:

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

также он должен быть массивом:

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

Поскольку он исключает массив,не строка, которая выглядит как массив:

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

...