mirror of
https://gitlab.sarex.io/infra/terraform-contour-mirror.git
synced 2026-08-05 18:31:00 +03:00
| live | ||
| modules | ||
| scripts | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| README.md | ||
| theory.md | ||
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 APIYC_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 бакета для хранения состояния TerraformTF_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 registryDOCKER_REGISTRY_PASSWORD- пароль или токен Docker registry
Сеть
YC_NETWORK_ID- ID сети для PostgreSQLYC_SUBNET_ID- ID подсети для PostgreSQL
Использование
Локальная разработка
- Перейдите в директорию нужного компонента:
cd live/stage/namespace
- Инициализируйте Terragrunt:
terragrunt init
- Просмотрите план изменений:
terragrunt plan
- Примените изменения:
terragrunt apply
Развертывание всех компонентов
Для развертывания всех компонентов окружения используйте:
cd live/stage
terragrunt run-all apply
GitLab CI
Проект использует динамическую генерацию GitLab CI пайплайнов через downstream pipelines. При каждом коммите:
- Запускается джоба
generate-pipeline, которая сканирует структуруlive/и создает джобы для каждого компонента - Запускается 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 Registrypulse-s3-secret- ключи доступа к S3pulse-postgresql-secret- параметры подключения к PostgreSQL
Безопасность
⚠️ Важно: Все секреты (пароли, ключи доступа) хранятся в Terraform state в открытом виде. Убедитесь, что:
- Бэкенд для state зашифрован (AES-256)
- Доступ к state строго ограничен
- Используется блокировка состояния через YDB
Лицензия
Внутренний проект компании.