Как автоматизировать инфраструктуру с помощью Terraform и Ansible

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

428 открытий4К показов
Как автоматизировать инфраструктуру с помощью Terraform и Ansible

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

Зачем вообще компаниям нужна автоматизация? Инфраструктурой можно управлять вручную, однако в этом случае каждый раз понадобится привлекать специалистов по настройке и развертыванию программных продуктов. А это повышает издержки и риски безопасности. Даже если сервер всего один, автоматизация более надежна, чем ручное управление. Кроме того, это именно то направление, куда движется рынок цифровой инфраструктуры в целом.

Концепция «Инфраструктура как код» (Infrastructure as Code, IaC) наглядно воплощена в таком инструменте, как Terraform, который позволяет настраивать ресурсы, реализовывать масштабируемость и удобное управление цифровыми активами компании. При этом изменения в инфраструктуре легко отслеживаются и при необходимости тиражируются.

Еще один инструмент предназначен для автоматизации и настройки серверов и ПО — это Ansible. Система управления конфигурациями реализована на языке Python, осуществляет доставку, развертывание и обслуживание продуктов на серверах.

В обзоре подробно рассмотрим оба инструмента автоматизации инфраструктуры, оценим их преимущества и узнаем, как они работают.

Что такое Terraform и как он работает

Terraform — программная платформа с открытым исходным кодом, предназначенная для управления внешними ресурсами. Инструмент разработан программистами компании HashiCorp для реализации концепции IaC. Здесь используется декларативный стиль управления внешней инфраструктурой. На практике это означает, что разработчик описывает желаемое состояние инфраструктуры, а Terraform реализует конфигурационный файл в форме кода.

Использование разработчиками высокоуровневого языка HashiCorp Configuration Language для описания требуемого состояния облачной либо локальной инфраструктуры существенно упрощает управление инфраструктурой.

Чтобы понять преимущества Terraform, нужно более глубоко разобраться в концепции Инфраструктуры как кода. Она позволяет разработчикам организовать инфраструктуру таким образом, чтобы инициализация происходила в автоматическом и непрерывном режиме.

У IaC есть следующие преимущества:

  • Высокая скорость. Автоматизация происходит быстрее, чем ручное управление по интерфейсу в случае, когда требуется развернуть либо подключить ресурсы. 
  • Надежность. Чем обширнее инфраструктура, тем выше вероятность ошибок — то есть неправильной настройки ресурсов или подготовки служб в некорректном порядке. Применение IaC исключает неправильную подготовку и настройку — все происходит именно так, как заявлено.
  • Мультиоблачная поддержка. IaC поддерживает эксперименты по управлению, тестирование и оптимизацию. Простая и быстрая подготовка новой инфраструктуры позволяет вносить изменения и проверять их эффективность, не тратя на этого мно ресурсов и времени. Если результат удовлетворительный, новую инфраструктуру легко масштабировать для продакшена. 

Инструмент наглядной реализации концепции IaC Terraform для декларативного управления инфраструктурой реализует все преимущества IaC. Разработчикам не придется вручную создавать сети и прочие компоненты в консоли — достаточно создать конфигурацию, где будет описано, какой они видят будущую инфраструктуру.

Это делается в текстовом формате естественным, то есть человеко-читаемым языком. Перенос управления инфраструктурой в текст — это возможность управлять исходным кодом, редактировать его, откатывать и вносить структурные изменения.

Почему разработчики выбирают именно Терраформ:

  • Открытый код. Инструмент поддерживает обширное сообщество пользователей, которые постоянно создают новые плагины для этой платформы. Независимо от используемого облачного провайдера разработчики без труда найдут нужные расширения и экспертную поддержку. 
  • Развитие. Terraform быстро развивается, совершенствуется и улучшается. Это перспективная система, значительно упрощающая процесс управления инфраструктурой. 
  • Универсальность. Терраформ можно использовать в работе с любыми поставщиками облачных услуг. Аналоги предназначены преимущественно для работы с конкретными провайдерами.
  • Контроль. При изменении среды инфраструктура, управляемая Terraform, заменяется новой версией, при этом старые сохраняются, чтобы в случае необходимости сделать откаты.

Модули Terraform — это компактные и наиболее востребованные конфигурации для инфраструктурных ресурсов. С помощью модулей легко автоматизировать сложные и разветвленные системы. Более того, конфигурации могут пользоваться дочерними модулями, что ускоряет разработку и делает ее более безопасной.

Провайдеры Терраформ — это плагины для реализации различных видов ресурсов. Поставщики предоставляют весь необходимый код для подключения к нужным службам от имени пользователя.

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

В качестве практического примера приведем алгоритм работы с облаком:

  1. Подготовка облака к работе. На облачной платформе (например, Yandex Cloud) нужно подключить платежный аккаунт, чтобы оплачивать работу виртуальных машин и динамические IP-адреса.
  2. Установка Terraform. Это можно сделать с официального сайта HashiCorp, выбрав версию для используемой операционной системы. Инструмент управляется с помощью пакетного менеджера. 
  3. Получение данных для аутентификации. Для управления структурой Yandex Cloud через Терраформ используется сервисный аккаунт, что обеспечивает гибкую настройку доступа к ресурсам. 
  4. Создание файла конфигурации Terraform. Создаются директории, в которых будут содержаться файлы конфигурации и все сохраненные состояния инфраструктуры. 
  5. Настройка провайдера. Эксперты советуют использовать наиболее позднюю версию Терраформ. Если возникнут проблемы с установкой и настройкой провайдера, можно обратиться в поддержку. 
  6. Подготовка плана инфраструктуры. Terraform позволяет создавать облачные ресурсы всех видов. Для этого необходимо описать набор параметров, которые определяют свойства ресурса, то есть план инфраструктуры.
  7. Проверка и форматирование файлов конфигураций. Это делается, чтобы исключить ошибки в описании инфраструктуры. 
  8. Создание ресурсов. Заключительный этап процесса — его результатом становится список ресурсов с их текущими параметрами. 

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

Что такое Ansible и какие у него особенности

Ansible, как и Терраформ, — это инструмент автоматизации инфраструктуры с открытым исходным кодом. Он позволяет управлять конфигурацией, развертывать инфраструктуру и выполнять множество других задач. При этом используется максимально простой человекочитаемый формат данных YAML для постановки целей в виде плейбуков (базовых компонентов инструмента). Для работы платформы не требуется установка дополнительного ПО, она работает на языке Python.

Система создана для управления серверами в компьютерных сетях, она обеспечивает доставку и запуск программных продуктов. С ее помощью разработчики, инженеры и другие специалисты выполняют настройку серверов максимально быстро и безопасно. Применение Ansible особенно актуально в ситуациях, когда серверов несколько или сеть имеет сложную структуру.

Система находится в открытом доступе — разработчики могут в любой момент изучить ее код и адаптировать под насущные потребности компании. Как и Terraform, Ansible действует в концепции «Инфраструктура как код». При таком подходе работа серверов настраивается при помощи конфигурационных файлов. Данные о настройках и серверных программных средствах хранятся в специальных папках.

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

Среди других систем автоматического управления Ansible выделяется следующими особенностями:

  • Декларативность. Такой подход означает, что разработчику не нужно описывать в коде действия программы напрямую, достаточно обозначить результат, которого нужно достичь. Не придется обдумывать, какими путями это будет достигнуто, что сокращает время реализации.
  • Push вместо pull. Стандартная работа серверов построена на строгой иерархии — есть управляющая машина, ей подчиняются зависимые. При стандартном управлении типа pull подчиненные сервера тянут данные от главного. Ansible использует принцип push — головная машина сама продвигает информацию к подчиненным. 
  • Универсальность. Как правило, системы управления нуждаются в специальном окружении для работы. Ansible действует с текущим SSH-окружением, то есть стандартным протоколом для серверного управления. Инструменту не требуется специальное ПО работы.
  • Простая архитектура. В системе есть основной сервер, откуда исходят команды. К серверу подключены пользователи, общая база данных и облачные системы. В главном сервере установлен API (интерфейс управления), модули и плагины, которые реализуют различные программные решения. 
  • Быстрое освоение. Инструмент легко освоить, у него простой код, а в случае проблем всегда можно обратиться к сообществу или подробной официальной документации на GitHub. Язык Python и формат YAML понятны, при этом дополнительные модули можно писать на любом другом языке. 

Набор модулей Ansible довольно обширный — они нужны для работы с различными программными компонентами, которые задействованы на серверах. Система успешно взаимодействует с базами данных, облачными хранилищами, пакетными менеджерами и различными программами для мониторинга. Это значит, никакие специальные библиотеки для работы скачивать не придется.

Компонент Ansible, который называется инвентарь, представляет собой специализированное хранилище, в которых хранится информация о хостах. Для каждого хоста пользователь может указать параметры и переменные.

Основной рабочий протокол Ansible — это плейбуки, то есть файлы сценариев. Разработчики пишут их в человекочитаемом формате YAML — файлы содержат сведения о том, какой результат и на каких серверах должен быть. Плейбуки — это основа Ansible, хотя элементарные задачи можно решить и без них.

Стандартный пример работы с Ansible выглядит следующим образом:

  1. Разработчик заполняет файл hosts, указывает список зависимых сервисов с доменными именами либо IP адресами.
  2. Указывает переменные, необходимые для подключения. Серверам могут потребоваться имена пользователей и другие данные. В режиме по умолчанию серверы связываются через SSH с помощью ключей. 
  3. Пишет плейбук, указывая в нем, с какими сервисами необходимо работать и что именно делать. Плейбук сохраняется в файл.
  4. Разработчик отдает команду Ansible и тем самым активирует работу плейбука. 

Типовые задачи решаются даже без плейбуков. Для этого используются инструменты автоматизации рутины под названием «роли». В этом случае вместо блока tasks указывается роль, то есть шаблонный список задач и переменных для них. Роли используются также, когда одинаковую задачу нужно прописать для разных серверов.

Как интегрировать Terraform и Ansible

Оба инструмента можно использовать для управления конфигурациями. Однако Terraform правильно называть инструментом оркестровки, поскольку он обеспечивает управление базовыми элементами инфраструктуры.

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

В свою очередь, Ansible — идеальный вариант для управления конфигурацией конкретных систем и развертывания приложений. Платформа автоматизирует такие задачи, как установка пакетов, управление различными службами и настройка параметров компьютерных сетей.

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
428 открытий4К показов