Comments 7
Спасибо за пост. Вопрос
Суть подхода в том, чтобы описывать инфраструктуру с помощью данных — YAML, JSON, переменных
Не вижу отличий от Infrastructure as Code
а не менять код конфигурации вручную при малейшем изменении.
Не пойму эту мысль.
Вы просто меняете параметр(переменную), а все необходимые действия выполняет заранее написанный код или сервис.
Это terraform модули, helm чарты или operator в k8s.
В отличие от Infrastructure as Code (IaC), где изменения чаще всего касаются самого кода
Инфраструктура как код (Infrastructure as Code, IaC) — это подход к автоматизации и управлению инфраструктурой через использование кода. А используете через чистый terraform, через terraform модули, это личное дело каждого.
IaD предлагает отделить данные от логики.
Это terraform модули, helm чарты или operator в k8s.
Прочитав статью могу сказать что вы придумали terraform модули, helm чарты, operator в k8s.
Это рассказ о подходе, модули тут не играют особой роли- именно потому что они в нашем случае это код, а подход предпологает отделение данных и управление именно через данные. Пример неправильного на мой взгляд использования конфигураций когда пытаються управлять конфигурацией прямо в коде, нечто вроде:
instance_type = var.environment == prod ? c5.xlarge : var.region == us-east-1 ? c6g.large : t4.large
Не ищите здесь прорыва, это просто рассказ о том как эфектино управлять кодом, варианты всегда есть, никто не навязвает единственный подход, у нас в довольно больших масштабах это подход работает отлично.
Выгода достигаеться от наличия в гите множества плоских конфигов в которых только флаги или переменнные. Если вы используете GitOps - это здорово помогает автоматизировать все.
Просто представьте что терраформ для вас черная коробка- и все что вам надо знать - для создания нового кластера кубернетеса в новом регионе вам надо скопировать один yaml файл и отредактировать его, сохранить- и все остальное выполниться без вас. Еще раз этот файл не содержит код, а только кастомизацию в виде переменных и флагов.
модули тут не играют особой роли- именно потому что они в нашем случае это код, а подход предпологает отделение данных и управление именно через данные.
Terraform модули, а также terragrunt — предполагает отделение данных и управление именно через данные.
Выгода достигаеться от наличия в гите множества плоских конфигов в которых только флаги или переменнные.
Что за плоские конфиги?
Просто представьте что терраформ для вас черная коробка- и все что вам надо знать - для создания нового кластера кубернетеса в новом регионе вам надо скопировать один yaml файл и отредактировать его, сохранить- и все остальное выполниться без вас. Еще раз этот файл не содержит код, а только кастомизацию в виде переменных и флагов.
для создания нового кластера кубернетеса в новом регионе вам надо скопировать один terragrunt.hcl файл и отредактировать его, сохранить- и все остальное выполниться без вас. Еще раз этот файл не содержит код, а только кастомизацию в виде переменных и флагов.
Я не совсем понимаю что вы пытаетесь доказать:
Что нет такого подхода?
Что террагрант лучше?
Я просто рассказал как этот подход понимаю я, потому что в других местах это описывалось очень мудрено.
Мой короткий рассказ был о том как добиться управляемости и расширяемости через стандартные инструменты Терраформ без посторонних тулов.
Используя такой подход я создаю отлично читаемую конфигурацию, без террагранта и модулей; Не всегда и везде это сработает, и модули используються там где без них грустно.
Я хочу сказать, что практическое применение этого подхода это terraform модули, terragrunt, helm чарты, operator в k8s.
Еще в 21 году задумался об данном подходе. А именно применение map(any). Чтобы разработчик мог в своей вокрспейсе создать/изменить конкретную тачку и конкретный параметр не расширяя код модулями.
Помню тогда я не нашел ни одной реализации и спрашивал на редите. За что получил минус карму и ссылку на доку с модулями)))
p.s. пример моего кода:
Infrastructure as Data: от конфликтов к эволюции