Files
tf_provider/docs/30_registry/resources/postgres_example.md
T

3.6 KiB

Resource nubes_postgres

Service ID: 90

Service Name: PostgreSQL

Manual | Create params | Modify params | Output params | Operations | Example

Copy-ready manifest (postgres_main.tf)

terraform {
  required_providers {
    nubes = {
      source  = "terra.k8c.ru/nubes-test/nubes"
      version = "5.0.57"
    }
  }
}

variable "api_token" {
  type      = string
  sensitive = true
}
variable "s3_uid" {
  type = string
}
variable "realm" {
  type = string
}

provider "nubes" {
  api_token    = var.api_token
  api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
}

# =============================================================================
# PostgreSQL — основной ресурс
# =============================================================================
resource "nubes_postgres" "baza" {
  resource_name = "pg-my-instance"

  # Платформа развёртывания
  startup_configuration = jsonencode({
    resourceRealm = var.realm
  })

  # Размер кластера
  cluster_configuration = jsonencode({
    cpu      = "500"
    memory   = "512"
    replicas = "1"
    disk     = "10"
  })

  # Сетевой доступ
  access_configuration = jsonencode({
    masterIpSpace    = "no-needed"
    masterAccessList = []
    slaveIpSpace     = "no-needed"
    slaveAccessList  = []
  })

  # Параметры PostgreSQL
  postgres_configuration = jsonencode({
    version      = "17"
    sslRequired  = true
    poolerMaster = false
    poolerSlave  = false
  })

  # Доп. параметры postgresql.conf (опционально)
  postgres_conf = jsonencode([
    {
      paramName  = "log_connections"
      paramValue = "''"
    }
  ])

  # Резервное копирование
  backup_configuration = jsonencode({
    s3Uid    = var.s3_uid
    retain   = "7"
    schedule = "0 0 * * *"
  })

  # Автоскейлинг
  autoscale_configuration = jsonencode({
    enabled  = false
    schedule = "0"
    percent  = "10"
    quota    = "100"
  })

  operation_timeout        = "11m"
  adopt_existing_on_create = true
}

# =============================================================================
# Пользователь базы данных
# =============================================================================
resource "nubes_postgres_user" "app_user" {
  postgres_id              = nubes_postgres.baza.id
  username                 = "myapp"
  role                     = "app_user"
  adopt_existing_on_create = true
}

# =============================================================================
# База данных
# =============================================================================
resource "nubes_postgres_database" "app_db" {
  postgres_id              = nubes_postgres.baza.id
  db_name                  = "myappdb"
  db_owner                 = nubes_postgres_user.app_user.username
  adopt_existing_on_create = true
}

Outputs usage

# Выходные параметры можно использовать как
nubes_postgres.baza.state_params["имя_ключа"]
nubes_postgres.baza.state_out["имя_ключа"]
nubes_postgres.baza.state_params_flat["имя_ключа"]
nubes_postgres.baza.state_out_flat["имя_ключа"]
nubes_postgres.baza.vault_secrets["имя_ключа"]
nubes_postgres.baza.vault_url
nubes_postgres.baza.vault_user_path
nubes_postgres.baza.vault_fields

terraform.tfvars

api_token = "ваш_токен"
s3_uid    = "UUID-S3-Object-Storage"
realm     = "k8s-3-sandbox-nubes-ru"