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

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

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

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

  • Ошибки проверки: происходят до начала развертывания и вызываются синтаксическими ошибками в файле. Редактор кода, например Visual Studio Code, может определить эти ошибки.
  • Ошибки проверки перед запуском происходят, когда команда развертывания выполняется, но ресурсы не развертываются. Эти ошибки обнаруживаются без запуска развертывания. Например, если значение параметра неверно, ошибка обнаруживается в предварительной проверке.
  • ошибки Deployment происходят во время процесса развертывания и могут быть найдены только путем оценки хода развертывания в среде 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: указывает на ошибку. Чтобы увидеть ошибку проверки, наведите указатель мыши на ошибку.

Снимок экрана Visual Studio Code с выделением ошибки валидации шаблона красной волнистой линией под ошибочно написанным 'parameterss:' в коде.

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

Скриншот Visual Studio Code, показывающий вкладку

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

"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 символов, содержащий только строчные буквы или цифры.

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

Снимок экрана страницы обзора группы ресурсов Azure, на которой отображается пустой раздел истории развертываний из-за ошибки предварительной проверки.

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

Снимок экрана журнала действий группы ресурсов Azure с записью предварительной ошибки с красным восклицательным знаком значок.

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

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

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

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

Снимок экрана страницы обзора группы ресурсов Azure, на которой в разделе истории развертывания показана неудачная развертка с красным восклицательным знаком.

Чтобы исправить ошибку развертывания, можно изменить функцию ссылки таким образом, чтобы использовался допустимый ресурс. Дополнительные сведения см. в статье Устранение ошибок, связанных с отсутствием ресурса. Для этого быстрого начала удалите запятую перед 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.