Проект модуля #3

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

DevOps для программистов

Автоматизация создания инфраструктуры проекта через Terraform и Ansible

2-4
недели

Цель

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

Terraform - это мощный инструмент, который позволяет описывать инфраструктуру с помощью кода. Он отслеживает изменения, которые произошли в конфигурации и актуализирует инфраструктуру (удаляет или создаёт ресурсы - сервера, сеть, базы данных и т.п.). Если какие-то ресурсы не могут быть изменены, то они пересоздаются. Terraform может работать не только со множеством облачных провайдеров, но и с другими технологиями, например с сервисами логирования, мониторинга и VCS.

Установка необходимых приложений на готовые сервера осуществляется с помощью Ansible. Он позволяет автоматизировать действия на серверах - начиная от установки приложений и заканчивая точечной настройкой конфигурационных файлов. Так же есть возможность использовать готовые роли, которые хранятся в Ansible Galaxy. Это помогает значительно ускорить разворачивание инфраструктуры.

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

Описание

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

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

  • Два веб-сервера с приложением (в этом проекте используется готовое приложение), которое работает внутри Docker
  • Балансировщик нагрузки, который принимает запросы по HTTPS и перенаправляет их веб-серверам
  • База данных как сервис

Наставники

Аватар наставника Антон Маркелов
Антон Маркелов
Работает тимлидом инфраструктурной команды в UnitedTraders. Двигает DevOps со стороны эксплуатации и создает все условия для адаптации DevOps-практик разработчиками. До этого успешно закончил стажировку по DevOps в Express42. Считает, что выделенная роль DevOps-инженера в большинстве случаев не нужна большинству компаний
Аватар наставника Михаил Иванов
Михаил Иванов
В IT более 15 лет. Начинал системным администратором, вырос до DevOps-инженера. Строил большие и нагруженные системы с приватными облаками (Openstack), работал с паблик облаками — Azure и Digital Ocean. Участвует в Open Source и работает наставником сразу в нескольких образовательных проектах
Сколько стоят проекты?

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

Зачем проходить проекты?

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

Проекты — портфолио программиста. Их код останется в вашем аккаунте на GitHub и будет преимуществом при поиске работы.

Чтобы узнать о том, что такое проекты и в чём их польза, прочитайте нашу статью «Анатомия проектов Хекслета».

Что делать, если возникли трудности во время выполнения проекта?

Задавайте вопросы в разделе «Обсуждение» на странице шага, на котором возникли трудности, или вашему наставнику. Изучите вопросы других студентов в «Обсуждениях»: там собрана большая база знаний, ей можно и нужно пользоваться. Попросите о помощи в нашем Slack-чате в канале #hexlet-projects.

Кто проверяет проекты?

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

У меня другой вопрос

Нажмите на виджет в правом нижнем углу экрана и поищите ответ в нашей справке. Или сразу пишите на support@hexlet.io — вам ответит живой человек из команды Хекслета.