Всем большой привет. Меня зовут Виктор, и я DevOps-инженер в команде Nixys. Мы решили выложить обучающее видео, которое будет полезно новичкам в мире DevOps. Тема сегодняшнего туториала - “Знакомство с Terraform”. Также под видео мы поделимся наиболее важными, на наш взгляд, преимуществами этого инструмента.

Кстати, есть небольшая история о том, почему мы вообще решили выкладывать видео. Некоторое время назад мы сняли несколько обучающих видео для внутреннего использования, которые лежали у нас на YouTube - на момент написания статьи мы запилили 7 роликов: 5 на джуна и 2 на мидла. И однажды один из знакомых ребят поделился с нами, что выполнял тестовое задание в одну из IT-компаний по нашим обучающим видео (которые, как мы вообще-то думали, в ПРИВАТНОМ режиме). Благодаря этому слепому случаю мы обнаружили, что количество просмотров некоторых роликов сильно перевалило количество сотрудников компании, а значит даже без нашего ведома приносят некоторую пользу. Так мы решили уже целенаправленно делиться нашими знаниями с более широкой аудиторией (жадничать мы не привыкли).

Итак, видеоролик под названием:

"DevOps с Nixys | Знакомство с Terraform - Tutorial для начинающих #1". 

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

О чём собственно само видео?

В видео демонстрируются возможности особенного подхода к управлению своей инфраструктуры в коде - Infrastructure as Code, или IaC. Как следует из названия, это подход для управления и описания своей инфраструктуры через конфигурационные файлы, а не через ручное редактирование конфигураций на серверах или интерактивное взаимодействие. С помощью замечательного инструмента Terraform мы разворачиваем небольшую облачную инфраструктуру в Yandex Cloud.

Сегодня мы не показываем, как правильно писать код на Terraform, а лишь демонстрируем толику его возможностей. В частности, мы развернули сеть и подсеть, где создали виртуальную машину, к которой привязали настроенную группу безопасности и выделили статичный IP. В самой ВМ мы также произвели настройку примитивнейшего веб-сервера. Кроме того, настроили хранение файла состояния terraform.tfstate в объектном хранилище.

Ну и зачем нам этот ваш Terraform?

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

  1. Скорость и уменьшение затрат

    Поднятие инфраструктуры вручную занимает меньше времени, да. Но только в самый первый раз. Тестовое окружение нужно? Да. И что же, снова поднимать всё то же самое? Вроде и не проблема, но давайте посчитаем: 

    1) Для простоты возьмем за основу круглые числа (очень условно). Пусть стоимость часа работы инженера = 1000 рублей. Допустим, поднять инфраструктуру руками = 100 часов. Поднять dev окружение = 0,75*100, (инженер же уже набил руку, и второй раз сделает это быстрее). Если нужен stage, то умножаем на два: 2*0,75*100. Итого, на все окружения затрачено - 250 часов и 250 000 рублей.

    2) А теперь давайте представим (опять-таки условно), что упал дата-центр и вам снова придётся заплатить за ту же работу 250 000 рублей. Итого, свыше 500 000 рублей + придётся ждать те же 100 часов, чтобы поднять хотя бы prod-окружение, залить данные и запустить его.

    3) При использовании Terraform время на поднятие инфраструктуры занимает у всех по-разному, в зависимости от опыта инженера и сложности самой инфраструктуры, но обычно это где-то X2, т.е. 200 часов, плюс стоимость часа работы инженера, который умеет работать с таким инструментом, уже будет выше - например, 1500 рублей. Чтобы поднять test- и stage-окружение нужно лишь поменять несколько переменных в коде - и всё! Я даже не знаю, с каким коэффициентом это считать, пусть будет 0,05*100 (т.е. по 5 часов на одно окружение). Итого - 210 часов, и 315 000 рублей. Пока не так радужно…

    4) А если снова смоделировать падение дата-центра? Код у нас остался, поэтому поднять новую инфраструктуру, примерно 6 часов, или почти один рабочий день. Причем большую часть времени займёт восстановление данных из бэкапов (конечно они могут быть гигантских размеров и тогда получится дольше, но тут уж ничего не попишешь). Итог - 321 000 рублей и день простоя :)

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

  2. Исключение человеческого фактора.

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

    А что же насчет Terraform? В этом и есть его преимущество, если конфигурация написана правильно, то сколько бы времени не прошло и сколько бы раз вы не запускали terraform apply, результат будет одинаковый. Можно спокойно пересоздать сервер и залить туда свежий бэкап, если требуется. Я не говорю уже про случаи, когда что-то может произойти с дата-центром.

  3. Стандартизация

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

  4. Контроль версий

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

И предвосхищая ещё один ваш вопрос..

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

Здесь всё просто. Если вы планируете развиваться и выпускать релизы, у вас где-то увеличится нагрузка, где-то возникнет надобность внедрить новый сервис или обновить существующий, и без толкового DevOps-инженера вы просто-напросто не сможете поддерживать свою конфигурацию в актуальном состоянии, и любые нововведения повлекут череду ошибок. В итоге всё равно придётся обращаться к специалисту за помощью, правда в этом случае может быть потеряно драгоценное время, плюс в режиме ASAP стоимость услуг может быть еще и на порядок выше.

Вывод

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

Спасибо за внимание.

P.S.: Подписывайтесь на наш Telegram-канал DevOps, где мы публикуем новости из мира DevOps.

Комментарии (11)


  1. rmrfchik
    07.10.2022 22:32
    +1

    Такие расчеты напоминают мне сюжет из древнего рассказа или повести, уже не помню. ГГ попал в будущее и ему там рассказывают о чудесах автоматизации. Раньше как консервы открывали -- нужно было найти открывашку, мучиться с открыванием в течение 15 минут. А сейчас поставили в центре города робота для открывания. Берёшь консерву, едешь и тебе открывают за минуту.

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

    Я не хочу обсуждать достоинства и недостатки тераформа, я хочу обратить внимание на странность ТЭО.


    1. Vikontrol Автор
      08.10.2022 11:53
      +1

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

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

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

      Решать в итоге всё равно не нам, мы лишь рекомендуем.

      А насчёт обучения, да, процесс небыстрый, однако, можно же нанять уже знающего специалиста или обратиться к нам)


      1. funca
        08.10.2022 21:58

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


  1. hard2018
    07.10.2022 22:39

    Терраформ ставится в VS Code или чё. И как вы цепляетесь к CLI облака. Видео очень тяжело смотреть, качество не очень.


    1. Vikontrol Автор
      08.10.2022 11:36
      +1

      Нет, terraform ставится в систему, у яндекса есть подробная инструкция - https://cloud.yandex.ru/docs/tutorials/infrastructure-management/terraform-quickstart#before-you-begin, думаю её будет достаточно.

      Также, вот документация яндекса по установке их консольной утилиты yc - https://cloud.yandex.ru/docs/cli/operations/install-cli и её аутентификация в вашем облаке - https://cloud.yandex.ru/docs/cli/operations/authentication/user

      А по поводу качества видео, я не заметил проблем с разрешением, если ставить 1080p, то текст видно очень хорошо. Даже на 720p видно неплохо. Дело в том, что я специально увеличил шрифт, когда записывал видео, для того, чтобы зрители не напрягались при просмотре. Перепроверьте, пожалуйста, и если вопрос с качеством останется, напишите в наш телеграм чат, желательно со скринами, попробуем решить.


      1. hard2018
        08.10.2022 11:46

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


        1. Vikontrol Автор
          08.10.2022 12:37
          +1

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


  1. nioliz
    08.10.2022 01:00

    Я вот чего-то не понял... Зачем нужен Terraform... когда есть ansible?


    1. Nognomar
      08.10.2022 11:12
      +2

      У терраформа немного другой подход, который в ряде случаев имеет некоторые преимущества над ансиблом. Как пример, терраформ сохраняет стейт всех созданных с его помощью ресурсов, что позволяет изменять уже созданные ресурсы просто меняя/удаляя соответствующие параметры в tf-файле. Было 3 виртуалки типа Foo в регионе Bar, а захотели оставить две? Не проблема, просто меняешь значение соответствующей переменной с 3 на 2 в "коде" и перезапускаешь терраформ. Захотели дропнуть все виртуалки foo? Без проблем - просто удали/закомментируй их описание, и перезапусти терраформ. Таким образом легко и просто создавать/изменять/удалять ресурсы без необходимости писать отдельный "код" для каждого случая. В то время как в ансибле тебе все же придется писать отдельные плейбуки для каждого типа операций отдельно.


    1. Vikontrol Автор
      08.10.2022 11:20
      +2

      @Nognomar отлично написал, добавлю лишь, что преимущество terraform раскрывается не только в сохранении состояния (хотя да, это основной плюс над ansible), что даёт те преимущества, которые были описаны. Но также, когда пишешь код на terraform, тебе не нужно описывать процесс создания, достаточно просто описать сущность, т.е. результат и на этом всё, в ansible же придётся описывать пошагово, как добиться нужного результата. В общем, можно сказать, что terraform гораздо проще и удобнее для изучения и уж точно более применим для последующего управления инфраструктурой.


    1. funca
      08.10.2022 11:42
      +1

      Terraform это IaC, а Ansible - configuration management and automation tool. Они неплохо дополняют друг друга. Терраформом удобно описывать ресурсы и их зависимости, стейт даёт понимание того как это все должно выглядеть. Ансиблом - автоматизировать различные скрипты, менять настройки и управлять тем, где подход immutable resources по каким-либо причинам не применим.