Как работает Terraform
В предыдущих уроках мы рассмотрели язык HCL Terraform (язык конфигурации HashiCorp) и преимущества, предоставляемые для разработки модулей. Прежде чем приступить к написанию модулей Terraform для подготовки ресурсов, вы хотите узнать больше о том, как работает Terraform.
В этом модуле вы узнаете, как Terraform работает с поставщиками и файлами состояния.
Интерфейс командной строки Terraform
Что такое Terraform? По сути, Terraform — это инструмент CLI. Можно бесплатно использовать в рамках лицензии на использование в бизнесе (BSL) и скачать здесь. Интерфейс командной строки Terraform — это единственное средство, необходимое для развертывания с помощью Terraform.
Существует два других связанных продукта под названием Terraform Enterprise или Terraform Cloud. Эти продукты отличаются от интерфейса командной строки Terraform. Они предоставляют такие функции, как управление состоянием и частный реестр модулей для упрощения внедрения Terraform. Они внедряют интерфейс командной строки Terraform, но по-прежнему используют ту же версию Интерфейса командной строки Terraform, которую используют все остальные для развертывания ресурсов.
Поставщики Terraform
В предыдущем уроке вы узнали, что HCL — это язык, предназначенный для конкретного сценария или домена. HCL создается, чтобы упростить развертывание и настройку любого ресурса в любом облаке или службе с помощью Terraform.
Как Terraform всё же знает о специфике Azure? И как насчет Azure DevOps, GitHub и т. д. в этом вопросе. Средство CLI Terraform ничего не знает о платформе Azure или любой другой облачной платформе или сервисе, оно лишь умеет управлять состоянием и планировать развертывания. Поставщики Terraform отвечают за преодоление разрыва между интерфейсом командной строки Terraform и целевым API, в нашем случае Azure. В Terraform существует концепция плагинов, и провайдеры являются одним из типов плагинов. Поставщики загружаются в интерфейс командной строки Terraform на этапе инициализации на основе требований в коде HCL.
Корпорация Майкрософт курирует многих поставщиков в сотрудничестве с HashiCorp и сообществом. К этим поставщикам относятся:
- azurerm: этот поставщик является наиболее понятным способом развертывания ресурсов в Azure. Этот поставщик может занять время для поддержки новых функций Azure.
- azapi: этот поставщик позволяет развертывать любой ресурс Azure, включая ресурсы в предварительной версии. Это всегда актуально с последними функциями Azure.
- azuread: этот поставщик используется для управления идентификатором Microsoft Entra. Он может управлять многими функциями, включая пользователей, группы и учетные записи служб.
- azuredevops: этот поставщик используется для управления всеми аспектами Azure DevOps, включая репозитории, конвейеры и проекты.
- github: этот поставщик используется для управления всеми аспектами GitHub, включая организации, репозитории и действия.
Интерфейс командной строки Terraform взаимодействует с поставщиками через стандартный интерфейс. Этот интерфейс позволяет Terraform CLI создавать графы зависимостей и управлять состоянием без необходимости учитывать детали реализации провайдера.
Поставщики состоят из ресурсов и источников данных. Ресурсы управляются с помощью Terraform. Источники данных используются для чтения атрибутов ресурса без управления им.
Вы можете написать собственные провайдеры для работы с внутренними конечными точками API, так что вы фактически можете управлять всем с помощью Terraform. Поставщики должны быть написаны на языке программирования Go.
Рабочий процесс Terraform
При использовании интерфейса командной строки Terraform в рабочем процессе необходимо выполнить четыре основных шага.
- Запись: напишите код HCL, чтобы определить требуемое состояние.
- Инициализация: загрузка поставщиков и модулей. Подключение к удаленному состоянию системы.
- План: Создает план для приведения фактического состояния в соответствие с требуемым состоянием, запрашивая развернутые ресурсы и сравнивая с конфигурацией.
- Применить: осуществите план и приведите целевую среду в соответствие с помощью вызовов API.
Terraform LifeCycle
Terraform разработан и должен использоваться для управления жизненным циклом ресурсов. С помощью файла состояния Terraform может управлять ресурсами на следующих этапах:
- Создание: ресурс находится в требуемом состоянии, но не существует в фактическом состоянии и создается в Azure.
- Обновление. Требуемое состояние атрибутов ресурса не соответствует фактическому состоянию, а ресурс обновляется, чтобы обеспечить соответствие требуемому состоянию.
- Уничтожить: ресурс больше не существует в требуемом состоянии и удаляется из Azure.
Шаг обновления может выполняться несколько раз за время существования ресурса по мере изменения требований с течением времени. Например, предположим, что вы управляете правилами Брандмауэр Azure с помощью Terraform, возможно, потребуется обновить эти правила на регулярном интервале, чтобы добавить новые правила, настроить существующие правила и удалить правила.
Состояние Terraform
Состояние Terraform требуется для поддержки жизненного цикла Terraform. Terraform не имеет сведений о Azure или других облаках или службах, которыми он может управлять. Таким образом, он нуждается в нейтральном способе понять, чем он управляет. Файл состояния — это механизм.
Terraform сопоставляет конфигурацию HCL с идентификатором ресурса в Azure. Terraform может управлять ресурсом, так как имеет сопоставленный идентификатор. Когда ресурс удаляется из HCL, Terraform планирует уничтожить этот ресурс. Без файла состояния Terraform не будет знать об этом ресурсе.
Файлы состояния могут содержать конфиденциальные данные и должны храниться безопасно. Мы рекомендуем использовать Terraform Cloud / Enterprise или BLOB-хранилище Azure для управления файлами состояния.