惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
博客园 - 【当耐特】
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
D
Docker
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
The Cloudflare Blog
雷峰网
雷峰网
A
About on SuperTechFans
小众软件
小众软件
博客园 - Franky
博客园 - 聂微东
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
Engineering at Meta
Engineering at Meta
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
量子位
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
罗磊的独立博客
Martin Fowler
Martin Fowler
D
DataBreaches.Net
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Secure Thoughts
Project Zero
Project Zero
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
S
Schneier on Security
Blog — PlanetScale
Blog — PlanetScale
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
Security Latest
Security Latest
NISL@THU
NISL@THU
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
J
Java Code Geeks

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром T-TOPS: Как распутать гордиев узел проекта после выхода в прод (меч не понадобится) Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Infrastructure as Code: философия и лучшие практики IaC
2026-04-15 · via Все публикации подряд на Хабре

Время на прочтение6 мин

Охват и читатели8.4K

Кейс

Всем привет, меня зовут Сергей Прощаев. Я Tech Lead и руководитель направления Java и Kotlin разработки в FinTech, а также преподаю на курсах по архитектуре и инфраструктуре в OTUS. В этой статье я хочу поговорить о том, что для многих разработчиков до сих пор остаётся «тёмным лесом» — об Infrastructure as Code (IaC).

Долгое время я, как и многие бэкенд-разработчики, относился к инфраструктуре по остаточному принципу. Есть код на Java, он крутится в контейнере, а уж как он попадает на сервер, как настроен балансировщик и почему вдруг упала база данных в тестовом окружении — это где-то там, за границей зоны ответственности. «Пусть девопсы разбираются».

В сети гуляет поучительная история (или эффективная аллегория) об одном крупном ритейлере, который в разгар ночной распродажи решил быстро обновить микросервис. Деплой шёл по плану, пока кто-то из команды не полез в веб-консоль AWS подправить настройки Security Groups «на лету». Одно неловкое движение — и группа безопасности, отвечавшая за связность десятков сервисов, была удалена.

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

Проблема: инфраструктура как «чёрный ящик» и снежный ком конфигураций

Представьте типичный путь молодого стартапа или даже вполне зрелой команды. Сначала всё просто: один сервер, один файл nginx.conf, один экземпляр базы данных. Настройка производится по SSH: зашёл, подправил конфиг в vim, перезапустил сервис.

Проходит полгода. Серверов становится пять. Потом десять. Появляются очереди, кэш Redis, несколько окружений (dev/stage/prod). В какой-то момент настройка нового стенда превращается в квест: «Ваня помнит, как поднимать кластер Kafka, но Ваня в отпуске. А Маша знает, почему на стейдже в логах пишется ошибка подключения к БД, но Маша уволилась в прошлом квартале».

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

На одном из профильных форумов DevOps-инженер рассказывал о случае в финтех-компании среднего размера. Команде срочно потребовалось развернуть точную копию продакшена для нагрузочного тестирования перед запуском новой функции. Казалось бы, рутинная задача.

Однако реальность оказалась иной: процесс увяз в согласованиях доступа к десяткам параметров, попытках выудить конфигурации из разрозненных чатов и ручном сравнении настроек через AWS Console.

Итог — три недели простоя дорогостоящей команды QA и разработки, пока единственный девопс вручную «пересобирал» окружение по кусочкам, словно археолог, восстанавливающий древний город по черепкам. Это не инженерия, это цифровая археология.

Решение: переход к декларативному управлению и Best Practices

Infrastructure as Code меняет философию. Мы перестаём говорить системе, как что-то сделать (императивно), и начинаем описыватьчто мы хотим получить в итоге (декларативно). И здесь есть чёткий набор практик, которые отделяют «написание скриптов» от настоящей инженерии.

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

Рис. 1 — Жизненный цикл Infrastructure as Code с применением GitOps

Рис. 1 — Жизненный цикл Infrastructure as Code с применением GitOps

Теперь пройдёмся по ключевым узлам, которые делают этот пайплайн не просто картинкой, а эффективным инструментом.

1. Версионирование всего и вся (и никаких «fix_nginx_2_final.conf»)

Первое и железное правило: всё, что касается инфраструктуры, лежит в Git-репозитории. Всё. Файлы Terraform, плейбуки Ansible, Helm-чарты, политики безопасности Open Policy Agent. Рядом с кодом приложения.

Почему это критично? Потому что Git даёт нам audit trail. Если упал продакшн после апдейта, мы не гадаем «кто менял бастионный хост?», а смотрим git log и видим конкретный коммит. Мы можем мгновенно откатить инфраструктуру к последнему стабильному состоянию командой git revert, а не лихорадочно лезть в бэкапы снапшотов.

2. Модульность и DRY (Don't Repeat Yourself)

В разработке мы давно не пишем один гигантский класс на 10 тысяч строк. Мы разбиваем логику на методы и классы. В инфраструктуре — та же история. Я долгое время страдал от «простыней» Terraform-конфигов, где для каждого окружения копипастился блок создания виртуальной машины.

Лучшая практика — создание модулей. Например, модуль aws-web-app, который принимает на вход имя окружения, размер инстанса и домен, а на выходе отдаёт настроенный ASG, Load Balancer и Route53 запись. Это позволяет команде разработки поднимать идентичные окружения одной командой, не зная, сколько там нужно подсетей в VPC.

В одном из проектов внедрение модульной структуры сократило время разворачивания фича-бранча окружения с 40 минут до 7. Разработчик просто пишет в PR: «Мне нужен стенд для задачи JIRA-1234», и CI/CD сам разворачивает ему инфраструктуру из готовых кубиков.

3. Управление состоянием (State) — не кладите грабли в репозиторий

Это место, где оступаются даже опытные команды. Инструменты вроде Terraform хранят state-файл — слепок реального состояния облака. Если его потерять или повредить, Terraform либо попытается пересоздать всё с нуля, либо, что хуже, начнёт думать, что ресурсы есть, а на самом деле их нет.

Золотой стандарт: Remote State с блокировками. Например, хранение terraform.tfstate в S3-совместимом бакете с включённой блокировкой через DynamoDB. Это не просто «рекомендация от вендора». Это страховка от ситуации, когда два инженера одновременно запускают terraform apply и превращают вашу VPC в кашу. Я видел, как из-за отсутствия блокировок была удалена база данных в QA-окружении. К счастью, не прод, но осадочек остался.

Кейс из реальной жизни: как Knight Capital потерял $440 миллионов за 45 минут

Всегда полезно учиться на чужих ошибках, особенно когда цена ошибки — судьба компании. Когда я рассказываю студентам о важности воспроизводимости и идемпотентности в IaC, я всегда вспоминаю историю Knight Capital Group.

В 2012 году эта брокерская фирма готовилась к запуску нового торгового ПО на NYSE. Инженеры решили обновить код вручную на 8 production-серверах. По роковой случайности на одном из серверов забыли скопировать новый код, оставив старый, тестовый алгоритм. Рынок открылся, и в течение 45 минут этот сервер начал скупать и продавать акции с бешеной скоростью, выполняя устаревшие тестовые команды.

Результат? Убыток в $440 миллионов долларов. Компания, существовавшая десятилетиями, рухнула за неполный час. Причина не в сложном баге, а в банальном человеческом факторе — неконсистентном ручном развёртывании. Если бы их инфраструктура разворачивалась как код, с атомарными изменениями и проверками конфигурации, вероятность такого исхода стремилась бы к нулю.

Эта история — мощный аргумент, когда бизнес спрашивает: «А зачем нам тратить время на эти ваши автоматизации? У нас и так всё руками неплохо работает».

Детали, которые отличают игрушечный IaC от промышленного

Нарисовать схему и написать main.tf может каждый. А вот сделать так, чтобы система жила годами и не раздражала команду — это уже мастерство. Вот несколько «мелочей», на которых я обжигался:

  1. Обработка секретов. Никогда, слышите, никогда не храните пароли или API-ключи в variables.tf или в plain-text в Git. Даже в приватном репозитории. Используйте связку: HashiCorp Vault + External Data Source в Terraform или Sealed Secrets в Kubernetes. В одном из моих первых проектов с IaC ключ от AWS Account засветился в истории коммитов публичного форка. Хорошо, что боты AWS быстрее людей — аккаунт заблокировали через 5 минут, мы потеряли вечер на смену ключей, но данные клиентов остались целы. Урок усвоен на всю жизнь.

  2. Тестирование инфраструктурного кода. «Как тестировать YAML?» — спросите вы. Инструментарий уже есть: terraform validate для синтаксиса, tflint для статического анализа, checkov или tfsec для проверки security compliance (например, чтобы случайно не открыть 22-й порт всему миру).

  3. Документация генерируется из кода. Я перестал писать в Confluence описание, какие тэги нужны для каждого инстанса. Вместо этого использую terraform-docs. Он парсит описание переменных прямо из кода и генерит аккуратный README.md. Это смещает ответственность: разработчик меняет код — документация обновляется автоматически.

Рис. 2 — Сравнение подходов: Императивный (ClickOps) vs Декларативный (IaC)

Рис. 2 — Сравнение подходов: Императивный (ClickOps) vs Декларативный (IaC)

Заключение: IaC — это не инструмент, а инженерная культура

Когда я начинал свой путь в IT, мы шутили, что сервер — это не сервер, если на нём не лежит забытый cron-скрипт Васи, который неизвестно что делает, но трогать его страшно. Сейчас, в эпоху облаков и микросервисов, такой подход стоит слишком дорого.

Infrastructure as Code — это не про Terraform или Pulumi. Это про способ мышления. Это дисциплина, которая говорит: «Инфраструктура так же важна, как и код приложения, и заслуживает такого же уважения — код-ревью, тестов и CI/CD».

Если эта тема вам откликнулась и вы хотите перестать бояться консоли AWS или ошибок kubectl apply, я приглашаю вас на курсы по Инфраструктуре в OTUS.

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

Если хотите копнуть тему глубже и посмотреть на инструменты, которые делают этот подход рабочим в боевой среде, приходите на открытые уроки: