0Pricing
Cloud & IT Cert Prep · Урок

Bicep: современная IaC для Azure

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

«Bicep: современная IaC для Azure» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Что такое Bicep и зачем его использовать

Bicep — это предметно-ориентированный язык (DSL), разработанный Microsoft как строго типизированная и лаконичная альтернатива ARM-шаблонам JSON. Bicep компилируется в стандартный ARM JSON, поэтому использует тот же механизм развертывания ARM и с первого дня поддерживает все типы ресурсов Azure. Bicep устраняет большую часть шаблонного кода необработанного JSON, обеспечивая более строгую проверку типов и поддержку IntelliSense.

Сравнение синтаксиса Bicep и ARM JSON

Для той же учётной записи хранения, которой в ARM-шаблоне требуется около 25 строк JSON, в Bicep нужно всего около 8 строк. Bicep устраняет '$schema', contentVersion, оболочку массива resources и многословный синтаксис выражений. Имена и типы свойств остаются идентичными, поскольку Bicep является прямым уровнем абстракции над ARM JSON. Во время выполнения различий нет.

// Bicep: deploy a storage account
param storageAccountName string
param location string = resourceGroup().location
param sku string = 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
    minimumTlsVersion: 'TLS1_2'
  }
}

Параметры и декораторы в Bicep

В Bicep параметры задаются с помощью лаконичного синтаксиса param name type = defaultValue. Непосредственно перед параметром можно указать декораторы (с префиксом @), чтобы добавить ограничения, такие как @minLength(), @maxLength(), @allowed() и @description(). Декоратор @secure() помечает параметр как конфиденциальный и является эквивалентом secureString в ARM JSON.

@description('Globally unique name for the storage account')
@minLength(3)
@maxLength(24)
param storageAccountName string

@allowed(['Standard_LRS', 'Standard_GRS', 'Premium_LRS'])
param sku string = 'Standard_LRS'

@secure()
param adminPassword string

Переменные и выражения в Bicep

Переменные Bicep объявляются с помощью ключевого слова var и могут содержать любое выражение, включая интерполяцию строк с использованием синтаксиса '${value}'. Интерполяция строк — одно из наиболее удобных для чтения улучшений по сравнению с ARM JSON: больше не нужны вызовы функции concat(). Bicep также поддерживает условные выражения с использованием тернарного оператора condition ? trueValue : falseValue.

param environment string = 'dev'
param baseName string = 'myapp'

var uniqueSuffix = uniqueString(resourceGroup().id)
var storageAccountName = '${baseName}${environment}${uniqueSuffix}'
var isProd = environment == 'prod'
var skuName = isProd ? 'Standard_GRS' : 'Standard_LRS'

Объявления ресурсов и символьные имена

В Bicep каждому ресурсу присваивается символьное имя — идентификатор, используемый для обращения к ресурсу внутри шаблона. Символьное имя не совпадает с именем ресурса в Azure. Используйте символьные имена для доступа к свойствам ресурсов и создания неявных зависимостей, ссылаясь на один ресурс внутри другого. Это устраняет необходимость в явном массиве dependsOn.

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
  name: 'myVNet'
  location: location
  properties: {
    addressSpace: { addressPrefixes: ['10.0.0.0/16'] }
  }
}

// Implicit dependency via symbolic name reference
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
  parent: vnet  // Bicep knows to create vnet first
  name: 'mySubnet'
  properties: {
    addressPrefix: '10.0.1.0/24'
  }
}

Выходные значения в Bicep

Выходные значения Bicep объявляются с помощью ключевого слова output, за которым указываются имя, тип и значение выходного параметра. Вы можете обращаться к свойствам развернутого ресурса по его символическому имени и через точечную нотацию, что гораздо понятнее, чем функция ARM reference(). Выходные значения необходимы для передачи значений между вызовами модулей Bicep.

output storageAccountName string = storageAccount.name
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
output storageAccountId string = storageAccount.id

Модули Bicep

Модули Bicep являются аналогом связанных шаблонов в ARM JSON и позволяют разбивать инфраструктуру на повторно используемые компоненты. Модуль — это просто другой файл .bicep. Вы ссылаетесь на него с помощью ключевого слова module, передаете параметры и используете его выходные значения. Модули также можно публиковать в реестре контейнеров Azure и использовать из него для повторного использования всей командой.

// main.bicep — consuming a storage module
module storage './modules/storage.bicep' = {
  name: 'storageDeploy'
  params: {
    storageAccountName: 'myuniquestorage'
    location: location
    sku: 'Standard_LRS'
  }
}

// Reference module output in parent template
output blobUri string = storage.outputs.blobEndpoint

Преобразование шаблонов ARM в Bicep

Если у Вас уже есть шаблоны ARM JSON, CLI Bicep может декомпилировать их в Bicep с помощью bicep decompile. Результат может потребовать некоторой ручной очистки, но он станет отличной отправной точкой. Microsoft также предоставляет онлайн-песочницу по адресу aka.ms/bicepdemo, куда можно вставить ARM JSON и в реальном времени увидеть эквивалентный код Bicep.

# Install the Bicep CLI (or use it via Azure CLI)
az bicep install
az bicep upgrade

# Decompile existing ARM JSON to Bicep
az bicep decompile --file azuredeploy.json
# Produces azuredeploy.bicep in the same directory

# Compile Bicep to ARM JSON (for inspection)
az bicep build --file main.bicep

Развертывание Bicep с помощью Azure CLI

Azure CLI напрямую поддерживает файлы Bicep — перед развертыванием не требуется вручную компилировать их в ARM JSON. Передайте путь к файлу .bicep команде az deployment group create с флагом --template-file, и CLI прозрачно выполнит компиляцию. Те же подкоманды validate и what-if работают с файлами Bicep точно так же, как с ARM JSON.

# Deploy a Bicep file directly
az deployment group create \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

# What-if preview with Bicep
az deployment group what-if \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

Циклы и условия в Bicep

Bicep поддерживает циклы ресурсов с использованием синтаксиса for ... in, чтобы создавать несколько экземпляров ресурса из параметра-массива и устранять дублирование при копировании и вставке. Ключевое слово if включает условное развертывание ресурсов — ресурс включается только тогда, когда определенное условие истинно. Обе возможности компилируются соответственно в конструкции ARM copy и condition.

// Loop: create multiple storage accounts
param storageNames array = ['alpha', 'beta', 'gamma']

resource stores 'Microsoft.Storage/storageAccounts@2023-01-01' = [for name in storageNames: {
  name: '${name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
}]

// Condition: only deploy in prod
param deployKeyVault bool = false

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = if (deployKeyVault) {
  name: 'myKeyVault'
  location: location
  properties: { sku: { family: 'A', name: 'standard' }, tenantId: subscription().tenantId, accessPolicies: [] }
}

Инструменты Bicep и статический анализ

Расширение Bicep для Visual Studio Code предоставляет расширенные возможности IntelliSense, проверку типов и выделение ошибок непосредственно при вводе. CLI Bicep включает анализатор, который проверяет нарушения рекомендаций, например неиспользуемые параметры, отсутствующие описания и неправильные версии API. Запускайте az bicep lint --file main.bicep в конвейере непрерывной интеграции, чтобы выявлять проблемы до развертывания.

# Run the Bicep linter
az bicep lint --file main.bicep

# Format a Bicep file
az bicep format --file main.bicep

# Generate resource type documentation
az bicep generate-params --file main.bicep --output-format json

Быстрая проверка

Проверьте, насколько Вы поняли концепции Microsoft Azure Fundamentals (AZ-900) из этого урока.

Итоги урока

В этом уроке Вы узнали, что Bicep — это лаконичная строго типизированная абстракция над ARM JSON, которая компилируется в стандартные шаблоны ARM; модули и циклы позволяют создавать повторно используемый и соответствующий принципу DRY код инфраструктуры; а Azure CLI напрямую развертывает файлы Bicep, поддерживая тот же рабочий процесс validate/what-if/deploy. Далее мы рассмотрим Terraform в Azure.

Часто задаваемые вопросы

Урок «Bicep: современная IaC для Azure» бесплатный?

Да — полный текст урока «Bicep: современная IaC для Azure» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Bicep: современная IaC для Azure»?

Изучите лаконичный синтаксис Bicep — строго типизированной абстракции над JSON ARM, преобразуйте существующий шаблон ARM в Bicep и разверните его с помощью Azure CLI. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Bicep: современная IaC для Azure»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Как работает Azure Resource Manager
  2. Создание шаблонов ARM
  3. Bicep: современная IaC для Azure
  4. Terraform в Azure
← Назад к Cloud & IT Cert Prep