ОРГАНИЗАЦИЯ INFRASTRUCTURE AS A CODE ПОДХОДА ДЛЯ МУЛЬТИ-РЕГИОНАЛЬНОЙ ИНФРАСТРУКТУРЫ

ESTABLISHING AN INFRASTRUCTURE AS CODE APPROACH FOR MULTI-REGIONAL INFRASTRUCTURE
Цитировать:
Филипченко В.В. ОРГАНИЗАЦИЯ INFRASTRUCTURE AS A CODE ПОДХОДА ДЛЯ МУЛЬТИ-РЕГИОНАЛЬНОЙ ИНФРАСТРУКТУРЫ // Universum: технические науки : электрон. научн. журн. 2025. 9(138). URL: https://7universum.com/ru/tech/archive/item/20839 (дата обращения: 05.12.2025).
Прочитать статью:
DOI - 10.32743/UniTech.2025.138.9.20839

 

АННОТАЦИЯ

В работе рассматриваются подходы к организации мульти-региональной инфраструктуры с использованием концепции Infrastructure as Code (IaC) и Terraform как инструмента реализации. Обосновывается актуальность перехода от монолитного управления ресурсами к распределённой модели, соответствующей региональным облачным ресурсам. В центре внимания — сравнение различных инструментов и методологий: прямое применение Terraform со стратегией разделения state-файлов, использование Atlantis для GitOps-ориентированного CI/CD, Terragrunt как надстройки для управления зависимостями и унификации конфигураций, а также Terraform Cloud (HCP Terraform) с возможностями централизованного менеджмента. Отдельное внимание уделено вопросам интеграции с системами CI/CD (на примере GitHub Actions), обеспечивающими автоматизацию планирования и применения изменений. Представлен всесторонний академический анализ существующих решений с учетом современных трендов облачных технологий, масштаба инфраструктуры и зрелости команды.

ABSTRACT

The paper examines approaches to organizing multi-regional infrastructure using the Infrastructure as Code (IaC) concept and Terraform as an implementation tool. It substantiates the relevance of transitioning from monolithic resource management to a distributed model that aligns with regional cloud resources. The focus is on comparing various tools and methodologies: direct use of Terraform with a state-file separation strategy, using Atlantis for GitOps-oriented CI/CD, Terragrunt as a wrapper for dependency management and configuration standardization, and Terraform Cloud (HCP Terraform) with centralized management capabilities. Special attention is given to integration with CI/CD systems (illustrated with GitHub Actions), which ensures automation of planning and applying changes. A comprehensive academic analysis of existing solutions is presented, taking into account modern cloud technology trends, infrastructure scale, and team maturity.

 

Ключевые слова: Infrastructure as Code, Terraform, региональная инфраструктура, облачные вычисления, Terragrunt, Atlantis, Terraform Cloud, CI/CD, отказоустойчивость.

Keywords: Infrastructure as Code, Terraform, regional infrastructure, cloud computing, Terragrunt, Atlantis, Terraform Cloud, CI/CD, fault tolerance.

 

Введение

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

Исторически управление инфраструктурой сопровождалось большим количеством ручных операций, активным вовлечением команды и приводило к ошибкам, делая масштабирование более сложным, трудоёмким и, как следствие, дорогостоящим. Эти проблемы решаются концепцией инфраструктуры как кода (IaC), которая позволяет описывать инфраструктуру декларативно, хранить ее код в системах контроля версий (например, Git) и использовать автоматизированные процессы доставки через CI/CD. Terraform — один из первых и наиболее стабильных инструментов, зарекомендовавших себя на протяжении многих лет, предоставляющих возможности описания ресурсов различных облачных платформ в рамках одной модели, что сделало его де-факто стандартом в этой области. Однако переход к мульти-региональной архитектуре приводит к ряду дополнительных трудностей, таких как разделение глобальных и региональных компонентов, управление зависимостями между ними и предотвращение дрейфа конфигураций [2]. Для решения этих проблем в инженерной практике используют различные инструменты и методологии. Они включают разделение state-файлов Terraform, использование Terragrunt и Terraform Cloud. Интеграция с CI/CD позволяет автоматизировать процессы планирования и применения изменений, включая механизмы ручного или автоматического утверждения на каждом этапе.

Цель исследования состоит в систематизации и сравнении различных подходов к организации мульти-региональной инфраструктуры, основываясь на концепции Infrastructure as Code и инструменте Terraform.

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

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

Теоретические основы

Современные облачные платформы предоставляют возможность развертывать приложения и сервисы одновременно в нескольких географических регионах. Такая архитектура получила название мульти-региональной инфраструктуры (cross-regional/multi-regional infrastructure). Её ключевая задача — изоляция ресурсов в конкретном географическом регионе (или дата-центре), повышение устойчивости систем к сбоям и обеспечение непрерывности работы при отказах.

В этой связи важными понятиями становятся глобальная и региональная инфраструктуры. Под региональной понимается совокупность вычислительных и сетевых ресурсов, развернутых в конкретном регионе облачного провайдера (на примере Amazon AWS): виртуальные частные сети (VPC), базы данных (RDS), вычислительные мощности (EC2) и др. Глобальные компоненты (например, DNS, CDN, CloudFront, S3 и др.) не имеют региональной привязки и позволяют добиться высокой доступности (high availability, HA) без необходимости регионального разделения.

Классические методы управления инфраструктурой опирались на ручные действия администраторов и не обеспечивали ни воспроизводимость, ни быструю масштабируемость. Для преодоления этих и других ограничений, прямо связанных с вовлечённостью человека, была предложена концепция Infrastructure as Code (IaC). Она заключается в описании инфраструктуры в виде декларативных конфигурационных файлов. Декларативный подход, в отличие от эмпирического, предполагает описание конечного состояния компонентов системы. В данном случае - инфраструктуры. Наиболее распространённой практикой является сохранение описания инфраструктуры в системах контроля версий (Git), наряду с автоматической проверкой изменений и интеграцией в процессы доставки приложений (Continuous Delivery, Continuous Integration или CI/CD [3]).

Terraform — один из наиболее распространённых инструментов реализации IaC. Он предоставляет:

  1. Единый язык описания ресурсов разных провайдеров (HashiCorp Configuration Language — HCL).
  2. возможность управления зависимостями.
  3. поддержку модульности и переиспользования кода.
  4. наличие state-файла, отражающего текущее состояние инфраструктуры.

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

Материалы и методы

Начать обзор доступных вариантов стоит с самого простого подхода, требующего минимального количества ресурсов. Одной из базовых идей при построении мульти-региональной инфраструктуры с использованием Terraform является стратегия разделения state-файлов. В этом случае каждая часть инфраструктуры (глобальная и региональная) управляется своим собственным состоянием, хранящимся в отдельном удалённом хранилище (например, Amazon S3 или HashiCorp Consul) или локально.

Суть заключается в том, что глобальные ресурсы — такие как Route53, CloudFront или централизованное хранилище объектов — управляются одним state-файлом. Зачастую, он небольшой, потому как основное количество ресурсов являются по своей природе региональными. Для каждого региона создаётся отдельный state-файл, в котором описываются такие компоненты, как VPC, базы данных, балансировщики нагрузки и т.д. Естественно, набор ресурсов очень сильно варьируется от проекта, но разделение достаточно чёткое: если ресурс не дублируется в каждом регионе и/или имеет глобальный характер с точки зрения облачного провайдера, то этот ресурс должен принадлежать к глобальному state-файлу. Для более чёткого абстрагирования от понятие state-файла, существует термин стек (stack). Таким образом, инфраструктура проекта разделяется на глобальный и региональные стеки. Данный подход позволяет минимизировать пересечения между регионами и снижает риск того, что ошибка в одном модуле затронет всю систему. Вынесение региональных компонентов в отдельный модуль является очевидным решением и позволяет избавиться от дублирования ресурсов. Общий вид решения представлен на Рисунке 1.

Рисунок 1. Схематическое представление взаимодействия нескольких стеков

 

Преимущества данного решения:

  1. Изоляция изменений. Ошибка в конфигурации одного региона или глобального стека не приводит к сбоям в других.
  2. Идеальная реализация подхода “слабое связывание, сильное зацепление” (low coupling, high cohesion [4]).
  3. Гибкость в управлении. Разные регионы могут обслуживаться независимо друг от друга.
  4. Прозрачность при планировании изменений. Для больших проектов Terraform план может быть огромным и нечитаемым. Разделение на разные стеки позволяет улучшить читаемость, тем самым уменьшая риск ошибок при внесении изменений.

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

С практической точки зрения данная стратегия часто применяется как отправная точка при переходе от монолитной к мульти-региональной архитектуре. Несмотря на то, что она достаточно проста в реализации и не требует внедрения дополнительных инструментов, кроме базового Terraform, правильная организация стеков и конвейера доставки (CI/CD) является критически важной для успешного применения.

Другим достойным подходом к организации мульти-региональной инфраструктуры является использование инструмента Atlantis. Он не заменяет Terraform, а скорее является промежуточным компонентом между Terraform и CI/CD-системой (например, GitHub). В связи с этим его стоит рассматривать именно в контексте конвейера доставки. Atlantis - это открытое решение, ориентированное на GitOps-парадигму [5]: все изменения ресурсов инфраструктуры проходят через pull request. Команды Terraform, такие как plan и apply, выполняются автоматически на основе комментариев, оставленных разработчиками к pull request.

Принцип работы достаточно прост: разработчик открывает pull request с изменениями в Terraform-коде, Atlantis выполняет terraform plan и публикует результат в виде комментария. После проверки ревьюер может подтвердить применение изменений, оставив соответствующий комментарий, — Рисунок 2.

 

Рисунок 2. Основные этапы работы с Atlantis

 

Очень важно отметить, что Atlantis сам по себе не предоставляет какой-либо дополнительной организации для ресурсов. Может использоваться несколько стеков, как описано выше, либо точечное управление ресурсами (т.н. target apply). Atlantis использует файлы конфигурации. Пример такого файла для стеков может выглядеть, как показано на Рисунке 3.

 

Рисунок 3. Пример файла конфигурации Atlantis

 

Важной особенностью Atlantis является то, что он использует специальный механизм блокировок и работает с pull request-ами немного иначе: слияние (merge) выполняется только после успешного применения изменений, а не наоборот, как в привычном подходе, когда Terraform используется напрямую. Это обеспечивает более точное соответствие основной ветки фактическому состоянию инфраструктуры (если применение завершилось с ошибкой, pull request не попадает в основную ветку). В случае неудачного применения pull request остаётся открытым, что позволяет внести исправления или переоткрыть его. Достоинства подхода:

  1. Тесная интеграция с CI/CD конвейерами, прозрачность всех операций.
  2. Более продуманный механизм блокировок, позволяющий основной ветке максимально соответствовать реальному состоянию инфраструктуры.
  3. Удобный аудит, так как вся история и команды запуска фиксируются в pull-request в виде комментариев.
  4. Нет необходимости разделять монолитную инфраструктуру на стеки.

Ограничения Atlantis также заметны. Инструмент не предоставляет расширенных возможностей по оркестрации. Изоляция между региональными ресурсами не такая явная, используется точечное применение (target apply [6]). Такой подход имеет более слабые гарантии. Как уже было сказано, управление Terraform реализовано через комментарии, что может быть не всегда удобно для крупных команд, так как требует ручного вмешательства. 

В контексте мульти-региональных развертываний Atlantis позволяет запускать команды Terraform для отдельных регионов согласно заранее написанному файлу конфигурации, сохраняя изоляцию между ними. Однако сам по себе инструмент не решает задачу разделения инфраструктуры: это по-прежнему остается на уровне Terraform-кода и/или структуры репозитория.
Следующим распространённым вариантом для организации мульти-региональной инфраструктуры является Terragrunt. Он представляет собой надстройку над Terraform, цель которой – упростить организацию кода инфраструктуры и минимизировать дублирование конфигураций. Terragrunt можно рассматривать как “улучшенный” Terraform, который предоставляет много дополнительных функций, о которых будет кратко сказано ниже. Но основная идея в рамках данной статьи заключается в вынесении общих параметров (backend, провайдеры, переменные) в отдельные HCL-файлы. Это позволяет централизованно управлять глобальной и региональной инфраструктурой. Пример такой организации показан на Рисунке 4.

 

Рисунок 4. Пример организации папок проекта для Terragrunt

 

Terragrunt поддерживает команду `run-all` [7], которая запускает plan/apply для всех регионов. Это упрощает настройку пайплайнов и снижает вероятность дрейфа между регионами. Также есть возможность описывать зависимости между директориями прямо в terragrunt.hcl. Обе эти опции, в сочетании с CI/CD-конвейером, дают значительное преимущество перед “классическим” Terraform и упрощают развертывание. Terragrunt предоставляет следующие дополнительные возможности:

  1. Автоматически учитывает зависимости между модулями (например, сначала создаётся VPC, затем RDS).
  2. Возможность выполнять произвольные команды до и после Terraform-операций (например, валидацию политики безопасности).
  3. Обнаружение расхождений между конфигурацией и фактическим состоянием.
  4. Использование Terragrunt особенно оправдано при необходимости поддержки крупных распределённых систем с десятками регионов.

Он также позволяет достичь «слабого связывания, сильного зацепления» (low coupling, high cohesion) за счёт вынесения глобальных и региональных конфигураций в отдельные уровни, примерно так же, как и Terraform, но удобнее. Важно помнить, что Terragrunt требует дополнительных навыков, что может стать барьером для компаний и команд с устоявшейся практикой «чистого» Terraform.

Последним, но очень мощным инструментом является Terraform Cloud (ныне HashiCorp Cloud Platform – HCP Terraform). Это SaaS-сервис компании HashiCorp, предоставляющий централизованную платформу для управления инфраструктурой согласно концепции IaC. В отличие от «чистого» Terraform или Terragrunt, где команды и пайплайны настраиваются самостоятельно, Terraform Cloud берёт на себя ключевые функции: хранение и блокировку состояний, управление политиками, аудит действий пользователей и интеграцию с системами контроля версий.

Terraform Stacks (вместе с Deployment) — это базовая функция Terraform Cloud, пока ещё недоступная в Terraform, предназначенная для упрощения развёртывания и управления инфраструктурой. Stacks вводят новый конфигурационный слой, который располагается над Terraform-модулями и описывается как код. Основное назначение этой функции, согласно документации и пресс-релизам компании, — сценарии развёртывания именно для мульти-региональной инфраструктуры.

Первая часть конфигурационного слоя объявляется в файле с расширением .tfstack.hcl. В нём указываются ресурсы или компоненты, которые должны входить в данный стек, как показано на Рисунке 5. Можно объединять и развёртывать несколько модулей, которые имеют общий жизненный цикл, используя так называемые компоненты внутри стека.

 

Рисунок 5. Файла components.tfstack.hcl

 

Вторая часть задаётся в файле с расширением .tfdeploy.hcl. Она определяет, где и сколько раз следует развернуть инфраструктуру внутри стека, как показано на Рисунке 6. Для каждого экземпляра инфраструктуры добавляется блок deployment с соответствующими входными значениями, после чего Terraform автоматически обеспечит повторяющееся развёртывание этой инфраструктуры.

 

Рисунок 6. Файла .tfdeploy.hcl

 

Дополнительные возможности Terraform Cloud:

  1. Хранение состояния (remote backend). Нет необходимости вручную настраивать S3 + DynamoDB или аналогичные решения.
  2. Блокировка изменений. Исключение параллельных изменений инфраструктуры, предотвращение конфликтов.
  3. Автоматическая проверка конфигурационного дрейфа в рабочих пространствах.
  4. Управление доступом. Ролевая модель (RBAC), интеграция с корпоративными системами аутентификации.
  5. Интеграция с VCS. Автоматический запуск plan и apply при изменении кода в Git-репозитории.

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

С другой стороны, использование Terraform Cloud также связано с ограничениями: требуется перестроить существующие репозитории Terraform, что может быть затратно, а также адаптировать существующие процессы компании или команды. Кроме того, Terraform Cloud менее гибок, чем Terragrunt или Atlantis, в настройке CI/CD-конвейеров, хотя и добавляет много удобных функций. Критически важно упомянуть, что в отличие от предыдущих подходов, Terraform Cloud — это не открытое решение, которое может потребовать выделения больших бюджетов на развертывание и поддержку инфраструктуры.

Результаты и обсуждения

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

Таблица 1.

Сравнение подходов к мульти-региональной инфраструктуре

Критерий

Multi-stack Terraform

Atlantis

Terragrunt

Terraform Cloud/HCP

Управление state

Отдельные .tfstate, вручную

Автоматизация в PR, но state внешний

Автоматизация через HCL

Полностью централизованное

Зависимости

Вручную, terraform_remote_state

Вручную, atlanis.yaml

Встроенные dependency блоки

Управление через Stacks

Повторяемость кода

Высокое дублирование

Высокое дублирование

Минимальное (DRY)

Минимальное

CI/CD интеграция

Сложные пайплайны

Нативный GitOps (PR-комментарии)

Простая интеграция с run-all

Автоматическая связка с VCS

Обнаружения дрифта

Ручная проверка каждого региона

Через pull-request-процессы

для всех регионов через run-all plan

Автоматическая проверка drift

Порог входа

Низкий (чистый Terraform)

Средний (новый инструмент CI/CD)

Высокий (изучение Terragrunt)

Средний

Кому подходит

Малые команды, стартапы

Средние компании, приверженцы GitOps

Средние и крупные компании

Крупные организации (Enterprise, DevSecOps)

 

Заключение

Таким образом, выбор оптимального подхода к организации Infrastructure as Code в мульти-региональных системах определяется масштабом компании и её требованиями. Для небольших команд достаточно multi-stack Terraform, для компаний с акцентом на GitOps-процессы может подойти Atlantis (который не отменяет потенциальную реорганизацию Terraform кода). При большом числе регионов наиболее эффективным является использование Terragrunt, хотя порог входа в него самый высокий. Поэтому он может быть оптимальным выбором на старте из-за отсутствия необходимости миграции. В то же время для крупных предприятий, где важны централизованное управление и аудит, целесообразно внедрение Terraform Cloud/HCP с использованием механизма Stacks.

 

Список литературы:

  1. Михельсон О. Ю. Инфраструктура как код: обзор и применение //Актуальные исследования. – 2023. – Т. 20. – С. 150.
  2. Moses J. MANAGING INFRASTRUCTURE DRIFT USING TERRAFORM IN MULTI-CLOUD ARCHITECTURES.
  3. Zampetti F. et al. CI/CD pipelines evolution and restructuring: A qualitative and quantitative study //2021 IEEE International Conference on Software Maintenance and Evolution (ICSME). – IEEE, 2021. – С. 471-482.
  4. Constantine L. L., Yourdon E. Structured design: fundamentals of a discipline of computer program and systems design //(No Title). – 1978.
  5. Beetz F., Harrer S. Gitops: The evolution of devops? //IEEE software. – 2021. – Т. 39. – №. 4. – С. 70-75.
  6. Официальная документация Terraform URL: https://terraform.io/docs/index.html  (дата обращения: 13.09.2025)
  7. Официальная документация Terragrunt URL: https://terragrunt.gruntwork.io/docs/getting-started/quick-start/ (дата обращения: 13.09.2025)
Информация об авторах

ведущий инженер-программист, Imply Data, США, г. Брейдентон

Staff Software Engineer, Imply Data, USA, Bradenton

Журнал зарегистрирован Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор), регистрационный номер ЭЛ №ФС77-54434 от 17.06.2013
Учредитель журнала - ООО «МЦНО»
Главный редактор - Звездина Марина Юрьевна.
Top