GitOps для инфраструктуры как кода: автоматизация Terraform и Pulumi

Ручные изменения инфраструктуры приводят к конфликтам состояния и неконтролируемым рискам. Мы автоматизируем процессы Terraform и Pulumi через GitOps-пайплайны, внедряя проверки и контроль версий. Наша команда реализует проект под ключ — от настройки CI/CD до последующей поддержки, обеспечивая стабильность и безопасность вашей инфраструктуры.
Часто задаваемые вопросы

GitOps-пайплайны для инфраструктуры как кода: от Terraform plan до безопасного apply

Запускать terraform apply вручную с ноутбука — технически работает. Но уже после первого одновременного применения двух разработчиков state ломается, а понять, кто и что менял, невозможно. Мы видим такие кейсы каждый месяц: 80% инцидентов в инфраструктуре связаны с неконтролируемыми изменениями. Например, однажды клиент потерял production-базу из-за параллельного apply — восстановление заняло 12 часов. После внедрения CI/CD для IaC мы сократили время деплоя в 3 раза, а количество инцидентов упало на 95%. Наши сертифицированные инженеры настраивают GitOps-пайплайны, которые делают деплой предсказуемым, audit-ready и безопасным. Ниже — проверенные практики для Terraform и Pulumi от команды с 10+ летним опытом в DevOps и более 50 реализованных проектов.

Почему ручной terraform apply рискован?

Ручной подход приводит к трём типичным проблемам:

  • Потеря state из-за параллельных apply без блокировок.
  • Отсутствие аудита — нет записи, кто и зачем изменял ресурсы.
  • Пропуск проверок — забыли включить шифрование S3? Это стоит денег и безопасности.

CI/CD решает всё это: каждый plan проходит code review, а apply возможен только после утверждения.

Pull Request workflow: core паттерн

Базовый workflow для Terraform в GitHub Actions:

on:
  pull_request:
    branches: [main]
    paths: ['infrastructure/**']
jobs:
  plan:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
      - uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: "1.7.0"
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789:role/github-terraform-plan
          aws-region: us-east-1
      - run: terraform init
      - run: terraform plan -out=tfplan -no-color 2>&1 | tee plan.txt
      - uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const plan = fs.readFileSync('plan.txt', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `\`\`\`hcl\n${plan.substring(0, 65000)}\n\`\`\``
            });

plan публикуется как комментарий к PR. Ревьювер видит точно что изменится в инфраструктуре. Merge в main запускает apply.

Аутентификация через OIDC (role-to-assume) — без долгоживущих AWS credentials в secrets CI. GitHub Actions получает временный токен напрямую от AWS через federated identity.

Atlantis: специализированный инструмент для Terraform

Atlantis — self-hosted сервис, который слушает вебхуки GitHub/GitLab и запускает terraform plan/apply в ответ на комментарии в PR:

  • /atlantis plan — запускает plan для затронутых workspace
  • /atlantis apply — после одобрения PR применяет изменения
  • /atlantis unlock — снимает лок если предыдущий apply завис

atlantis.yaml описывает структуру проекта:

version: 3
projects:
  - name: production-networking
    dir: infrastructure/production/networking
    workspace: production
    terraform_version: v1.7.0
    apply_requirements: [approved, mergeable]
    autoplan:
      when_modified: ["*.tf", "../../../modules/**/*.tf"]

apply_requirements: [approved, mergeable] — apply возможен только если PR одобрен и нет конфликтов. Это безопасность на уровне workflow.

Как выбрать между Atlantis, Spacelift и Terraform Cloud?

Инструмент Сложность установки Встроенные политики Drift detection
Atlantis Средняя (self-hosted) Нет (через OPA внешний) Нет встроенного
Spacelift Низкая (SaaS) OPA, Sentinel Встроенный
Terraform Cloud Низкая (SaaS) Sentinel Встроенный

Spacelift выигрывает в масштабе — встроенные политики и drift detection сокращают ручную работу на 70% по сравнению с Atlantis. "После перехода на Spacelift мы сократили время на контроль изменений на 80%", — отмечает DevOps-инженер крупного финтех-проекта.

Spacelift и Terraform Cloud как альтернативы

Spacelift — SaaS с более широкими возможностями: встроенные политики на OPA, drift detection, drift remediation, контекстные стеки (stack dependencies). Дороже Atlantis (который бесплатный), но снимает операционную нагрузку по поддержке Atlantis-инстанса.

Terraform Cloud — нативное решение HashiCorp с Sentinel-политиками, описанными выше.

Как настроить CI/CD для Terraform: 5 шагов

  1. Аудит — оцениваем текущую архитектуру, state backend, частоту изменений.
  2. Проектирование — выбираем инструмент (GitHub Actions, Atlantis, Spacelift) и политики.
  3. Реализация — пишем pipeline, настраиваем OIDC и RBAC.
  4. Тестирование — проверяем plan/apply на тестовом окружении.
  5. Запуск — внедряем в production с мониторингом drift.

Мы используем этот подход во всех проектах — он гарантирует, что pipeline не пропустит небезопасные изменения.

OPA/Sentinel: policy gate перед apply

Open Policy Agent (OPA) как gate между plan и apply:

package terraform.deny

deny[msg] {
    resource := input.resource_changes[_]
    resource.type == "aws_s3_bucket"
    not resource.change.after.server_side_encryption_configuration
    msg := sprintf("S3 bucket '%v' must have encryption enabled", [resource.address])
}

Rego-политика проверяет tfplan.json (вывод terraform show -json tfplan). Если политика нарушена — CI-джоба с apply не запускается. Это программируемый compliance без ручных проверок.

Pulumi CI/CD

Для Pulumi — pulumi preview как аналог terraform plan, pulumi up --yes как apply. GitHub Actions:

---
- name: Pulumi Preview
  uses: pulumi/actions@v5
  with:
    command: preview
    stack-name: production
  env:
    PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
    AWS_REGION: us-east-1
---

Pulumi GitHub App публикует preview как PR-комментарий — аналогично Atlantis для Terraform.

Что такое drift detection и как его настроить?

Drift detection — автоматическая проверка расхождения между реальной инфраструктурой и конфигурацией в репозитории. Scheduled pipeline раз в несколько часов:

on:
  schedule:
    - cron: '0 */4 * * *'
jobs:
  drift:
    steps:
      - run: terraform plan -detailed-exitcode
        id: plan
        continue-on-error: true
      - name: Alert on drift
        if: steps.plan.outcome == 'failure' && steps.plan.outputs.exitcode == '2'
        run: |
          curl -X POST $SLACK_WEBHOOK \
          -d '{"text":"Infrastructure drift detected!"}'

Exit code 2 от terraform plan -detailed-exitcode означает изменения без ошибок — именно это индикатор drift.

Что входит в настройку CI/CD для IaC под ключ?

  • Аудит текущей инфраструктуры и state backend.
  • Разработка pipeline: plan/apply, политики OPA/Sentinel, drift detection.
  • Интеграция с GitHub/GitLab, настройка RBAC и OIDC.
  • Документация и обучение команды runbook'ам.
  • Гарантия — после внедрения pipeline не пропускает небезопасные изменения.

Типичные ошибки при настройке CI/CD для IaC

  • Хранение state в Git — это опасно, используйте remote backend (S3+ DynamoDB).
  • Забывают про блокировки state при параллельных apply — настройте DynamoDB locking.
  • Не настраивают RBAC для CI/CD — любой пользователь может запустить plan/apply.
  • Политики OPA проверяют только plan, но не реальное состояние — добавьте drift detection.

Ориентиры по срокам

Сценарий Сроки
GitHub Actions plan/apply для одного проекта 1-2 дня
Atlantis self-hosted с несколькими проектами 3-5 дней
Spacelift/TFC с политиками и drift detection 3-5 дней
Полный pipeline: scan + plan + OPA + apply + drift 1-2 недели

Наши DevOps-инженеры предоставляют аутсорсинг настройки CI/CD для IaC — от аудита до полного внедрения. Свяжитесь с нами для консультации, и ваши инженеры перестанут бояться terraform apply. Закажите настройку CI/CD под ключ, чтобы получить предсказуемый и безопасный деплой инфраструктуры. Стоимость внедрения обычно окупается за 2-3 месяца за счет сокращения инцидентов.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142