Pull to refresh

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.

модули сами по себе это чиcтый IaC - то есть тот же код просто в отдельной папке, строго говоря в терраформе даже центральная конфигурация являеться модулем(root module) - поэтому это точно не IaD.

helm charts - абсолютно не про инфраструктуру, не понял тут вашу мысль

Еще в 21 году задумался об данном подходе. А именно применение map(any). Чтобы разработчик мог в своей вокрспейсе создать/изменить конкретную тачку и конкретный параметр не расширяя код модулями.

Помню тогда я не нашел ни одной реализации и спрашивал на редите. За что получил минус карму и ссылку на доку с модулями)))

p.s. пример моего кода:

https://github.com/mxgreen29/HandyAWSManager

Sign up to leave a comment.

Articles