И снова здравствуйте. Извините, я отсутствовал последние две недели или около того, но работа была занята, я думал, что у меня COVID-19 (тест отрицательный!), И дети снова в школе (частично). 2020 год продолжается ...

Как и было обещано, давайте подробнее рассмотрим Bicep, чтобы мы могли начать правильно оценивать его полезность по сравнению с текущими шаблонами ARM JSON.

Для начала, вот краткое описание текущей новой структуры, предоставленной нам командой Bicep.

Декларация состоит из четырех компонентов:

  1. ресурс - это ключевое слово, которое объявляет, что мы создаем определенный ресурс в Azure, будь то учетная запись хранения или база данных SQL MI. Опять же, похоже на Terraform
  2. символическое имя - это просто идентификатор каждого ресурса, который вы развертываете, и его не следует путать с самим ресурсом. Например, мы можем использовать следующую конструкцию для демонстрации:

В этом примере я создал простую виртуальную сеть, и вы можете видеть, что я создал ресурс с именем vnet1 типа Microsoft.Network/virtualNetworks с версией API «2020–05–01». На vnet1 теперь можно ссылаться позже при необходимости, используя его свойства, такие как Id.

3. тип - тип также показан в этом примере. Тип - это фактически три компонента в одном: поставщик ресурсов (Microsoft.Network), тип ресурса (virtualNetworks) и, конечно же, версия API (2020–05–01).

4. свойства - это те же самые свойства для каждого ресурса, которые вы видите в текущих шаблонах ARM.

Когда этот файл Bicep компилируется с помощью команды

bicep build am.bicep

мы видим, как он создает правильный файл JSON:

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

Параметры объявляются с помощью следующей конструкции:

параметр I тип средства для чистки

Некоторые примеры могут включать следующее:

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

На параметры можно ссылаться в файле Bicep по их идентификатору вместо использования конструкции [parameters (‘parameterName’)], как в шаблонах ARM. Это преимущество в будущем. Хотя это может показаться незначительным отличием, это помогает сократить количество строк в вашем коде, и это может быть важно в средах, где развернуто большое количество ресурсов.

Затем мы переходим к переменным. Переменные объявляются с помощью следующей конструкции:

var Идентификатор =

мы даем переменной имя (например, vnetName) и присваиваем ей значение после знака =. Мы можем ссылаться на параметры с помощью конструкции $ {}. Мы также можем использовать любую допустимую функцию-шаблон ARM для создания более сложных выражений. Например, если мы объявляем следующий параметр и ссылаемся на него в переменной, он имитирует функцию format ().

Выходы также легко создавать в Bicep, поскольку мы можем напрямую ссылаться на свойства идентификатора. Из документации Bicep мы можем пока сослаться на эти четыре свойства: id, name, apiVersion, type.

Если мы, например, развернем общедоступный IP-адрес, мы увидим, насколько легко сгенерировать некоторые выходные данные. В этом случае я ссылаюсь на идентификатор переменной.

Результирующий вывод JSON выглядит так:

Наконец, при компиляции Bicep автоматически добавит свойство dependsOn. Это замечательно, так как означает, что нам больше не нужно добавлять их в наши шаблоны ARM вручную или выяснять их методом проб и ошибок. Давайте посмотрим на пример использования DNS-зон.

Здесь я добавил основную информацию для создания зоны DNS и записи A:

При компиляции Bicep вычисляет для нас свойство dependsOn:

Итак, в целом, мы видим несколько хороших синтаксических функций в Bicep. Я думаю, что в будущих релизах есть чего ожидать.

До следующего раза, пожалуйста, оставайтесь в безопасности и желаю удачной недели!