Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Инфраструктура как код (IaC) — это ключевая практика DevOps, которая включает управление инфраструктурой, например сетями, вычислительными службами, базами данных, хранилищами и топологией подключений в описательной модели. IaC позволяет командам разрабатывать и выпускать изменения быстрее и с большей уверенностью. Преимущества IaC включают:
- Повышение доверия к развертываниям
- Возможность управления несколькими средами
- Улучшено понимание состояния инфраструктуры
Дополнительные сведения о преимуществах использования инфраструктуры в качестве кода см. в разделе " Повторяемая инфраструктура".
Инструментальная оснастка
Существует два подхода, которые можно принять при реализации инфраструктуры в качестве кода.
- Императивная инфраструктура как код включает написание скриптов на таких языках, как Bash или PowerShell. Вы явно указываете команды, которые выполняются для получения желаемого результата. При использовании императивных развертываний можно управлять последовательностью зависимостей, управления ошибками и обновлениями ресурсов.
- Декларативная инфраструктура как код включает в себя написание определения, определяющее, как вы хотите, чтобы ваша среда выглядела. В этом определении необходимо указать нужный результат, а не способ его выполнения. Инструмент определяет, как добиться результата, проверяя ваше текущее состояние, сравнивая его с целевым состоянием, и затем применяя изменения.
Шаблоны ARM
Просмотрите сведения о шаблонах Azure Resource Manager (шаблоны ARM).
Бицепс
Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. В файлах Bicep вы определяете инфраструктуру, которую планируется развернуть, и ее свойства. По сравнению с шаблонами ARM, файлы Bicep проще читать и писать для аудитории, не являющейся разработчиками, поскольку они используют лаконичный синтаксис.
В этом примере кода Bicep развертывается учетная запись хранения Azure в регионе группы ресурсов. Она использует избыточность Standard_LRS и тип StorageV2. Уровень доступа имеет значение "Горячий" для частого доступа к данным.
param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
Терраформирование
Просмотрите сведения об Terraform.
Azure CLI (Интерфейс командной строки для Azure)
Просмотрите сведения о Azure CLI.
Инфраструктура как модули кода
Одна из целей использования кода для развертывания инфраструктуры заключается в том, чтобы избежать дублирования работы или создания нескольких шаблонов для одинаковых или аналогичных целей. Модули инфраструктуры должны быть многократно используемыми и гибкими и должны иметь четкое назначение.
Модули представляют собой независимые файлы, обычно содержащие набор ресурсов, предназначенных для развертывания вместе. Модули позволяют разбить сложные шаблоны на более мелкие, более управляемые наборы кода. Вы можете убедиться, что каждый модуль фокусируется на определенной задаче и что все модули можно повторно использовать для нескольких развертываний и рабочих нагрузок.
Модули «Bicep»
Bicep позволяет создавать и вызывать модули. После того как модули созданы, они могут быть использованы в любом другом шаблоне Bicep. Модуль Bicep высокого качества должен определять несколько связанных ресурсов. Например, при определении функции Azure обычно развертывается конкретное приложение, план размещения для этого приложения и учетная запись хранения для метаданных этого приложения. Эти компоненты определены отдельно, но они образуют логическую группу ресурсов, поэтому следует рассмотреть возможность их совместного определения в виде модуля.
Модули Bicep обычно используют:
- Параметры для приема значений из вызывающего модуля.
- Выходные значения для возврата результатов в вызывающий модуль.
- Ресурсы для определения одного или нескольких объектов инфраструктуры для управления модулем.
Публикация модулей Bicep
Существует несколько вариантов публикации и совместного использования модулей Bicep.
- Общедоступный реестр: Общедоступный реестр модулей размещается в реестре контейнеров Майкрософт (MCR). Его исходный код и модули, содержащиеся в нем, хранятся в GitHub.
- Частный реестр: Реестр контейнеров Azure можно использовать для публикации модулей в частном реестре. Сведения о публикации модулей в реестре в конвейере CI/CD см. в разделах Bicep и GitHub Actions или, если вы предпочитаете, Bicep и Azure Pipelines.
- Спецификация шаблона:Спецификации шаблонов можно использовать для публикации модулей Bicep. Спецификации шаблонов обычно предназначены для создания полных шаблонов, но Bicep позволяет использовать их для развертывания модулей.
- Система управления версиями: Модули можно загружать непосредственно из средств управления версиями, таких как GitHub или Azure DevOps.
Модули Terraform
Terraform позволяет создавать и вызывать модули. Каждая конфигурация Terraform имеет по крайней мере один модуль, известный как корневой модуль, состоящий из ресурсов, определенных в .tf
файлах в основном рабочем каталоге. Каждый модуль может вызывать другие модули, что позволяет включать дочерние модули в основной файл конфигурации. Модули также можно вызывать несколько раз в одной конфигурации или из разных конфигураций.
Модули описываются с использованием всех тех же понятий языка конфигурации. Они чаще всего используют:
- Входные переменные для приема значений из вызывающего модуля.
- Выходные значения для возврата результатов в вызывающий модуль.
- Ресурсы для определения одного или нескольких объектов инфраструктуры для управления модулем.
Публикация модулей Terraform
Существует несколько вариантов публикации и совместного использования модулей Terraform:
- Общедоступный реестр: HashiCorp имеет собственный реестр модулей Terraform, который позволяет пользователям создавать совместно используемые модули Terraform. В настоящее время в реестре модулей Terraform публикуются несколько модулей Azure .
- Частный реестр: Вы можете легко публиковать модули Terraform в частный репозиторий, например Terraform Cloud Private Registry или Реестр контейнеров Azure.
- Система управления версиями: Частные модули можно загружать непосредственно из таких средств управления версиями, как GitHub. Сведения о поддерживаемых источниках см. в разделе "Источники модулей Terraform".
Рекомендации по проектированию
При развертывании ресурсов целевой зоны в Azure рекомендуется использовать IaC. IaC полностью реализует оптимизацию развертывания, сокращает усилия по настройке и автоматизирует развертывание всей среды.
Определите, следует ли принимать императивный или декларативный подход IaC.
При использовании императивного подхода необходимо явно указать команды, которые необходимо выполнить для достижения нужного результата.
Если вы принимаете декларативный подход, укажите нужный результат, а не способ его выполнения.
Рассмотрим области развертывания. У вас есть хорошее представление об уровнях управления Azure и иерархии. Каждое развертывание IaC должно знать область развертывания ресурсов Azure.
Определите, следует ли использовать встроенный или сторонний инструмент IaC Azure. Учитывайте следующие факторы.
Собственные средства Azure, такие как Azure CLI, шаблоны ARM и Bicep, полностью поддерживаются корпорацией Майкрософт, что позволяет быстрее интегрировать новые функции.
Не собственные инструменты, такие как Terraform, позволяют управлять инфраструктурой в виде кода в нескольких облачных поставщиках, таких как AWS или GCP. Однако внедрение новых функций Azure в не родной среде может занять некоторое время. Если ваша организация работает с несколькими облаками или ваша организация уже использует и хорошо разбирается в Terraform, попробуйте использовать Terraform для развертывания целевых зон Azure.
Поскольку модули позволяют разбить сложные шаблоны на небольшие наборы кода, рассмотрите возможность использования модулей IaC для ресурсов, которые обычно развертываются вместе. Вы можете гарантировать, что каждый модуль сосредоточится на конкретной задаче и будет повторно использоваться для множества развертываний и рабочих нагрузок.
Рассмотрите возможность внедрения стратегии публикации для модулей IaC, выбрав между общедоступными реестрами, частными реестрами или системой управления версиями, например репозиторием Git.
Рассмотрите использование конвейера CI/CD для развертывания IaC. Пайплайн применяет повторно используемый процесс, чтобы обеспечить качество ваших развертываний и среды в Azure.
Рекомендации по проектированию
Применение подхода IaC к развертыванию, управлению, контролю и поддержке развертываний целевых зон Azure.
Используйте собственные средства Azure для IaC в следующих сценариях:
Вы хотите использовать только собственные средства Azure. У вашей организации может быть предыдущий опыт развертывания шаблонов ARM или Bicep.
Ваша организация хочет получить немедленную поддержку для всех версий служб Azure предварительной версии и общедоступной версии.
Используйте сторонние инструменты для IaC в следующих сценариях:
В настоящее время ваша организация использует Terraform для развертывания инфраструктуры в других облаках, таких как AWS или GCP.
В вашей организации не обязательно должно быть немедленное сопровождение всех предварительных и общедоступных версий служб Azure.
Используйте многократно используемые модули IaC, чтобы избежать повторяющихся работ. Вы можете совместно использовать модули в организации для развертывания нескольких проектов или рабочих нагрузок и управления менее сложным кодом.
Публикация и использование модулей IaC из общедоступных реестров в следующих сценариях:
Вы хотите использовать модули для зоны высадки Azure, уже опубликованные в общедоступных реестрах. Дополнительные сведения см. в модуле Terraform зон высадки Azure.
Вы хотите использовать модули, которые поддерживаются, обновляются и поддерживаются корпорацией Майкрософт, Terraform или другими поставщиками модулей.
- Убедитесь, что вы проверяете инструкцию поддержки от любого проверяемого поставщика модулей.
Публикация и использование модулей IaC из частных реестров или систем управления версиями в следующих сценариях:
Вы хотите создать собственные модули на основе требований организации.
Вы хотите иметь полный контроль над всеми функциями и обслуживанием, обновлением и публикацией новых версий модулей.
Используйте конвейер CI/CD для развертывания артефактов IaC и обеспечения качества развертывания и сред Azure.