Инфраструктура как код: преимущества и примеры
Development | Комментировать запись
Облачные вычисления по запросу предоставляют вычислительные ресурсы, не связанные с физическим оборудованием и базовой конфигурацией. Автономные программные системы предоставляют такие ресурсы в облаке для достижения автоматизации, благодаря которой доступные ресурсы можно программно контролировать, взаимодействуя с провайдерами облачных услуг. Таким образом, изменения инфраструктуры (например, масштабирование ресурсов) можно реализовать быстрее и надежнее, обходясь в основном без ручного взаимодействия, но при этом с возможностью контролировать весь процесс и отменять действия, если что-то идет не по плану.
Инфраструктура как код (IaC) – это подход к автоматизации развертывания и изменений инфраструктуры путем определения желаемого состояния ресурсов и их взаимоотношений в коде. Код пишется при этом на специализированных, удобочитаемых языках инструментов IaC. Фактические ресурсы в облаке создаются (или изменяются) при выполнении кода. Затем инструмент от вашего имени взаимодействует с облачным провайдером или системой развертывания и применяет необходимые изменения без использования веб-интерфейса провайдера. При необходимости код можно менять – после выполнения кода инструмент IaC отследит различия между желаемой инфраструктурой в коде и реальной инфраструктурой в облаке и сделает всё, чтобы фактическое состояние приравнялось желаемому.
Чтобы IaC работала на практике, созданные ресурсы не должны впоследствии изменяться вручную (это называется «неизменяемая инфраструктура»), поскольку это создает разногласия между ожидаемой инфраструктурой в коде и фактическим состоянием в облаке. Кроме того, измененные вручную ресурсы могут быть откачены до предыдущей версии или удалены во время выполнения кода, и вся такая настройка будет потеряна. Решением этой проблемы является внесение изменений в код инфраструктуры.
Читайте также: Что такое неизменяемая инфраструктура?
В этой статье мы поговорим о том, что такое IaC и каковы ее преимущества, а также рассмотрим примеры реальных реализаций. Мы также обсудим Terraform, инструмент оркестровки IaC с открытым исходным кодом. Мы рассмотрим роль Terraform в этом подходе и сравним его с другими инструментами IaC.
Преимущества IaC
С помощью IaC вы можете быстро создать столько копий вашей инфраструктуры, сколько вам нужно, в нескольких регионах и из одного источника истины – вашего декларативного кода. Этот подход дает множество преимуществ, а также гарантирует, что вы создаете ресурсы последовательно, без ошибок, при этом сокращая время на управление и ручную настройку.
Основные преимущества IaC:
- Развертывание: отказ от ручного взаимодействия с облачными провайдерами повышает скорость развертывания.
- Восстановление: выявление проблем в конфигурации обеспечивает быстрое восстановление после сбоев.
- Последовательность: каждый раз ресурсы развертываются одинаково, что уменьшает уязвимость инфраструктуры.
- Модификация: изменение ресурсов требует меньшего оборотного времени.
- Возможность повторного использования: вы можете повторно использовать части текущей инфраструктуры в своих будущих проектах.
- Контроль версий: код инфраструктуры хранится в системах контроля версий.
- Визуальный доступ: создавая конфигурацию в виде кода, вы по сути получаете документацию для вашей инфраструктуры.
В рамках рабочего процесса IaC вы можете многократно разворачивать инфраструктуру стандартизованным образом, благодаря чему разработка и тестирование программного обеспечения займут меньше времени (поскольку среда разработки, промежуточная среда, и среда тестирования разделены). Вы можете повторить процесс написания кода и его тестирования вживую, развернув инфраструктуру столько раз, сколько вам это необходимо. Как только написанная вами инфраструктура будет соответствовать всем требованиям, вы можете развернуть ее в ваших облачных средах. А при возникновении новых требований вы можете просто повторить процесс.
Поскольку IaC основана на коде, она всегда должна быть связана с программным обеспечением для управления версиями (VCS), таким как Git. Хранение кода инфраструктуры в VCS делает ее легкодоступной, а изменения видны всем членам вашей команды. Также это предоставляет возможность создавать снапшоты, с помощью которых вы всегда можете вернуться к более ранней версии, если внесенные изменения вызывают ошибки. Продвинутая настройка VCS позволяет автоматически интегрировать утвержденные обновления в IaC в облаке.
Теперь вы знаете, что такое IaC и какие преимущества приносит этот подход. Далее мы поговорим о состояниях, механизме отслеживания ресурсов IaC, а также о роли Terraform и других инструментов, использующих IaC.
Что такое состояние?
В контексте IaC под состоянием понимают собственно состояние желаемых ресурсов инфраструктуры в развертывании. На данный момент существует как минимум три состояния: фактическое состояние ресурса в облаке, идеальное состояние, представленное в коде, и кэшированное состояние, которое поддерживает инструмент IaC. Кэшированное состояние описывает состояние ресурса в облаке, каким оно было при последнем выполнении кода. Terraform позволяет развертывать один и тот же код несколько раз, формируя несколько состояний для каждого развертывания.
Фактическое состояние (управляемых ресурсов) в облаке всегда должно совпадать с кэшированным состоянием инструмента. При выполнении кода инструмент сравнивает идеальное состояние с кэшированным и применяет обнаруженные различия к облаку. Если кэшированное и фактическое состояния не совпадают, высока вероятность того, что выполнение не удастся или ресурсы будут оркестрованы неправильно.
Роль Terraform в IaC
Terraform – это инструмент оркестровки ресурсов IaC с открытым исходным кодом, написанный на Go и разработанный Hashicorp. Он поддерживает несколько облачных провайдеров. Определения инфраструктуры написаны на языке Hashicorp (HCL, или Hashicorp Configuration Language), а файлы исходного кода, написанные на нем, имеют расширение tf.
Terraform работает путем чтения кода, описывающего вашу инфраструктуру, и создания графа, содержащего все ресурсы с их взаимными отношениями. Затем он сравнивает его с кэшированным состоянием ресурсов в облаке и готовит план выполнения, в котором подробно описывается, что будет применяться к облаку и в каком порядке для достижения желаемого состояния.
Два основных типа компонентов Terraform – это провайдеры и оркестровщики. Провайдеры несут ответственность за взаимодействие с поставщиками облачных услуг, создание, управление и удаление ресурсов. А оркестровщики используются для выполнения определенных действий на созданных удаленных ресурсах или на локальном компьютере, на котором обрабатывается код.
Terraform поддерживает управление основными компонентами облачного провайдера, такими как вычислительные экземпляры, балансировщики нагрузки, хранилища и DNS-записи. Расширяемая природа Terraform позволяет добавлять новых провайдеров и оркестровщиков.
В контексте IaC роль Terraform –обеспечение соответствия состояния ресурсов в облаке состоянию, выраженному в коде. Terraform не отслеживает развернутые ресурсы, он не уделяет внимания дальнейшей начальной загрузке подготовленных вычислительных копий. В следующем разделе вы узнаете, чем Terraform отличается от других инструментов и как они дополняют друг друга в рабочем процессе.
Инструменты IaC
Подход IaC широко представлен в современном программном обеспечении: вы найдете множество инструментов для развертывания, управления конфигурацией, виртуализации и оркестровки. Docker и Kubernetes, – ведущие инструменты для создания и оркестровки контейнеров, – используют YAML для объявления желаемого конечного результата. Есть еще Hashicorp Packer, инструмент для создания снапшотов развертываний, и он использует формат JSON для объявления шаблонов и переменных, из которых будет создана быстрая резервная копия системы.
Читайте также: Основы управления конфигурациями
Ansible, Chef и Puppet – самые популярные инструменты управления конфигурацией. Они используют подход IaC для определения желаемого состояния серверов, которыми они управляют.
Загрузочные системы Ansible оркеструют серверы в соответствии с заданными сценариями, которые называются плейбуками. Playbook – это текстовый файл, написанный на YAML, который определяет, какие операции должна выполнять система Ansible и с какими целевыми ресурсами она будет работать. Примеры таких операций: запуск сервисов, установка пакетов с помощью системного пакетного менеджера или выполнение пользовательских команд bash.
Читайте также: Создание плейбука Ansible
И Chef, и Puppet работают посредством центральных (главных) серверов, с которых на управляемые серверы поступают инструкции об оркестровке. На управляемых серверах должно быть установлено агентское ПО В отличие от Ansible, для описания ресурсов Chef использует Ruby, а Puppet – собственный декларативный язык.
Terraform совместим с другими инструментами IaC и системами DevOps. Сильная сторона Terraform заключается в предоставлении аппаратных ресурсов, а не в дальнейшей установке программного обеспечения и начальной настройке сервера.
В отличие от инструментов управления конфигурацией типа Ansible и Chef, Terraform не подходит для установки программного обеспечения на целевые ресурсы и для планирования задач. Вместо этого в Terraform есть провайдеры для взаимодействия с поддерживаемыми ресурсами.
Terraform может работать в рамках одной машины, ему не нужен главный и управляемый серверы, в отличие от некоторых других инструментов. Он не проверяет их фактическое состояние и автоматически повторно применяет конфигурацию, поскольку его основное внимание уделяется их оркестровке. Типичный рабочий процесс выглядит так: сначала ресурсы выделяются с помощью Terraform, а затем они загружаются с помощью инструмента управления конфигурацией, если это необходимо.
Для Chef Terraform предоставляет встроенный провайдер, который настраивает клиента на оркестрованных удаленных ресурсах. С его помощью вы можете автоматически добавить все оркестрованные серверы к главному серверу, после чего сможете дополнительно настроить их с помощью кукбуков (декларации инфраструктуры Chef).
Читайте также: Написание рецептов Chef
Заключение
В этой статье мы поговорили о парадигме подхода IaC, его преимуществах перед традиционным ручным системным администрированием, а также об инструменте выделения ресурсов IaC под названием Terraform и других популярных инструментах автоматизации инфраструктуры.
Tags: Ansible, Chef, IaC, Puppet, Terraform