fix: curated PG example — use S3 name not UUID, comment every parameter
This commit is contained in:
@@ -6,20 +6,19 @@
|
||||
|
||||
| Ресурс | Имя в манифесте | Назначение |
|
||||
|--------|----------------|-----------|
|
||||
| `nubes_postgres` | `main_pg` | Кластер PostgreSQL (1 реплика, 500m CPU, 512MB RAM, 10GB диск) |
|
||||
| `nubes_postgres_user` | `app_user` | Пользователь БД с правами `ddl_user` |
|
||||
| `nubes_postgres_database` | `app_db` | База данных, владелец — `app_user` |
|
||||
| `nubes_s3bucket` | `backups` | S3-бакет для хранения бэкапов |
|
||||
| `nubes_postgres` | `main_pg` | Кластер PostgreSQL |
|
||||
| `nubes_postgres_user` | `app_user` | Пользователь БД |
|
||||
| `nubes_postgres_database` | `app_db` | База данных |
|
||||
| `nubes_s3bucket` | `backups` | S3-бакет для бэкапов |
|
||||
|
||||
## Переменные
|
||||
|
||||
Создай `terraform.tfvars`:
|
||||
|
||||
```hcl
|
||||
api_token = "***" # токен из Личного кабинета
|
||||
realm = "k8s-3-sandbox-nubes-ru" # кластер Kubernetes
|
||||
s3_uid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # UUID твоего S3
|
||||
s3_user_uid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # UUID пользователя S3
|
||||
api_token = "***" # токен из Личного кабинета
|
||||
realm = "k8s-3-sandbox-nubes-ru" # кластер Kubernetes (из организации)
|
||||
s3_name = "my-s3" # ИМЯ экземпляра S3 (не UUID!)
|
||||
```
|
||||
|
||||
## Провайдер
|
||||
@@ -34,10 +33,9 @@ terraform {
|
||||
}
|
||||
}
|
||||
|
||||
variable "api_token" { type = string; sensitive = true }
|
||||
variable "realm" { type = string }
|
||||
variable "s3_uid" { type = string }
|
||||
variable "s3_user_uid" { type = string }
|
||||
variable "api_token" { type = string; sensitive = true }
|
||||
variable "realm" { type = string }
|
||||
variable "s3_name" { type = string }
|
||||
|
||||
provider "nubes" {
|
||||
api_token = var.api_token
|
||||
@@ -49,72 +47,77 @@ provider "nubes" {
|
||||
|
||||
```hcl
|
||||
resource "nubes_postgres" "main_pg" {
|
||||
resource_name = "my-postgres"
|
||||
resource_name = "my-postgres" # любое имя
|
||||
|
||||
# На каком кластере Kubernetes развернуть
|
||||
startup_configuration = {
|
||||
resource_realm = var.realm
|
||||
resource_realm = var.realm # имя кластера
|
||||
}
|
||||
|
||||
# Ресурсы пода
|
||||
cluster_configuration = {
|
||||
cpu = 500 # milicores (1000 = 1 ядро)
|
||||
memory = 512 # megabytes
|
||||
replicas = 1 # 1, 3, 5 или 7
|
||||
disk = 10 # gigabytes
|
||||
cpu = 500 # milicores (1000 = 1 ядро)
|
||||
memory = 512 # megabytes
|
||||
replicas = 1 # 1, 3, 5 или 7
|
||||
disk = 10 # gigabytes
|
||||
}
|
||||
|
||||
# Сетевой доступ
|
||||
access_configuration = {
|
||||
master_ip_space = "no-needed"
|
||||
master_access_list = jsonencode(["10.0.0.0/8"])
|
||||
slave_ip_space = "no-needed"
|
||||
slave_access_list = jsonencode([])
|
||||
master_ip_space = "no-needed" # Ip-Space для внешнего IP мастера
|
||||
master_access_list = jsonencode(["10.0.0.0/8"]) # кому доступ к мастеру
|
||||
slave_ip_space = "no-needed" # Ip-Space для внешнего IP слейва
|
||||
slave_access_list = jsonencode([]) # кому доступ к слейву ([] = всем)
|
||||
}
|
||||
|
||||
# Версия и настройки PostgreSQL
|
||||
postgres_configuration = {
|
||||
version = "17"
|
||||
ssl_required = true
|
||||
pooler_master = false
|
||||
pooler_slave = false
|
||||
version = "17" # 16 или 17
|
||||
ssl_required = true # требовать SSL
|
||||
pooler_master = false # PgBouncer для записи
|
||||
pooler_slave = false # PgBouncer для чтения
|
||||
}
|
||||
|
||||
# Резервное копирование
|
||||
backup_configuration = {
|
||||
s3_uid = var.s3_uid
|
||||
retain = 14 # хранить 14 копий
|
||||
schedule = "0 0 * * *" # ежедневно в полночь
|
||||
s3_uid = var.s3_name # ИМЯ S3 (не UUID!)
|
||||
retain = 14 # сколько бэкапов хранить
|
||||
schedule = "0 0 * * *" # cron (ежедневно в полночь)
|
||||
}
|
||||
|
||||
# Автоскейлинг диска
|
||||
autoscale_configuration = {
|
||||
enabled = false
|
||||
schedule = 0
|
||||
percent = 10
|
||||
quota = 100
|
||||
enabled = false # выключен
|
||||
schedule = 0 # час окна (0-23)
|
||||
percent = 10 # % расширения
|
||||
quota = 100 # макс. размер диска (GB)
|
||||
}
|
||||
|
||||
# Mutual TLS
|
||||
mtls_configuration = {
|
||||
type = "off"
|
||||
duration_ca = 175200
|
||||
duration_server = 87600
|
||||
type = "off" # off | manual | auto
|
||||
duration_ca = 175200 # время жизни CA (часы)
|
||||
duration_server = 87600 # время жизни сертификата (часы)
|
||||
}
|
||||
|
||||
operation_timeout = "11m"
|
||||
operation_timeout = "11m" # таймаут операции
|
||||
}
|
||||
```
|
||||
|
||||
## Пользователь и база данных
|
||||
|
||||
```hcl
|
||||
# Пользователь с правами создания БД и ролей
|
||||
resource "nubes_postgres_user" "app_user" {
|
||||
postgres_id = nubes_postgres.main_pg.id
|
||||
username = "app_user"
|
||||
role = "ddl_user" # app_user — только DML; ddl_user — DDL + DML
|
||||
mtls_access = false
|
||||
postgres_id = nubes_postgres.main_pg.id # ссылка на кластер
|
||||
username = "app_user" # имя пользователя
|
||||
role = "ddl_user" # app_user (DML) | ddl_user (DDL)
|
||||
mtls_access = false # mTLS для пользователя
|
||||
}
|
||||
|
||||
# База данных, владелец — созданный выше пользователь
|
||||
resource "nubes_postgres_database" "app_db" {
|
||||
postgres_id = nubes_postgres.main_pg.id
|
||||
db_name = "my_app_db"
|
||||
db_owner = nubes_postgres_user.app_user.username
|
||||
postgres_id = nubes_postgres.main_pg.id # ссылка на кластер
|
||||
db_name = "my_app_db" # имя базы данных
|
||||
db_owner = nubes_postgres_user.app_user.username # владелец
|
||||
}
|
||||
```
|
||||
|
||||
@@ -122,9 +125,9 @@ resource "nubes_postgres_database" "app_db" {
|
||||
|
||||
```hcl
|
||||
resource "nubes_s3bucket" "backups" {
|
||||
resource_name = "pg-backup-bucket"
|
||||
s3_user_uid = var.s3_user_uid
|
||||
bucket_name = "my-app-backups"
|
||||
resource_name = "pg-backup-bucket" # любое имя
|
||||
s3_user_uid = var.s3_name # ИМЯ S3 (не UUID!)
|
||||
bucket_name = "my-app-backups" # имя бакета
|
||||
}
|
||||
```
|
||||
|
||||
@@ -135,4 +138,4 @@ terraform init
|
||||
terraform apply
|
||||
```
|
||||
|
||||
Все четыре ресурса создаются за один `apply`. Порядок не важен — Terraform сам выстроит зависимости: сначала кластер, потом пользователь, потом БД и бакет.
|
||||
Все 4 ресурса за один `apply`. Terraform сам выстроит порядок: кластер → пользователь → БД → бакет.
|
||||
|
||||
Reference in New Issue
Block a user