Устранение ошибок, связанных с недопустимым шаблоном
Мақала
В этой статье объясняется, как устранять ошибки, связанные с недопустимым шаблоном для файлов Bicep и шаблонов Azure Resource Manager (шаблоны ARM). Ошибка происходит по нескольким причинам, например из-за ошибки в синтаксисе, недопустимого значения параметра или циклической зависимости.
Симптом
При развертывании шаблона появляется ошибка с таким текстом:
Output
Code=InvalidTemplate
Message=<varies>
Сообщение об ошибке зависит от типа ошибки.
Причина
Эта ошибка может появиться в результате ошибок нескольких различных типов. Как правило, это синтаксические или структурные ошибки в шаблоне.
Решение 1. Синтаксическая ошибка
Если появляется сообщение об ошибке, указывающее, что шаблону не удалось пройти аутентификацию, возможно, в нем есть синтаксическая ошибка.
Ошибки синтаксиса могут возникать из-за того, что выражения шаблонов содержат много элементов. Например, назначение имени для учетной записи хранения включает пары двойных или одинарных кавычек, фигурных скобок, квадратных скобок и круглых скобок. Выражения также содержат функции и символы, такие как знаки доллара, запятые и точки.
Вы можете задать допустимые значения параметров в шаблоне. Если при развертывании указать недопустимое значение, то появится сообщение об ошибке, аналогичное приведенному ниже.
Output
Code=InvalidTemplate;
Message=Deployment template validation failed: 'The provided value {parameter value}
for the template parameter {parameter name} is not valid. The parameter value is not
part of the allowed values
Проверьте допустимые значения параметра в шаблоне и используйте допустимое значение при развертывании. Дополнительные сведения см. в разделах с описанием допустимых значений для Bicep или шаблонов ARM.
Решение 4. Слишком много целевых групп ресурсов
Эта ошибка могла возникать у вас в предыдущих развертываниях, так как для одного развертывания существовало ограничение в пять целевых групп ресурсов. В мае 2020 г. это ограничение было увеличено до 800 групп ресурсов. Дополнительные сведения см. в разделах о развертывании в нескольких группах ресурсов для Bicep или шаблонов ARM.
Решение 5. Обнаружена циклическая зависимость
Эта ошибка возникает, когда ресурсы зависят друг от друга таким образом, что это не позволяет начать развертывание. Сочетание взаимозависимостей заставляет два или более ресурсов ждать других ресурсов, которые также ожидают. Например, resource1 зависит от resource3, resource2 зависит от resource1, а resource3 зависит от resource2. Как правило, эту проблему можно устранить, удалив ненужные зависимости.
Bicep создает неявную зависимость, когда один ресурс использует символическое имя другого ресурса. Использование явных зависимостей с помощью dependsOn обычно не требуется. Дополнительные сведения см. в разделе Зависимости для Bicep.
Устранить циклическую зависимость можно следующим образом.
Найдите в шаблоне ресурс, указанный в циклической зависимости.
Для этого ресурса изучите dependsOn свойство и все способы использования reference функций или resourceId , чтобы узнать, от каких ресурсов он зависит.
Изучите эти ресурсы, чтобы узнать, от каких ресурсов зависят они. Отслеживайте зависимости, пока не найдете ресурс, который зависит от первоначального ресурса.
Для ресурсов, участвующих в циклической зависимости, тщательно изучите все случаи использования свойства dependsOn, чтобы выявить все лишние зависимости. Чтобы устранить неполадки при развертывании, удалите циклические зависимости. Вместо удаления кода можно использовать комментарии, чтобы код не выполнялся во время следующего развертывания. Вы можете использовать однострочные комментарии (//) или многострочные комментарии (/* ... */) в шаблонах ARM или файлах Bicep .
Повторно разверните шаблон.
Удаление значений из свойства dependsOn может привести к ошибкам при развертывании шаблона. Если возникла ошибка, верните удаленную зависимость в шаблон. Если вы использовали комментарии для обхода кода в шаблоне, вы можете удалить комментарии, чтобы восстановить код.
Если этот подход не помог устранить циклическую зависимость, рекомендуется переместить часть логики развертывания в дочерние ресурсы (например, расширения или параметры конфигурации). Настройте эти дочерние ресурсы для развертывания после ресурсов, участвующих в циклической зависимости. Предположим, что вы развертываете две виртуальные машины, но на каждой из них необходимо задать свойства, которые ссылаются на другую виртуальную машину. Их можно развернуть в следующем порядке.
vm1.
vm2.
Расширение на vm1 зависит от vm1 и vm2. Расширение задает на vm1 значения, получаемые от vm2.
Расширение на vm2 зависит от vm1 и vm2. Расширение задает на vm2 значения, получаемые от vm1.
Этот подход пригоден и для приложений службы приложений. Рекомендуется переместить значения конфигурации в дочерний ресурс ресурса приложения. Два веб-приложения можно развернуть в следующем порядке.
webapp1.
webapp2.
Конфигурация webapp1 зависит от webapp1 и webapp2. Она содержит параметры приложения со значениями из webapp2.
Конфигурация webapp2 зависит от webapp1 и webapp2. Она содержит параметры приложения со значениями из webapp1.
Решение 6. Проверка синтаксиса для экспортированных шаблонов
После развертывания ресурсов в Azure можно экспортировать шаблон ARM JSON и изменить его для других развертываний. Прежде чем использовать его для развертывания ресурсов, необходимо проверить экспортируемый шаблон на правильный синтаксис.
Вы можете экспортировать шаблон из портала, Azure CLI или Azure PowerShell. Существуют рекомендации по экспорту шаблона из ресурса или группы ресурсов или из журнала развертывания.
Используйте набор средств для тестирования шаблонов ARM, чтобы обеспечить соответствие шаблонов Azure Resource Manager рекомендациям перед развертыванием.
Создавайте комплексные решения в Microsoft Azure для создания Функции Azure, реализации веб-приложений и управления ими, разработке решений, использующих службу хранилища Azure, и т. д.
Статья описывает, как развертывать ресурсы в шаблоне Azure Resource Manager. В ней показано, как настроить таргетинг на более чем одну группу ресурсов.