Terraform базовые принципы и инструменты

Terraform – cистема оркестрации и один из ключевых инструментов DevOps, облегчающий управление инфраструктурой. Terraform помогает автоматизировать все, что можно автоматизировать. Когда работаете с облачным провайдером (например, Terraform AWS), нет необходимости прописывать вручную. Например, сети, инстансы на консоли не нужно создавать руками. С Terraform просто описываете желаемую конфигурацию будущей инфраструктуры. Конфигурация описывается в human-readable format. После редактирования нужно запустить terraform apply, и система направит провайдеру вызов через API. Инфраструктура изменяется согласно внесенным корректировкам в файле.

terraform

Почему управление инфраструктурой через текстовые файлы – это эффективно? Вы получаете своеобразный контроль над данными (Terraform data) – процессами и исходным кодом. Сначала вносите корректировки, и далее меняется инфраструктура. Так инфраструктура будет подчинена системе контроля версий, а в случае бага всегда можно откатиться назад. Есть возможность сделать Terraform import, т.е. импортировать уже существующую инфраструктуру с ресурсами. Данные, хранящиеся в бэкэнде, представляют собой Terraform workspaces. 

Терраформ можно использовать в связке с Kubernetes. Провайдер Terraform Kubernetes будет работать с ресурсами, которые поддерживает K8. Также для построения эффективных и гибких пайплайнов можно использовать рабочую пару Terraform Ansible. 

Terraform AWS

Провайдер Terraform AWS − плагин, который позволяет управлять полным жизненным циклом ресурсов AWS через Terraform. AWS поддерживается внутри группы HashiCorp AWS Provider. Плагин позволяет создавать и апдейтить версии инфраструктуры, созданной на платформе Amazon Web Services.

Какие преимущества Terraform Provider Modules будут здесь ключевыми?

  • Синтаксис, который легко настраивается
  • Предугадывание (видимость) изменений
  • Построение графиков (визуализация инфраструктуры)
  • Независимость и изолированность ресурсов
  • Открытый исходный код и поддержка сообществом
  • Возможность дробить конфигурацию на мелкие блоки.

Используя модули, вы повышаете гибкость и надежность внесения изменений в инфраструктуру. Как известно, у HashiCorp есть реестр Terraform Provider Registry, где представлены модули проверенных партнеров.

Terraform Provider

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

В этой схеме за взаимодействие API и передачу ресурсов отвечает Terraform Provider. Большинство из них настраивают отдельную платформу для инфраструктуры − как облачную, так и локальную. Также провайдер предоставляет утилиты для разных задач, например, генератор случайных чисел для названий ресурсов. К примеру, провайдер Google используется для конфигурации Terraform GCP (Google Cloud Platform). 

terraform aws


Terraform GitHub

Провайдер Terraform GitHub выстраивает взаимодействие между ресурсами инфраструктуры и GitHub. С помощью Terraform GitHub вся команда может легко настраивать учетные данные и взаимодействовать. Легко управлять всеми проектами и ресурсами в Terraform.

terraform modules

Terraform Registry

Terraform Registry − это системный сервис, в котором можно использовать разные Terraform Registry Modules, разделенные по логическим группам. К примеру, модули провайдера AWS − VPC, security group, ECS. Terraform modules делятся на официальные и неофициальные. Мы, конечно, призываем пользоваться официальными, но не отрицаем использование тех, что поддерживаются сообществом.


Terraform Azure

В качестве примера приведем сервис Terraform Azure (Terraform Сloud Shell). Если пользуетесь Azure Cloud Shell, делать Terraform download нет необходимости. В данном случае Terraform workspaces синхронизируются с пользовательской подпиской Azure. Terraform modules можно тестировать через Azure Terraform. Предусмотрена визуализация, team-support и прямая связь с сервисами Azure. HashiCorp и Microsoft вместе с сообществом Terraform постоянно работают над модулями. Подключившись к Terraform Github, можно добавлять функции, участвовать в разработке, выпускать отчеты об ошибках.

Variables и команды Terraform

Переменные (variables) помогают определить и управлять повторно используемыми значениями. Информация о Terraform Variables хранится независимо от планов деплоймента. Это позволяет просматривать и редактировать значения в одном файле. Форматы Terraform Variables делятся на Input и Output. Input Variables применяют, чтобы определять значения, которые настраивают инфраструктуру. Их можно использовать повторно. Terraform Output Variables нужны, чтобы получить данные об инфраструктуре после деплоймента.

Параметр Terraform locals присваивает название выражению в рамках конфигурации. Его можно использовать в модуле, не повторяя, несколько раз. Это полезно для сравнения модулей со значениями функций:

  • Input Variables можно сравнить с function arguments
  • Output Variables аналогичны function return values

Если значение Terraform locals в контексте понятно, часто используется сокращенный термин locals. 

Упрощать конфигурации и масштабировать ресурсы поможет параметр Terraform count. Также для расширения списка ресурсов могут использоваться и variables. Terraform template просматривает файл по заданному пути, отображая содержимое в виде шаблона. Шаблон в этом случае представлен как набор переменных. Terraform init применяется для инициализации рабочей директории с файлами конфигурации.

terraform variables

Верно, Terraform – это инструмент оркестрации от HashiCorp. Оркестрация применяется для автоматизации планирования, масштабирования и балансировки контейнеров. Также Terraform помогает в развертывании и организации сетей. Можно сказать, что этот инструмент оркестрации помогает автоматизировать и управлять облачной инфраструктурой контейнеров. Terraform написан на языке HCL, типичном для продуктов HashiCorp. Основной принцип работы с Terraform заключается в описании инфраструктуры как кода, в нужном формате. Далее система считывает этот алгоритм и работает по описанной процедуре.

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

Terraform и CloudFormation – два удобных инструмента Infrastructure as a Code. У каждого свои преимущества и недостатки. И зависят они от того, где и как применяется конкретный инструмент. Например, CloudFormation имеет проблему с переходом из одного состояния в другое. Terraform, наоборот, легко восстанавливается после неудачных отладок. Также легко и более прозрачно работает с балансировщиком нагрузки. С Terraform легко разбить сеть на составные части. Поэтому если говорить об использовании системы в больших организациях, Terraform – более удачный выбор.

Не будем утверждать, что Terraform плох, а вкратце опишем некоторые его подводные камни. Часто они связаны с выражениями типа if, методиками деплоймента, циклами. В Terraform есть ограничения в отношении параметров count, а также for_each. Ограничен деплоймент с нулевым простоем по времени. При деплойменте и команде plan система может выдать ошибку на этапе apply. Вопрос может быть в имене пользователя IAM. При рефакторинге кода могут возникнуть проблемы с переименованием переменных функций. В Terraform нужно быть осторожным с этой тривиальной процедурой.

Ansible не совсем заменяет Terraform, хотя эту систему и можно использовать для развертывания определенной инфраструктуры. Например, для инфраструктуры с модулями AWS, Azure или VMware. Ansible хорошо работает с конфигурацией, а Terraform – с инфраструктурой как кодом. Как разработчики применяют эти две системы на практике? Обычно делают развертывание инфраструктуры через Terraform, а после этого настраивают ее в Ansible. Такой подход более автоматизированный и ускоряет время работы с инфраструктурой.

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

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

Основная разница между Terraform и CloudFormation в возможности работы с разными сервисами. CloudFormation – утилита Amazon, и работает она с функциями и сервисами AWS (Amazon Web Services). Terraform же поддерживает работу не только с продуктами AWS, но и других облачных провайдеров. Оба инструмента ценны в создании и реализации вашей облачной инфраструктуры. Именно различие в области применения поможет понять, какой инструмент подходит вам больше.

error: Контент защищен.