Краткое руководство: устранение неполадок при развертывании JSON для шаблонов ARM

В этом кратком руководстве объясняется, как устранять неполадки при развертывании JSON шаблонов Azure Resource Manager (ARM). Вы настроите шаблон с ошибками и узнаете, как исправить их.

Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.

Существует три типа ошибок, связанных с развертыванием.

  • Ошибки проверки: происходят до начала развертывания и вызываются синтаксическими ошибками в файле. Редактор кода, например Visual Studio Code, может определить эти ошибки.
  • Ошибки проверки перед запуском происходят, когда команда развертывания выполняется, но ресурсы не развертываются. Эти ошибки обнаруживаются без запуска развертывания. Например, если значение параметра является неверным, то в ходе предварительной проверки будет обнаружена ошибка.
  • Ошибки развертывания: возникают в процессе развертывания, и их можно обнаружить только путем оценки хода выполнения развертывания в среде Azure.

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

Необходимые компоненты

Для работы с этим кратким руководством вам потребуется следующее:

Создание шаблона с ошибками

Скопируйте следующий шаблон и сохраните его локально. Этот файл будет использоваться для устранения ошибок проверки, ошибок предварительный проверки и ошибок развертывания. В этом кратком руководстве предполагается, что вы присвоили файлу имя troubleshoot.json, но вы можете использовать любое имя.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameterss": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    },
    "vnetResult": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
    }
  }
}

Исправление ошибки проверки

Откройте файл в Visual Studio Code. Волнистая линия под parameterss: указывает на ошибку. Чтобы просмотреть сведения об ошибке проверки, наведите указатель мыши на ошибку.

Screenshot of Visual Studio Code highlighting a template validation error with a red wavy line under the misspelled 'parameterss:' in the code.

Вы увидите, что в variables и resources есть ошибки ссылки на неопределенный параметр. Чтобы отобразить ошибки проверки шаблона, выберите Вид>Проблемы.

Screenshot of Visual Studio Code showing the Problems tab listing undefined parameter reference errors for 'variables' and 'resources' sections.

Все ошибки вызваны неправильным написанием имен элементов.

"parameterss": {

В сообщении об ошибке указано следующее: Template validation failed: Could not find member 'parameterss' on object of type 'Template'. Path 'parameterss', line 4, position 16 (Проверка шаблона завершилась ошибкой. Не удалось найти элемент "parameterss" в объекте типа "Template". Путь "parameterss", строка 4, позиция 16).

Синтаксис шаблона ARM для parameters показывает, что правильное имя элемента — parameters.

Чтобы устранить ошибку проверки и ошибки ссылки на неопределенный параметр, исправьте написание и сохраните файл.

"parameters": {

Исправление ошибки предварительной проверки

Чтобы создать ошибку проверки перед запуском, вы будете использовать неверное значение для параметра prefixName.

В этом кратком руководстве имя группы ресурсов — troubleshootRG, но можно использовать любое имя.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=long!!StoragePrefix

Шаблон не проходит проверки перед запуском, и развертывание не выполняется. prefixName содержит 11 символов, а также специальные символы и прописные буквы.

Имя хранилища должно содержать от 3 до 24 символов, а также только строчные буквы и цифры. Из-за значения префикса создано недопустимое имя хранилища. Дополнительные сведения см. в статье об устранении ошибок, связанных с именами учетных записей хранения. Чтобы устранить ошибку проверки перед запуском, используйте префикс, который содержит не более 11 символов и только строчные буквы или цифры.

Так как развертывание не выполнялось, журнала развертывания нет.

Screenshot of Azure resource group overview page displaying an empty deployment history section due to a preflight error.

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

Screenshot of Azure resource group activity log showing a preflight error entry with a red exclamation mark icon.

Исправление ошибки развертывания

Запустите развертывание с допустимым значением префикса, например storage.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=storage

Начнется развертывание, сведения о котором будут отображаться в журнале развертывания. Развертывание завершается сбоем, так как outputs ссылается на виртуальную сеть, которая не существует в группе ресурсов. Но для учетной записи хранения ошибки не происходили, поэтому ресурс развернут. В журнале развертывания отображаются сведения о том, что развертывание выполнить не удалось.

Screenshot of Azure resource group overview page showing a failed deployment with a red exclamation mark icon in the deployment history section.

Чтобы исправить ошибку развертывания, можно изменить функцию ссылки таким образом, чтобы использовался допустимый ресурс. Дополнительные сведения см. в статье Устранение ошибок, связанных с отсутствием ресурса. Для работы с этим кратким руководством удалите запятую перед vnetResult и все vnetResult. Сохраните файл и запустите развертывание снова.

"vnetResult": {
  "type": "object",
  "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Очистка ресурсов

Если ресурсы Azure больше не нужны, удалите группу ресурсов.

az group delete --name troubleshootRG

Чтобы удалить группу ресурсов с портала, выполните следующие действия:

  1. В портал Azure введите группы ресурсов в поле поиска.
  2. В поле Фильтровать по имени введите имя группы ресурсов.
  3. Выберите имя группы ресурсов.
  4. Выберите команду Удалить группу ресурсов.
  5. Чтобы подтвердить удаление, введите имя ресурса и выберите Удалить.

Следующие шаги

Из этого краткого руководства вы узнали, как устранять ошибки, связанные с развертыванием шаблона ARM.