Go to file
kochetkov.s cd68e73e40 feat: Add Terraform infrastructure for pulse project
- Add modules: yc-s3, yc-postgresql, k8s-namespace, k8s-secrets
- Add live configuration for stage environment
- Add GitLab CI with downstream pipelines
- Implement best practices from theory.md
2026-01-19 15:15:14 +03:00
live feat: Add Terraform infrastructure for pulse project 2026-01-19 15:15:14 +03:00
modules feat: Add Terraform infrastructure for pulse project 2026-01-19 15:15:14 +03:00
scripts feat: Add Terraform infrastructure for pulse project 2026-01-19 15:15:14 +03:00
.gitignore feat: Add Terraform infrastructure for pulse project 2026-01-19 15:15:14 +03:00
.gitlab-ci.yml feat: Add Terraform infrastructure for pulse project 2026-01-19 15:15:14 +03:00
README.md feat: Add Terraform infrastructure for pulse project 2026-01-19 15:15:14 +03:00
theory.md feat: Add Terraform infrastructure for pulse project 2026-01-19 15:15:14 +03:00

Terraform Infrastructure for Pulse Project

Этот репозиторий содержит инфраструктуру как код (IaC) для проекта Pulse, развернутого в Yandex Cloud.

Структура репозитория

.
├── modules/              # Переиспользуемые Terraform модули
│   ├── yc-s3/           # Модуль для создания S3 бакета
│   ├── yc-postgresql/   # Модуль для создания PostgreSQL кластера
│   ├── k8s-namespace/   # Модуль для создания Kubernetes namespace
│   └── k8s-secrets/     # Модуль для создания Kubernetes секретов
├── live/                # Живая инфраструктура
│   ├── terragrunt.hcl   # Глобальная конфигурация Terragrunt
│   ├── stage/           # Окружение stage
│   │   ├── env.hcl      # Конфигурация окружения
│   │   ├── namespace/   # Namespace pulse
│   │   ├── s3/          # S3 бакет pulse
│   │   ├── postgresql/  # PostgreSQL база данных
│   │   └── secrets/      # Kubernetes секреты
│   ├── prod/            # Окружение production
│   └── preprod/         # Окружение preprod
├── scripts/             # Вспомогательные скрипты
│   └── generate-pipeline.sh  # Генератор GitLab CI пайплайна
└── .gitlab-ci.yml       # Основной GitLab CI конфигурация

Требования

  • Terraform >= 1.0
  • Terragrunt >= 0.50.0
  • Доступ к Yandex Cloud
  • Доступ к Kubernetes кластеру

Переменные окружения

Для работы с инфраструктурой необходимо установить следующие переменные окружения:

Yandex Cloud

  • YC_TOKEN - токен для доступа к Yandex Cloud API
  • YC_CLOUD_ID - ID облака
  • YC_FOLDER_ID - ID каталога (или YC_STAGE_FOLDER_ID, YC_PROD_FOLDER_ID, YC_PREPROD_FOLDER_ID)

Terraform State

  • TF_STATE_BUCKET - имя S3 бакета для хранения состояния Terraform
  • TF_STATE_DYNAMODB_ENDPOINT - endpoint YDB для блокировок состояния
  • TF_STATE_DYNAMODB_TABLE - имя таблицы YDB для блокировок

Kubernetes

  • KUBECONFIG - путь к конфигурации Kubernetes (по умолчанию ~/.kube/config)
  • KUBE_CONTEXT - контекст Kubernetes (опционально)

Docker Registry

  • DOCKER_REGISTRY_URL - URL Docker registry (по умолчанию cr.yandex)
  • DOCKER_REGISTRY_USERNAME - имя пользователя Docker registry
  • DOCKER_REGISTRY_PASSWORD - пароль или токен Docker registry

Сеть

  • YC_NETWORK_ID - ID сети для PostgreSQL
  • YC_SUBNET_ID - ID подсети для PostgreSQL

Использование

Локальная разработка

  1. Перейдите в директорию нужного компонента:
cd live/stage/namespace
  1. Инициализируйте Terragrunt:
terragrunt init
  1. Просмотрите план изменений:
terragrunt plan
  1. Примените изменения:
terragrunt apply

Развертывание всех компонентов

Для развертывания всех компонентов окружения используйте:

cd live/stage
terragrunt run-all apply

GitLab CI

Проект использует динамическую генерацию GitLab CI пайплайнов через downstream pipelines. При каждом коммите:

  1. Запускается джоба generate-pipeline, которая сканирует структуру live/ и создает джобы для каждого компонента
  2. Запускается downstream пайплайн с сгенерированными джобами

Для каждого компонента создаются три джобы:

  • validate-{env}-{component} - валидация конфигурации
  • plan-{env}-{component} - планирование изменений
  • apply-{env}-{component} - применение изменений (manual для prod)

Созданные ресурсы

Stage окружение

  • Namespace: pulse в Kubernetes
  • S3 бакет: pulse с публичным доступом
  • PostgreSQL: кластер pulse-pg-stage с базой pulse_db и пользователем pulse
  • Секреты Kubernetes:
    • dockerhub - доступ к Yandex Container Registry
    • pulse-s3-secret - ключи доступа к S3
    • pulse-postgresql-secret - параметры подключения к PostgreSQL

Безопасность

⚠️ Важно: Все секреты (пароли, ключи доступа) хранятся в Terraform state в открытом виде. Убедитесь, что:

  • Бэкенд для state зашифрован (AES-256)
  • Доступ к state строго ограничен
  • Используется блокировка состояния через YDB

Лицензия

Внутренний проект компании.