<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anton Streltsov</title>
    <description>The latest articles on DEV Community by Anton Streltsov (@teruxz).</description>
    <link>https://dev.to/teruxz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3277049%2Fe96f7426-fb2a-4173-a129-8984c0b390ee.jpg</url>
      <title>DEV Community: Anton Streltsov</title>
      <link>https://dev.to/teruxz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/teruxz"/>
    <language>en</language>
    <item>
      <title>DevOps как по учебнику. Возможно ли? [RU]</title>
      <dc:creator>Anton Streltsov</dc:creator>
      <pubDate>Mon, 23 Jun 2025 20:39:51 +0000</pubDate>
      <link>https://dev.to/teruxz/devops-kak-po-uchiebniku-vozmozhno-li-ru-3jnb</link>
      <guid>https://dev.to/teruxz/devops-kak-po-uchiebniku-vozmozhno-li-ru-3jnb</guid>
      <description>&lt;p&gt;DevOps —  это не отдельная роль, а скорее философия или набор практик, принятых внутри компании/команды.&lt;br&gt;
Его цель —  улучшить коммуникацию и объединить разработку и эксплуатацию общей целью, повысить прозрачность и скорость доставки ценности до клиента.&lt;br&gt;
По крайней мере, так нам заявляют основные труды по DevOps, а также те, кто стоял у истоков этого движения.&lt;br&gt;
Но в индустрии сложилось совершенно другое представление о DevOps: у нас выделились отдельные DevOps-инженеры, и даже появилось мнение,&lt;br&gt;
что DevOps —  это просто «сисадмин на стероидах».&lt;/p&gt;

&lt;p&gt;За свой опыт я успел побывать, наверное, во всех вариантах «DevOps»: и как отдельный инженер, жёстко привязанный к команде разработки, и как инженер,&lt;br&gt;
который оказывает «сервисную» услугу всем командам разработки, и как часть продуктовой команды.&lt;br&gt;
Всё это время я стремился размыть границы существующих ролей, проводил внутреннее обучение, консультировал лично — и у меня сформировалось&lt;br&gt;
некоторое видение ситуации, которым я хотел бы поделиться.&lt;/p&gt;
&lt;h2&gt;
  
  
  Как это устроено сейчас
&lt;/h2&gt;

&lt;p&gt;Прежде чем поговорить о том, как проводить культурные изменения и нести в команду практики, призванные размыть границы между DevOps и разработкой,&lt;br&gt;
стоит обсудить типовые структуры DevOps в компаниях.&lt;/p&gt;
&lt;h3&gt;
  
  
  DevOps как вещь в себе
&lt;/h3&gt;

&lt;p&gt;Это структура, к которой применимо описание «сисадмины на стероидах». Отдельная организационная единица,&lt;br&gt;
в которой находятся инженеры и решают, по большей части, только свои задачи.&lt;br&gt;
Для разработки такая структура остаётся «чёрным ящиком», который иногда «выплёвывает» во внешний мир какой-нибудь GitLab pipeline&lt;br&gt;
или Helm chart. Да, конечно, к ним можно обратиться за помощью или настройкой чего-либо,&lt;br&gt;
но это всё равно не разрушает стену между development и operations.&lt;br&gt;
Внутри же этого чёрного ящика можно услышать следующие настроения:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;«Опять этой разработке что-то надо».&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;«А давайте отполируем вот это решение, хоть оно и не несёт business value».&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;«Давайте переизобретём свой костыль!» (чистейший &lt;a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D0%B4%D1%80%D0%BE%D0%BC_%D0%BD%D0%B5%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F_%D1%87%D1%83%D0%B6%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8" rel="noopener noreferrer"&gt;NIH&lt;/a&gt;-синдром —  Not Invented Here).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;По сути, такая структура наоборот отдаляет нас от DevOps-практик, затрудняя коммуникацию между бизнесом, разработкой и эксплуатацией.&lt;br&gt;
Хотя, признаюсь честно, как инженеру — вариться в таком «бульоне» может быть интересно и весело.&lt;/p&gt;
&lt;h3&gt;
  
  
  DevOps «привязанный» к команде
&lt;/h3&gt;

&lt;p&gt;В такой структуре у нас есть большой «хаб» DevOps, из которого выделяется инженер и привязывается к команде разработки.&lt;br&gt;
Инженеры могут ротироваться, но какое-то постоянное присутствие в жизни команды всё-таки осуществляется.&lt;/p&gt;

&lt;p&gt;Здесь DevOps-инженер — это некий Данко или Прометей, который принёс «свет» из своего хаба&lt;br&gt;
и теперь пытается вывести команду из тьмы, решая все проблемы, связанные с инфраструктурой, CI/CD, деплоями, мониторингом и т. д.&lt;br&gt;
На бумаге это вполне жизнеспособная схема, но всё ломается о реальность.&lt;/p&gt;

&lt;p&gt;В реальности всё не так радужно.&lt;br&gt;
Сценарий часто развивается следующим образом:&lt;/p&gt;

&lt;p&gt;Команда разработки определяет DevOps-инженера как «человека, который чинит пайплайны».&lt;br&gt;
И всё —  любые, даже совсем незначительные, проблемы делегируются DevOps-специалисту.&lt;br&gt;
К этому добавляется то, что стандарты и практики, которые «спускаются» из хаба, могут в моменте замедлить разработку&lt;br&gt;
или вообще противоречить продуктовым целям команды.&lt;/p&gt;

&lt;p&gt;В итоге мы получаем ситуацию, в которой команда всё так же считает DevOps и инфраструктуру «чёрным ящиком».&lt;br&gt;
Только теперь к этому добавляется заваленный рутиной инженер, который, продолжая аналогию,&lt;br&gt;
находится между двух огней: стандартов DevOps и продуктовых целей.&lt;/p&gt;
&lt;h2&gt;
  
  
  Что такое "DevOps по учебнику"
&lt;/h2&gt;

&lt;p&gt;Понятно, что никаких "учебников" на самом деле нет.&lt;br&gt;
Есть набор выступлений, научных работ, и книг тех, кто стоял у истоков.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Project Phoenix"&lt;/li&gt;
&lt;li&gt;"Accelerate"&lt;/li&gt;
&lt;li&gt;"SRE Book"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Все они говорят, что DevOps это не человек, а набор практик и культура.&lt;br&gt;
DevOps —  это не роль, а уровень инженерной зрелости команды.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Автоматизация&lt;/li&gt;
&lt;li&gt;Общее владение продуктом. Без разделения ответственности.&lt;/li&gt;
&lt;li&gt;Прозрачность процессов, за счёт общего языка и контекста между разработкой и эксплуатацией.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Почему это круто?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Прозрачность&lt;/strong&gt;. Инженеры с обоих сторон понимают систему целиком, понимают, что нужно сделать, чтобы провести деплой и какими механизмами он осуществляется&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Скорость&lt;/strong&gt;. Не нужно ждать DevOps-инженера, если сломался пайплайн или когда нужно выкатить новый сервис или фичу на прод&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Улучшение коммуникации&lt;/strong&gt;. Все инженеры говорят на одном языке. В следствие чего любые вопросы решаются быстрее.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps-инженер вовлечен в разработку&lt;/strong&gt;. Оказывает на неё влияние и заинтересован в достижении продуктовых целей.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps-инженер получает те самые "интересные" задачи&lt;/strong&gt;. Вместо того, чтобы в сотый раз чинить упавший пайплайн, можно сосредоточиться на настоящей автоматизации и оптимизации процессов&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Какие могут быть сложности в реальности?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;В больших командах нужны стандарты и единообразность. Здесь, стоит рассмотреть такую вещь как "Платформенная инженерия". Об этом я расскажу в другой раз.&lt;/li&gt;
&lt;li&gt;Повышается когнитивная нагрузка, как на разработку так и на эксплуатацию, потому что культурный сдвиг требует усилий&lt;/li&gt;
&lt;li&gt;Люди хотят делить ответственность.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Как к этому можно прийти
&lt;/h2&gt;

&lt;p&gt;Прежде чем поговорить об отдельных практиках, хочется сказать о том, что важно начинать с малого.&lt;br&gt;
В процессе внедрения чего-то нового, будут люди с разным спектром в отношении принятия новых идей.&lt;br&gt;
Кто-то более склонен к внедрению чего-то нового, кто-то более консервативен, и это нормально.&lt;br&gt;
На ранних этапах, важно целиться в то меньшинство, которое уже считает, что изменения нужны и готовы вкладываться.&lt;br&gt;
Таких "инноваторов" будет 2-3% от общей массы людей.&lt;br&gt;
Но именно они позволят перетянуть "молчаливое большинство" на вашу сторону.&lt;/p&gt;

&lt;p&gt;Мы не хотим "большого взрыва" или "революции" нам важно показать успешность нашего подхода, даже если это произойдет на малой группе людей.&lt;/p&gt;
&lt;h3&gt;
  
  
  Используйте кодерские инструменты
&lt;/h3&gt;

&lt;p&gt;Ansible, Terraform, Helm, yaml для CI - это все инструменты, которые мы называем общим словом "IaC"(Infrastructure as Code).&lt;br&gt;
То есть они должны помочь нам привнести практики разработки программного обеспечения внутрь эксплуатации.&lt;br&gt;
И это хорошие и проверенные в продакшене инструменты, однако они далеки от языков общего назначения, к которым привыкла разработка.&lt;br&gt;
Такие вещи как циклы, условия, модульность, наследование или композиция в этих инструментах, выглядят странно с точки зрения разработчика.&lt;/p&gt;

&lt;p&gt;В языках со строгой типизацией очень помогают IDE и типы, для того, чтобы разбираться в больших модулях и удовлетворять сигнатурам функций.&lt;br&gt;
IaC-инструменты же, при всем развитии LSP и плагинов для IDE, все же, отстают в вопросах анализа кода.&lt;/p&gt;

&lt;p&gt;Для многих общепринятных IaC-инструментов можно найти более "программистский" аналог.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| Цель                                 | Iac-инструмент          | Аналог                                      |
|--------------------------------------+-------------------------+---------------------------------------------|
| Управление облачной и/или bare-metal | Terraform               | Pulumi/SDK облачного провайдера             |
| инфраструктурой.                     |                         |                                             |
|                                      |                         |                                             |
|--------------------------------------+-------------------------+---------------------------------------------|
| Менеджмент Ресурсов k8s              | Helm                    | k8sdk                                       |
|                                      |                         |                                             |
|--------------------------------------+-------------------------+---------------------------------------------|
| Описание CI/CD пайплайнов            | GitlabCI/GitHub Actions | DaggerCI. TeamCity(Kotlin). Jenkins(Groovy) |
|                                      |                         |                                             |
|--------------------------------------+-------------------------+---------------------------------------------|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Все эти инструменты делают инфраструктурное окружение для разработчика более понятным, следовательно в него проще погрузиться. Дополнительно&lt;br&gt;
мы получаем больше свободы для развития нашего инфраструктурного кода под нужды конкретной команды или процесса.&lt;/p&gt;

&lt;p&gt;Да, отказ от общепринятых инструменов  повышает порог входа в команду, а также усложняет поиск инженеров на рынке, но&lt;br&gt;
во-первых, не обязательно полностью переходить на другой тулинг, а, во-вторых, мы всегда можем сделать промежуточное представление в виде обычного yaml/json. Так мы строим еще один уровень абстракций, но это трейд-офф, с которым можно мириться.&lt;/p&gt;

&lt;h3&gt;
  
  
  Гайды "for Developers"
&lt;/h3&gt;

&lt;p&gt;Организуйте процесс ввода любого разработчика в те технологии, которые вы используете.&lt;br&gt;
С этим могут помочь внутренние гайды.&lt;br&gt;
Но не нужно строить гайды на теории. Видео, которые объясняют: "Что такое Kubernetes", "Что такое Pod", полно, но я все равно встречаю полное непонимание этого инструмента.&lt;/p&gt;

&lt;p&gt;На практике я вывел более оптимальную форму того, как выстроить подачу информации, которую для себя назвал "... for Developers".&lt;br&gt;
Вот какими отличительными чертами обладает такой гайд:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Минимально необходимое количество теории.&lt;/strong&gt; Навык разработки, как и навык траблшутинга инфраструктуры, это навыки, которые закрепляются через практику.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Мы изучаем новую концепцию, а потом долго играемся в стиле "а что если..", пытаясь решить уже ту задачу, которая интересует лично нас.&lt;br&gt;
  IT-инженеры, именно так привыкли погружаться в новую для них область. Так почему бы не перенести этот подход в изучение DevOps инструментов?&lt;br&gt;
  Получается простая схема: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Объясняем концепцию/абстракцию &lt;/li&gt;
&lt;li&gt;Даем кучу прикладных заданий &lt;/li&gt;
&lt;li&gt;Больше теории и то как что-то работает "под капотом" оставляем ссылками.
Некоторые чисто инфраструктурные вещи, можно на первых порах выкинуть. Например: "Как обновлять сертификаты в кластере Kubernetes" можно оставить за рамками гайда.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Возможность вопроизвести локально.&lt;/strong&gt; Буквально с первого занятия разработчик должен иметь возможность, создать небольшую лабораторию на своем ноутбуке.&lt;br&gt;
Это подстегивает к экспериментам и позволяет "пощупать" технологию в безопасном режиме.&lt;br&gt;
Озаботьтесь простой возможностью собрать локальное окружение.&lt;br&gt;
Например: Подготовьте конфиги для kind, напишите интерактивную инструкцию в чем-то типа Jupyter Notebook, напишите скрипт позволит "Сохранить локальное состояние" или "Сбросить все и создать заново"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Акцент на то, как это принято у вас в компании.&lt;/strong&gt; Любое объяснение, можно и нужно подкреплять примерами реальных процессов, которые уже выстроены в компании.&lt;br&gt;
Например: При рассказе о CI/CD пайплайнах показывайте те практики, которые вы сами применяете. Показывайте примеры job из реальных проектов.&lt;br&gt;
Это плавно знакомит разработчика с тем, с чем он сможет столкнуться на реальной практике уже через некоторое время.&lt;br&gt;
Плюс, "боевые" примеры имеют реальную ценность для членов команды, а значит лучше запоминаются!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Brown-bags/Q&amp;amp;A сессии
&lt;/h3&gt;

&lt;p&gt;Данный вид активности, делает DevOps открытым для всех желающих.&lt;br&gt;
Здесь подойдет любой контакт с аудиторией, которой было бы интересно глубже погрузиться в DevOps культуру.&lt;br&gt;
Это могут быть как Q&amp;amp;A сессии, на которых вы отвечаете на любые вопросы о процессах, технологиях, и принимаете обратную связь.&lt;br&gt;
Либо же это могут быть различные workshops или brown-bag сессии, где вы в быстром формате для всех желающих показываете реальную практическую работу с вашей инфраструктурой.&lt;/p&gt;

&lt;p&gt;Приведу несколько примеров того, что получалось организовать на моей практике:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Q&amp;amp;A сессии с разработчиками раз в неделю. Разработка могла заранее формировать интересующие их вопросы, могла поднимать руку и задавать их вживую&lt;/li&gt;
&lt;li&gt;Внутренние воркшопы. Здесь, я на практике показывал, как устроена та или иная технология и что с ее помощью можно сделать. Иногда бралась живая задача из спринта и грумилась до состояния, когда в ней не оставалось серых зон и выполнялась прямо в live формате.&lt;/li&gt;
&lt;li&gt;DevOps Demo. Короткие презентации того, что изменилось в нашей команде с точки зрения релизного цикла или инфраструктуры. Почему были внедрены те или иные стандарты.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Парное администрирование
&lt;/h3&gt;

&lt;p&gt;Парное программирование —  Практика, которая хорошо зарекомендовала себя среди разработчиков. Это отличный способ погрузить кого-то в новую для него задачу, способ научиться чему-то новому на реальном примере, либо дополнительный контроль в каких-то важных задачах.&lt;br&gt;
А еще парное программирование, сближает членов команды, и расширяет общий контекст.&lt;/p&gt;

&lt;p&gt;Если эта практика такая хорошая, то почему бы не внедрить ее и на уровне задач, связанных с инфраструктурой?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Парное администрирование&lt;/strong&gt; —  это метод настройки и управления инфраструктурой, когда два инженера работают над одной задачей за одним компьютером или делятся друг с другом экраном.&lt;br&gt;
Один из них выполняет роль "оператора", который непосредственно выполняет действия по настройке инфраструктуры, в то время как другой — "консультант", который наблюдает за процессом, предлагает идеи,&lt;br&gt;
задает вопросы, проверяет настройки на соответствие лучшим практикам и помогает с архитектурными решениями.&lt;/p&gt;

&lt;h2&gt;
  
  
  Заключение
&lt;/h2&gt;

&lt;p&gt;"DevOps по учебнику" —  это не идеал. Но это сильное инженерное взросление команды.&lt;br&gt;
Часто, переход к такой культуре означает борьбу с хаосом. Но начинать можно с малого:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Объяснять&lt;/li&gt;
&lt;li&gt;Приглашать к участию&lt;/li&gt;
&lt;li&gt;Делать вещи более простыми и понятными
Нас всех объединяет одна цель и DevOps это один из способов к этой цели прийти.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В данной статье намеренно не рассмотрено такое явление как "Платформенная инженерия" или "Внутренняя платформа".&lt;br&gt;
О культурной стороне которой я бы хотел поговорить в отдельной статье.&lt;/p&gt;




&lt;p&gt;Дополнение:&lt;br&gt;
В процессе подготовки статьи, мне захотелось поделиться теми ресурсами, которые продвигают DevOps как культуру.&lt;/p&gt;

&lt;p&gt;Книги:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project Phoenix&lt;/li&gt;
&lt;li&gt;SRE Book (Site Reliability Engineering. How Google runs production systems)&lt;/li&gt;
&lt;li&gt;Operations Anti-Patterns, DevOps Solutions&lt;/li&gt;
&lt;li&gt;The DevOps Handbook&lt;/li&gt;
&lt;li&gt;Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations&lt;/li&gt;
&lt;li&gt;DevOps Adoption Strategies: Principles, Processes, Tools, and Trends: Embracing DevOps through effective culture, people, and processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Все книги, кроме последних двух переведены на русский.&lt;/p&gt;

&lt;p&gt;Статьи:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://devops.com/overcoming-people-cultural-barriers-devops-adoption/" rel="noopener noreferrer"&gt;https://devops.com/overcoming-people-cultural-barriers-devops-adoption/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devblogs.microsoft.com/premier-developer/devops-fragility-antipatterns-and-consequences" rel="noopener noreferrer"&gt;https://devblogs.microsoft.com/premier-developer/devops-fragility-antipatterns-and-consequences&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Подписывайтесь: &lt;a href="https://t.me/itdeploysometimes" rel="noopener noreferrer"&gt;https://t.me/itdeploysometimes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>culture</category>
      <category>discuss</category>
      <category>russian</category>
    </item>
    <item>
      <title>Организация IaC: Модули. [RU]</title>
      <dc:creator>Anton Streltsov</dc:creator>
      <pubDate>Mon, 23 Jun 2025 20:25:04 +0000</pubDate>
      <link>https://dev.to/teruxz/orghanizatsiia-iac-moduli-ru-4klc</link>
      <guid>https://dev.to/teruxz/orghanizatsiia-iac-moduli-ru-4klc</guid>
      <description>&lt;p&gt;Недавно, на личном опыте столкнулся с тем, что команда не может организовать верхнеуровневую архитектуру для хранения и работы с инфраструктурным кодом.&lt;br&gt;
Сегодня я бы хотел подробнее погрузиться в эту тему, и рассказать о том, как можно уложить инфраструктурные блоки по полочкам, и какие паттерны для этого существуют.&lt;br&gt;
Пост поделен на две части. Сегодня мы поговорим о том, что такое инфраструктурный модуль, а также как этим модули могут выглядеть. В следующей части мы поговорим о том, как организовать работу с инфраструктурными репозиториями.&lt;br&gt;
Поехали!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Модуль&lt;/strong&gt;  —  это проект который описывает конфигурацию каких-либо инфраструктурных компонентов и их связи между собой. Деплоится как единое целое.&lt;/p&gt;

&lt;p&gt;В данном посте, я намеренно даю такое общее описание модуля, чтобы его можно было рассматривать в отрыве от реализации (Terraform, Pulumi, Cloud SDK).&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Monolith Module&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Монолитный модуль —  Самый простой способ организовать хранения инфраструктуры. Мы просто создаем один проект и внутри него описываем и держим абсолютно всё.&lt;br&gt;
Монолиты имеет смысл сохранять при небольшой команде и при малом количестве инфраструктурных компонентов. Но чаще всего такой монолит разрастается до состояния, в котором новому члену команды нужно несколько дней, чтобы разобраться в его устройстве.&lt;br&gt;
Монолит становится невозможно поддерживать, ведь каждое изменение, может сломать абсолютно всю инфраструктуру, и в этот момент мы теряем контроль над монолитным модулем.&lt;/p&gt;

&lt;p&gt;Пример "Монолитного модуля"&lt;br&gt;
Вся инфраструктура описана внутри одного проекта. В нём одновременно описаны вычислительные ресурсы, сети, хранилища, доступы и приложения. Всё хранится в одном или нескольких файлах. Нет разделения на логические блоки. Любое изменение требует работы с целым проектом.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infra/
├── database.yaml
├── main.yaml
└── vpc.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnj6hjav9qt6fal60k5ev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnj6hjav9qt6fal60k5ev.png" alt="monolith" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Application Group Module&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Application Group Module —  Способ организации кода, когда инфра для всех сервисов команды помещается в один общий модуль.&lt;br&gt;
Если ваше приложение состоит из нескольких микросервисов, и вы управляете их инфраструктурой с помощью одного модуля —  у вас Application Group Module.&lt;br&gt;
Если ваша команда разрабатывает несколько приложений, и вы управляете ими как одним целым —  у вас Application Group Module.&lt;/p&gt;

&lt;p&gt;Иметь Application Group Module привлекательно, потому что позволяет думать, обо всем приложении как о чем-то цельном, плюс, хорошо работает, если вся инфраструктура для приложения находиться в управлении одной команды.&lt;br&gt;
Также, может быть хорошим промежуточным состоянием при "распиле" Монолитных Модулей.&lt;/p&gt;

&lt;p&gt;Пример "Application Group Module"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infra/
├── team-a
│   ├── service-1
│   │   ├── db.yaml
│   │   └── main.yaml
│   ├── service-2
│   │   ├── db.yaml
│   │   └── main.yaml
│   └── service-3
│       ├── db.yaml
│       └── main.yaml
└── team-b
    ├── service-1
    │   ├── db.yaml
    │   └── main.yaml
    ├── service-2
    │   ├── db.yaml
    │   └── main.yaml
    └── service-3
        ├── db.yaml
        └── main.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyxbexant9rzb0p7iazz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyxbexant9rzb0p7iazz.png" alt="Application Group" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Application Module&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Application Module —  Данный способ организации кода, когда один модуль ограничивает одно приложение, или один микросервис.&lt;br&gt;
Все, что нужно одному кокретному микросервису или приложению собрано в один модуль, без внешних зависимостей.&lt;/p&gt;

&lt;p&gt;Идеально ложиться на микросервисную архитектуру приложений.&lt;br&gt;
Ровно до тех пор, пока у вас не появится общесервисной шины, или у всех микросервисов как зависимость будет кластер Kubernetes...&lt;/p&gt;

&lt;p&gt;Из минусов такого подхода, можно выделить необязательное дублирование кода.&lt;/p&gt;

&lt;p&gt;Пример "Application Module"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infra/
├── microservice-1
│   ├── db.yaml
│   └── main.yaml
├── microservice-2
│   ├── db.yaml
│   └── main.yaml
├── microservice-3
│   ├── db.yaml
│   └── main.yaml
├── microservice-4
│   ├── db.yaml
│   └── main.yaml
└── microservice-5
    ├── db.yaml
    └── main.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feehaksbaf0xzgxiph07g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feehaksbaf0xzgxiph07g.png" alt="Application" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Service Module&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Service Module —  Способ организации кода, когда каждую сервисную часть для нашего приложения мы оборачиваем в отдельным модуль.&lt;br&gt;
Например:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Отдельный модуль для Базы данных&lt;/li&gt;
&lt;li&gt;Отдельный модуль для Application Server&lt;/li&gt;
&lt;li&gt;Отдельный модуль для сети&lt;/li&gt;
&lt;li&gt;Отдельный модуль для кеша и т.д.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Данный способ показывает самую высокую гибкость из всех возможных способов организации IaC. Дополнительно, ошибки при таком подходе будут влиять только на конкретное приложение.&lt;br&gt;
При этом, из минусов данного подхода —  Большое количество модулей привносит сложность само по себе.&lt;/p&gt;

&lt;p&gt;Пример "Service Module"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infra/
├── db
│   └── main.yaml
├── ecs
│   └── main.yaml
├── iam
│   └── main.yaml
├── kubernetes
│   └── main.yaml
├── s3
│   └── main.yaml
└── vpc
    └── main.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjfg8nl8hw2ebiwiiaqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjfg8nl8hw2ebiwiiaqc.png" alt="Service" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;А как инфраструктурный код устроен у вас?&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>devops</category>
      <category>russian</category>
      <category>howto</category>
    </item>
  </channel>
</rss>
