mirror of
https://gitlab.sarex.io/infra/terraform-contour-mirror.git
synced 2026-08-06 02:31:35 +03:00
- 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
131 lines
5.5 KiB
Markdown
131 lines
5.5 KiB
Markdown
# 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. Перейдите в директорию нужного компонента:
|
||
```bash
|
||
cd live/stage/namespace
|
||
```
|
||
|
||
2. Инициализируйте Terragrunt:
|
||
```bash
|
||
terragrunt init
|
||
```
|
||
|
||
3. Просмотрите план изменений:
|
||
```bash
|
||
terragrunt plan
|
||
```
|
||
|
||
4. Примените изменения:
|
||
```bash
|
||
terragrunt apply
|
||
```
|
||
|
||
### Развертывание всех компонентов
|
||
|
||
Для развертывания всех компонентов окружения используйте:
|
||
|
||
```bash
|
||
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
|
||
|
||
## Лицензия
|
||
|
||
Внутренний проект компании.
|