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

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

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

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

2-4
недели

Цель

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

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

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

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

Описание

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

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

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

Наставники

Аватар наставника Алексей Гонтаренко
Алексей Гонтаренко
PM в течение почти трех лет в Московской школе программистов, курировал разработку внутренней LMS и менеджерил инфраструктуру школы. Занимался выдачей доменных имен, поднятием серверов и конфигурацией. Участвовал в разработке внутреннего CI/CD, перенес в docker несколько внутренних сервисов. Решал вопросы защиты платформы от DDoS. В настоящее время — DevOps-инженер в IT-компании, занимающейся разработкой мобильных сервисов Москвы.
Аватар наставника Илья Подвольских
Илья Подвольских
DevOps-инженер, имеет опыт работы с Windows Server и Linux. Сопровождение, настройка CI/CD (GitLab, Jenkins, Ansible). Настройка окружения для разработчиков (Docker, Docker Compose). Мониторинг (zabbix, prometheus, grafana). Тестирование (Python, Selenium, Git). Наставничает в Хекслете, чтобы делиться знаниями и прокачивать soft skills
Аватар наставника Михаил Краев
Михаил Краев
Занимется программированием с 2016 года. Начинал карьеру с микропроцессорного программирования, после чего разрабатывал алгоритмы движения для промышленных манипуляторов. Пробовал себя в веб-разработке и разработке десктопных приложений. Опыт на разных стеках позволил прийти к сфере DevOps.
Сколько стоят проекты?

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

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

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

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

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

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

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

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

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

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

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