Главная / Переходы / OpenTofu в GitLab
Конвейер

Изменения инфраструктуры — через merge request в вашем GitLab

Часто инфраструктуру меняют с ноутбуков или держат для этого отдельный сервер Atlantis. GitLab умеет главное сам: хранить состояние, показывать plan в merge request, применять изменения после одобрения и регулярно проверять расхождения. Одной системой меньше, одна модель доступа.

Работает на бесплатной версии GitLab OpenTofu или Terraform Фиксированная цена после замеров
Задача

apply запускают с ноутбуков, а кто что поменял — видно только из чата.

Что делаем

Состояние, plan в каждом merge request, apply после одобрения и проверка расхождений — в GitLab CI.

Результат

Каждое изменение инфраструктуры просмотрено и записано там же, где код.

Для кого

  • Инженеры запускают plan и apply у себя, и об изменениях вы узнаёте после.
  • У вас есть сервер Atlantis, и хочется на одну систему меньше обновлять и защищать.
  • Конвейер был на шаблонах Terraform от GitLab: GitLab их больше не поставляет (документация GitLab).
  • Проверяющие спрашивают, кто согласовал изменение инфраструктуры, а ответ — в переписке.

Варианты без прикрас

ВариантЧто этоЦена вопроса
apply с ноутбуковКаждый инженер запускает plan и apply у себяНет ревью и записи, ключи облака на ноутбуках
AtlantisОткрытый сервер (Apache-2.0), запускает plan и apply из merge requestБесплатно и проверено временем, но это ещё один сервер со своими правами
GitLabХранилище состояния, конвейеры и одобрения, которые у вас уже естьМеньше расширенных функций, зато всё в одном месте

Как это устроено в GitLab

Состояние

Состояние OpenTofu хранится в GitLab: с блокировками, версиями и шифрованием на диске, на всех редакциях, включая бесплатную. По желанию включаем шифрование самого состояния в OpenTofu ключами из OpenBao.

Конвейер

Компонент OpenTofu для GitLab CI (лицензия MIT) копируем в ваш GitLab и закрепляем версию. Провайдеры берутся с зеркала, а не из закрытых для РФ реестров.

Ревью и применение

plan — в каждом merge request. apply — только после слияния, из защищённых веток. Файлы plan могут содержать секреты, поэтому закрываем их от ролей ниже Developer.

Одобрения

В GitLab Premium и Ultimate — обязательные одобрения от названных групп. В бесплатной версии одобрения не обязательны, поэтому apply разрешаем только мейнтейнерам через защищённые ветки.

Расхождения

Конвейер по расписанию запускает plan и сообщает команде о любом отличии реальности от кода.

Для госсистем

Приказ ФСТЭК № 117 требует исключать несанкционированное изменение настроек и обнаруживать такие изменения с выяснением причин (п. 37). Изменения только через merge request и регулярная проверка расхождений дают и то и другое.

Возможности GitLab — по документации GitLab (состояние, одобрения). Если у вас AppSec.Code, что из этого доступно в нём, проверяем на замерах.

Как проходит проект

  1. Шаг 1 · 1–3 дня

    Замеры

    Проекты, окружения, как сейчас применяются изменения, кто имеет доступ. Фиксируем цену.

  2. Шаг 2

    Пилот

    Шаблон конвейера, состояние и правила доступа на одном проекте.

  3. Шаг 3

    Остальные проекты

    Переносим партиями: состояние переезжает в GitLab, после переноса plan пустой. Старый сервер выключаем в конце.

  4. Шаг 4

    Передача

    Короткая инструкция для инженеров и сессия с командой.

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

Что нужно от вас

  • Права мейнтейнера в группах GitLab, которые входят в работу.
  • Ключи облака по окружениям или разрешение их создать.
  • Список, кто где может применять изменения.

Что не входит

  • Переписывание кода инфраструктуры.
  • Установка самого GitLab — считаем отдельно, если нужна.

Вопросы и ответы

Atlantis — это плохо?

Нет. Он открытый, бесплатный и широко используется. В GitLab переходят, чтобы обслуживать на одну систему меньше и держать права в одном месте.

Нужен GitLab Premium?

Нет. Premium добавляет обязательные одобрения; в бесплатной версии ограничиваем, кто может применять изменения, через защищённые ветки и роли.

А если мы на Terraform, а не на OpenTofu?

Тот же конвейер работает и с Terraform. По умолчанию ставим OpenTofu, потому что он под открытой лицензией. Про переход →

Как у вас меняют инфраструктуру сейчас?

С ноутбуков, через Atlantis или уже из GitLab; сколько проектов и окружений; где лежит состояние. Ответим с планом.

Обсудить проект