Поделиться через


Устранение ошибок для недопустимого шаблона

В этой статье описывается, как устранить недопустимые ошибки шаблона для файлов Bicep и шаблонов Azure Resource Manager (шаблоны ARM). Ошибка возникает по нескольким причинам, например синтаксическая ошибка, недопустимое значение параметра или циклическая зависимость.

Симптом

При развертывании шаблона возникает ошибка, указывающая:

Code=InvalidTemplate
Message=<varies>

Сообщение об ошибке зависит от типа ошибки.

Причина

Эта ошибка может возникать из нескольких различных типов ошибок. Обычно они включают синтаксис или структурную ошибку в шаблоне.

Решение 1. Синтаксическая ошибка

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

Code=InvalidTemplate
Message=Deployment template validation failed

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

name: 'storage${uniqueString(resourceGroup().id)}'

При получении этого типа ошибки просмотрите синтаксис выражения. Чтобы определить ошибки шаблона, можно использовать Visual Studio Code с последним расширением Bicep или расширением средств Azure Resource Manager.

Решение 2. Неправильные длины сегментов

Другая недопустимая ошибка шаблона возникает, если имя ресурса не имеет правильного формата. Чтобы устранить эту ошибку, см. раздел "Устранение ошибок" для несоответствия имен и типов.

Решение 3. Недопустимый параметр

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

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".

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

  1. В шаблоне найдите ресурс, определенный в циклической зависимости.
  2. Для этого ресурса изучите dependsOn свойство и все виды использования reference или resourceId функции, чтобы узнать, какие ресурсы зависят от них.
  3. Проверьте эти ресурсы, чтобы узнать, от каких ресурсов они зависят. Следуйте зависимостям, пока не заметите ресурс, который зависит от исходного ресурса.
  4. Для ресурсов, участвующих в циклической зависимости, тщательно изучите все используемые dependsOn свойства для выявления зависимостей, которые не нужны. Чтобы устранить неполадки развертывания, удалите циклические зависимости. Вместо удаления кода можно использовать примечания, чтобы код не выполнялся во время следующего развертывания. Можно использовать однострочные комментарии () или многострочные комментарии (///* ... */) в шаблонах ARM или файлах Bicep.
  5. Повторно разверните шаблон.

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

Если этот подход не решает циклическую зависимость, рассмотрите возможность перемещения части логики развертывания в дочерние ресурсы (например, расширения или параметры конфигурации). Настройте дочерние ресурсы так, чтобы они развертывались после ресурсов, связанных с циклической зависимостью. Предположим, что вы развертываете две виртуальные машины, но на каждой из них необходимо задать свойства, которые ссылаются на другую виртуальную машину. Их можно развернуть в следующем порядке.

  1. ВМ1
  2. ВМ2
  3. Расширение для vm1 зависит от vm1 и vm2. Расширение задает на vm1 значения, получаемые от vm2.
  4. Расширение на vm2 зависит от vm1 и vm2. Расширение задает на vm2 значения, получаемые от vm1.

Тот же подход подходит для приложений Службы приложений. Рассмотрите возможность перемещения значений конфигурации в дочерний ресурс ресурса приложения. Вы можете развернуть два веб-приложения в следующем порядке:

  1. веб-приложение1
  2. веб-приложение2
  3. Конфигурация для webapp1 зависит от webapp1 и webapp2. Он содержит параметры приложения со значениями из webapp2.
  4. Конфигурация для webapp2 зависит от webapp1 и webapp2. Он содержит параметры приложения со значениями из webapp1.

Решение 6. Проверка синтаксиса экспортированных шаблонов

После развертывания ресурсов в Azure можно экспортировать JSON-файл шаблона ARM и изменить его для других развертываний. Перед развертыванием ресурсов необходимо проверить экспортируемый шаблон для правильного синтаксиса .

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

После экспорта шаблона ARM можно декомпилировать шаблон JSON в Bicep. Затем воспользуйтесь передовыми методами и линтером для валидизации вашего кода.

Дополнительные сведения см. в следующих статьях: