Skip to content

Resource nubes_postgres · v2.1.0 · Service ID: 90 · Service Name: PostgreSQL

Manual · Create params · Modify params · Output params · Operations · Example

Минимальный пример (только обязательные параметры)

terraform {
  required_providers {
    nubes = {
      source  = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes"
      version = "2.1.0"
    }
  }
}

provider "nubes" {
  api_token    = "***"
  api_endpoint = "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc"
}
resource "nubes_postgres" "baza" {
  resource_name = "my-postgres"

  cluster_configuration = {
    cpu = 500 # Указывается в Milicores `1000` Mili == `1` Ядро
    memory = 512 # Указывается в Megabytes
    replicas = 1
    disk = 10 # Указывается в GIGAbytes
  }
  startup_configuration = {
    resource_realm = "TODO" # Кластер Kubernetes, на котором будет развернут экземпляр
  }
  access_configuration = {
    master_ip_space = "TODO" # Из какого Ip-Space резервировать внешний IP Список предоставляется из Организации, в котором развёрнута ресурсная платформа
    master_access_list = jsonencode([]) # Необходимо настраивать, когда зарезервирован внешний адрес Если передан пустой массив, доступ выделяется всем
    slave_ip_space = "TODO" # Из какого Ip-Space резервировать внешний IP Список предоставляется из Организации, в котором развёрнута ресурсная платформа
    slave_access_list = jsonencode([]) # Необходимо настраивать, когда зарезервирован внешний адрес Если передан пустой массив, доступ выделяется всем
  }
  postgres_configuration = {
    version = "17"
    pooler_master = false # Включает pgPooler (на запись). Будет создан новый под Размер пода **200m/400Mi**
    pooler_slave = false # Включает pgPooler (на чтение). Будет создан новый под Размер пода **200m/400Mi**
    ssl_required = true # По умолчанию подключение обязательное (sslmode=require)
  }
  backup_configuration = {
    s3_uid = "00000000-0000-0000-0000-000000000000" # Экземпляр S3 обязателен
    retain = 7 # Подразумевается количество **полных бэкапов** Простой пример: - Бэкап создаётся каждый день - Кол-во инкрементов - 6 - Кол-во бэкапов - 3
    schedule = "0 0 * * *"
    increment_count = 0
  }
  autoscale_configuration = {
    enabled = false # Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
    schedule = 0 # Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
    quota = 100 # До какого размера возможно увеличивать диск, когда включен Autoscale
    percent = 10 # Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема Минимальный размер на который расширяется - **1Gb**
  }
}
Полный пример (все параметры, включая значения по умолчанию)
terraform {
  required_providers {
    nubes = {
      source  = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes"
      version = "2.1.0"
    }
  }
}

# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
  api_token    = "token_***"
  api_endpoint = "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc"
}
resource "nubes_postgres" "baza" {
  resource_name = "TODO"

  cluster_configuration = {
    cpu = 500 # Указывается в Milicores `1000` Mili == `1` Ядро
    memory = 512 # Указывается в Megabytes
    replicas = 1
    disk = 10 # Указывается в GIGAbytes
  }
  startup_configuration = {
    resource_realm = "TODO" # Кластер Kubernetes, на котором будет развернут экземпляр
  }
  access_configuration = {
    master_ip_space = "TODO" # Из какого Ip-Space резервировать внешний IP Список предоставляется из Организации, в котором развёрнута ресурсная платформа
    master_access_list = jsonencode([]) # Необходимо настраивать, когда зарезервирован внешний адрес Если передан пустой массив, доступ выделяется всем
    slave_ip_space = "TODO" # Из какого Ip-Space резервировать внешний IP Список предоставляется из Организации, в котором развёрнута ресурсная платформа
    slave_access_list = jsonencode([]) # Необходимо настраивать, когда зарезервирован внешний адрес Если передан пустой массив, доступ выделяется всем
  }
  postgres_configuration = {
    version = "17"
    pooler_master = false # Включает pgPooler (на запись). Будет создан новый под Размер пода **200m/400Mi**
    pooler_slave = false # Включает pgPooler (на чтение). Будет создан новый под Размер пода **200m/400Mi**
    ssl_required = true # По умолчанию подключение обязательное (sslmode=require)
  }
  backup_configuration = {
    s3_uid = "00000000-0000-0000-0000-000000000000" # Экземпляр S3 обязателен
    retain = 7 # Подразумевается количество **полных бэкапов** Простой пример: - Бэкап создаётся каждый день - Кол-во инкрементов - 6 - Кол-во бэкапов - 3
    schedule = "0 0 * * *"
    increment_count = 0
  }
  autoscale_configuration = {
    enabled = false # Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
    schedule = 0 # Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
    quota = 100 # До какого размера возможно увеличивать диск, когда включен Autoscale
    percent = 10 # Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема Минимальный размер на который расширяется - **1Gb**
  }

  # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте
  mtls_configuration = {
    type = "off" # `off` - Настройка MTLS производиться не будет `manual` - После создания кластера в полях данных будет запрос на создание сертификата. **Вам необходимо будет выписать сертификат через вашу CA** и уже после включить через операцию **modify** режим MTLS `auto` - Сертификаты будут созданы через Cert-Manager Режимы **auto** и **manual** требует включить настройку `Включить sslMode` - **true** MTLS в режиме **auto** будет работать сразу, в режиме **manual** только после того как будет предоставлен **CA** и **Сертификат сервера**
    duration_ca = 175200 # Указывается в **часах** Необходимо настраивать, когда параметр `Режим настройки` - **auto**
    duration_server = 43800 # Указывается в **часах** Не может быть больше чем время жизни СА Обновляется **раз в год**, если выставлено значение **более 2 лет** Обновляется **раз в пол года**, если выставлено значение **менее 2 лет** Необходимо настраивать, когда параметр `Режим настройки` - **auto**
    cert_ca = "TODO"
    cert_server = "TODO"
  }
}

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

# Выходные параметры можно использовать как
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

Реальные ключи из облака

# externalConnect = nubes_postgres.baza.state_out_flat["externalConnect"]
# externalConnect.master = nubes_postgres.baza.state_out_flat["externalConnect.master"]
# externalConnect.master.fqdn = nubes_postgres.baza.state_out_flat["externalConnect.master.fqdn"]
# externalConnect.master.ip = nubes_postgres.baza.state_out_flat["externalConnect.master.ip"]
# externalConnect.master.isExternal = nubes_postgres.baza.state_out_flat["externalConnect.master.isExternal"]
# externalConnect.master.uuid = nubes_postgres.baza.state_out_flat["externalConnect.master.uuid"]
# externalConnect.slave = nubes_postgres.baza.state_out_flat["externalConnect.slave"]
# externalConnect.slave.fqdn = nubes_postgres.baza.state_out_flat["externalConnect.slave.fqdn"]
# externalConnect.slave.ip = nubes_postgres.baza.state_out_flat["externalConnect.slave.ip"]
# externalConnect.slave.isExternal = nubes_postgres.baza.state_out_flat["externalConnect.slave.isExternal"]
# externalConnect.slave.uuid = nubes_postgres.baza.state_out_flat["externalConnect.slave.uuid"]
# internalConnect = nubes_postgres.baza.state_out_flat["internalConnect"]
# internalConnect.master = nubes_postgres.baza.state_out_flat["internalConnect.master"]
# internalConnect.slave = nubes_postgres.baza.state_out_flat["internalConnect.slave"]
# monitoring = nubes_postgres.baza.state_out_flat["monitoring"]
# monitoring.allDashboards = nubes_postgres.baza.state_out_flat["monitoring.allDashboards"]
# monitoring.base = nubes_postgres.baza.state_out_flat["monitoring.base"]
# monitoring.base.url = nubes_postgres.baza.state_out_flat["monitoring.base.url"]
# monitoring.k8spostgresql = nubes_postgres.baza.state_out_flat["monitoring.k8spostgresql"]
# monitoring.k8spostgresql.url = nubes_postgres.baza.state_out_flat["monitoring.k8spostgresql.url"]
# monitoring.k8spostgresqlbackup = nubes_postgres.baza.state_out_flat["monitoring.k8spostgresqlbackup"]
# monitoring.k8spostgresqlbackup.url = nubes_postgres.baza.state_out_flat["monitoring.k8spostgresqlbackup.url"]
# monitoring.loki = nubes_postgres.baza.state_out_flat["monitoring.loki"]
# monitoring.loki.url = nubes_postgres.baza.state_out_flat["monitoring.loki.url"]
# adminPass = nubes_postgres.baza.vault_secrets["adminPass"]
# adminUser = nubes_postgres.baza.vault_secrets["adminUser"]
# standbyPass = nubes_postgres.baza.vault_secrets["standbyPass"]
# standbyUser = nubes_postgres.baza.vault_secrets["standbyUser"]