[Перевод] Автоматизация развертывания инфраструктуры (IaC)
Что представляет собой Terraform?
Terraform — это инструмент с открытым исходным кодом, реализующий концепцию «Инфраструктура как код» и разработанный компанией HashiCorp.
В своем декларативном характере Terraform позволяет разработчикам использовать высокоуровневый язык конфигурации HCL (HashiCorp Configuration Language) для описания желаемого состояния облачной или локальной инфраструктуры, предназначенной для запуска приложений. Следующим шагом является формирование плана достижения данного состояния и выполнение этапа подготовки инфраструктуры.
Почему стоит обратить внимание на концепцию «Инфраструктура как код» (IaC)?
Для более глубокого понимания преимуществ Terraform целесообразно начать с осознания преимуществ «Инфраструктуры как кода» (IaC). IaC дает возможность разработчикам кодировать инфраструктуру таким образом, что инициализация происходила автоматически, быстро и воспроизводимо. Это является неотъемлемым компонентом методологий Agile и DevOps, включая управление версиями, непрерывную интеграцию и непрерывное развертывание.
Инфраструктура как код может помочь в следующих вопросах:
Повышение скорости: Автоматизация быстрее, чем ручная навигация по интерфейсу, когда вам нужно развернуть и/или подключить ресурсы.
Повышение надежности: Если инфраструктура большая, легко неправильно настроить ресурс или подготовить службы в неправильном порядке. При использовании IaC ресурсы всегда подготавливаются и настраиваются именно так, как заявлено.
Предотвращение смещения конфигурации: Смещение конфигурации возникает, когда конфигурация, инициировавшая вашу среду, уже не соответствует ее текущему состоянию. (см. раздел «Неизменяемая инфраструктура» ниже).
Поддержка экспериментов, тестирование и оптимизация: Поскольку Infrastructure as Code значительно ускоряет и упрощает подготовку новой инфраструктуры, вы можете вносить и тестировать экспериментальные изменения, не затрачивая много времени и ресурсов. А если вам понравятся результаты, вы сможете быстро масштабировать новую инфраструктуру для продакшена.
Почему Terraform?
Есть несколько основных причин, по которым разработчики выбирают Terraform вместо других инструментов Infrastructure as Code:
Открытый исходный код: Terraform поддерживается большими сообществами участников, которые создают плагины для платформы. Независимо от того, какой облачный провайдер вы используете, вы можете легко найти плагины, расширения и профессиональную поддержку. Это также означает, что Terraform быстро развивается, постоянно добавляя новые преимущества и улучшения.
Независимость от платформы: Это означает, что вы можете использовать его с любым поставщиком облачных услуг. Большинство других инструментов IaC предназначены для работы с одним облачным провайдером.
Неизменяемая инфраструктура: Большинство инструментов «Инфраструктура как код» создают изменяемую инфраструктуру, что означает, что инфраструктура может изменяться в соответствии с такими изменениями, как обновление промежуточного ПО или новый сервер хранения. Опасность изменяемой инфраструктуры заключается в дрейфе конфигурации — по мере накопления изменений фактическое выделение различных серверов или других элементов инфраструктуры «дрейфует» дальше от исходной конфигурации, что затрудняет диагностику и исправление ошибок или проблем с производительностью. Terraform предоставляет неизменяемую инфраструктуру, что означает, что при каждом изменении среды текущая конфигурация заменяется новой, учитывающей изменение, и инфраструктура подготавливается повторно. Более того, предыдущие конфигурации могут быть сохранены в виде версий, чтобы при необходимости или желании можно было выполнить откаты.
Модули Terraform
Модули Terraform — представляют собой компактные и многократно используемые конфигурации для различных ресурсов инфраструктуры, которые объединены в единое целое. Модули Terraform полезны, потому что они позволяют автоматизировать сложные ресурсы с помощью многократно используемых, конфигурируемых конструкций. Написание даже очень простого файла Terraform приводит к созданию модуля. Модуль может вызывать другие модули, называемые дочерними модулями, что может сделать сборку конфигурации более быстрой и краткой. Модули также могут вызываться несколько раз, либо в рамках одной конфигурации, либо в отдельных конфигурациях.
Провайдеры Terraform
Провайдеры Terraform — представляют собой плагины, которые реализуют различные типы ресурсов. В состав поставщиков входит весь необходимый код для аутентификации и подключения к службе (обычно от общедоступного облачного провайдера) от имени пользователя. Вы можете найти поставщиков для облачных платформ и служб, которые вы используете, добавить их в конфигурацию, а затем использовать их ресурсы для подготовки инфраструктуры. Провайдеры доступны почти для каждого крупного поставщика облачных услуг, предложений SaaS и т. д., разработанных и/или поддерживаемых сообществом Terraform или отдельными организациями. Обратитесь к документации по Terraform.
Использование Terraform в команде
При совместной работе нескольких участников над проектом Terraform из разных мест крайне важно эффективно управлять кодом инфраструктуры и состоянием проекта, чтобы избежать конфликтов и ошибок перезаписи. Решение состоит в том, чтобы хранить состояние удаленно, а не локально. Удаленная система доступна всем членам вашей команды, и они могут заблокировать состояние во время работы.
Примером такого удаленного бэкенда является pg, который сохраняет состояние в базе данных PostgreSQL. В качестве примера мы используем его с управляемой базой данных DigitalOcean для обеспечения доступности данных.
Terraform также обеспечивает поддержку официального управляемого облачного сервиса от Hashicorp, известного как Terraform Cloud — это проприетарное приложение, которое согласовывает работу вашей команды в едином пространстве и предоставляет пользовательский интерфейс для настройки и управления.
В Terraform Cloud можно создать организацию, к которой вы сможете подключить свой проект. Затем использовать организацию для настройки рабочих областей и ресурсов. Текущее состояние инфраструктуры будет храниться в управляемом облаке, чтобы оно всегда было доступно. Также настроить бэкенд pg с сопутствующей управляемой базой данных PostgreSQL.