Инфраструктура как код. Введение для начинающих

Согласно отчету «State of DevOps 2019», 80% респондентов сказали, что основное приложение или служба, которую они поддерживали, было размещено на какой-то облачной платформе. 50% респондентов заявили, что их основное приложение размещено в публичном облаке.

Что такое инфраструктура как код?

Инфраструктура как код (IaC) - это автоматизация инфраструктуры с использованием принципов и практик разработки программного обеспечения.

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

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

Льготы

Инфраструктура как код предоставляет значительные преимущества по сравнению с ручной подготовкой:

Самообслуживание

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

Идемпотентность

Идемпотентность означает, что вы определяете желаемое состояние, и независимо от того, сколько раз вы запускаете скрипт, результат будет одинаковым. Он проверяет текущее и желаемое состояние и применяет только те изменения, которые необходимы. Этого может быть чрезвычайно трудно достичь с помощью скриптов bash.

Такие инструменты, как Ansible и Terraform, имеют встроенные функции, которые делают ваш код идемпотентным.

Снижение затрат

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

Более быстрая доставка программного обеспечения

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

Самодокументирование

Состояние инфраструктуры определяется в коде, который легко читается любым человеком.

Контролируемая версия

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

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

Валидация и тестирование

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

Улучшенная безопасность

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

Инфраструктура как инструменты кода

Несмотря на то, что доступно много инструментов, выбрать один из них для работы может быть нелегко. Ниже приведены некоторые соображения, которые могут оказаться полезными:

Управление конфигурацией и инструменты обеспечения

В целом доступные инструменты подпадают под две категории:

  • Инструменты управления конфигурацией.
  • Инструменты обеспечения

Инструменты управления конфигурацией

Инструменты управления конфигурацией предназначены для управления пользователями, установки и управления программным обеспечением и инструментами на существующих серверах. Chef , Puppet , Ansible и SaltStack - это прежде всего инструменты настройки.

Инфраструктура как код

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

Инструменты обеспечения

Terraform, CloudFormatio, OpenStack Heat, с другой стороны, являются инструментами обеспечения, т.е. Используются для создания серверов, серверов баз данных, балансировщиков нагрузки, очередей, подсетей, брандмауэров и всех других компонентов вашей инфраструктуры. Эти инструменты делают API-вызовы к провайдерам для создания необходимой инфраструктуры.

Инфраструктура как код

Изменчивая и неизменная инфраструктура

Изменяемая инфраструктура - это та, которая может быть изменена после ее предоставления. Chef, Ansible, Puppet & SaltStack предназначены для установки или обновления программного обеспечения на существующих серверах. Это может происходить много раз в течение срока службы сервера.

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

Такие инструменты, как Terraform и CloudFormation, предназначены для того, чтобы каждый раз создавать новый сервер из образа машины или образа контейнера. Если необходимо обновить серверы, вы замените их новыми серверами.

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

Императивные и декларативные инструменты

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

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

Terraform, CloudFormation, Puppet, OpenStack Heat и SaltStack принадлежат к категории декларативных инструментов, в которой вы объявляете желаемое конечное состояние.

Использование нескольких инструментов вместе

Хотя каждый из этих инструментов может использоваться самостоятельно, общий подход состоит в том, чтобы использовать их вместе. Например, вы можете использовать Terraform для создания VPC, подсетей, интернет-шлюзов, балансировщиков нагрузки и виртуальных машин, а затем использовать Ansible для настройки и развертывания служб в этих экземплярах.

Заключение

Инфраструктура, определяемая как код, предлагает много преимуществ по сравнению с ручной подготовкой - она ​​может контролироваться версией, тестироваться, приводит к более быстрой настройке и доставке программного обеспечения. Многие организации уже начали применять подход IaC для построения и управления своей инфраструктурой.