Краткое руководство: устранение неполадок при развертывании JSON для шаблонов ARM
В этом кратком руководстве объясняется, как устранять неполадки при развертывании JSON шаблонов Azure Resource Manager (ARM). Вы настроите шаблон с ошибками и узнаете, как исправить их.
Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.
Существует три типа ошибок, связанных с развертыванием.
- Ошибки проверки: происходят до начала развертывания и вызываются синтаксическими ошибками в файле. Редактор кода, например Visual Studio Code, может определить эти ошибки.
- Ошибки проверки перед запуском происходят, когда команда развертывания выполняется, но ресурсы не развертываются. Эти ошибки обнаруживаются без запуска развертывания. Например, если значение параметра является неверным, то в ходе предварительной проверки будет обнаружена ошибка.
- Ошибки развертывания: возникают в процессе развертывания, и их можно обнаружить только путем оценки хода выполнения развертывания в среде Azure.
Ошибки всех типов возвращают код ошибки, с помощью которого можно устранить неполадки развертывания. Сведения об ошибках проверки перед запуском отображаются в журнале действий, но не отображаются в журнале развертывания.
Необходимые компоненты
Для работы с этим кратким руководством вам потребуется следующее:
- Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
- Visual Studio Code с последней версией расширения средств Resource Manager.
- Установите последнюю версию Azure PowerShell или Azure CLI.
Создание шаблона с ошибками
Скопируйте следующий шаблон и сохраните его локально. Этот файл будет использоваться для устранения ошибок проверки, ошибок предварительный проверки и ошибок развертывания. В этом кратком руководстве предполагается, что вы присвоили файлу имя 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:
указывает на ошибку. Чтобы просмотреть сведения об ошибке проверки, наведите указатель мыши на ошибку.
Вы увидите, что в variables
и resources
есть ошибки ссылки на неопределенный параметр. Чтобы отобразить ошибки проверки шаблона, выберите Вид>Проблемы.
Все ошибки вызваны неправильным написанием имен элементов.
"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 символов и только строчные буквы или цифры.
Так как развертывание не выполнялось, журнала развертывания нет.
В журнале действий указано, что произошла ошибка проверки перед запуском. Выберите журнал, чтобы просмотреть сведения об ошибке.
Исправление ошибки развертывания
Запустите развертывание с допустимым значением префикса, например storage
.
az group create --name troubleshootRG --location westus
az deployment group create \
--resource-group troubleshootRG \
--template-file troubleshoot.json \
--parameters prefixName=storage
Начнется развертывание, сведения о котором будут отображаться в журнале развертывания. Развертывание завершается сбоем, так как outputs
ссылается на виртуальную сеть, которая не существует в группе ресурсов. Но для учетной записи хранения ошибки не происходили, поэтому ресурс развернут. В журнале развертывания отображаются сведения о том, что развертывание выполнить не удалось.
Чтобы исправить ошибку развертывания, можно изменить функцию ссылки таким образом, чтобы использовался допустимый ресурс. Дополнительные сведения см. в статье Устранение ошибок, связанных с отсутствием ресурса. Для работы с этим кратким руководством удалите запятую перед 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
Чтобы удалить группу ресурсов с портала, выполните следующие действия:
- В портал Azure введите группы ресурсов в поле поиска.
- В поле Фильтровать по имени введите имя группы ресурсов.
- Выберите имя группы ресурсов.
- Выберите команду Удалить группу ресурсов.
- Чтобы подтвердить удаление, введите имя ресурса и выберите Удалить.
Следующие шаги
Из этого краткого руководства вы узнали, как устранять ошибки, связанные с развертыванием шаблона ARM.