Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
    • Cloud Interconnect
    • Cloud Backup
    • Cloud Registry
    • Yandex AI Studio
    • Compute Cloud
    • Object Storage
    • Managed Service for Kubernetes®
    • Yandex BareMetal
    • Smart Web Security
    • Security Deck
    • Managed Service for PostgreSQL
    • Managed Service for ClickHouse®
    • Monium
    • Cloud CDN
    • Network Load Balancer
    • Virtual Private Cloud
    • Cloud DNS
    • Application Load Balancer
    • Yandex Cloud Video
    • Stackland
    • Yandex Cloud Router
    • Yandex Managed Service for Trino
    • Managed Service for MySQL®
    • Managed Service for Valkey™
    • Managed Service for Apache Spark™
    • Yandex StoreDoc
    • Managed Service for OpenSearch
    • Managed Service for Apache Kafka®
    • Data Transfer
    • Yandex MPP Analytics Engine for PostgreSQL
    • Yandex Managed Service for Apache Airflow®
    • Data Processing
    • Yandex MetaData Hub
    • Managed Service for YDB
    • Managed Service for Sharded PostgreSQL
    • Managed Service for YTsaurus
    • Yandex WebSQL
    • DataLens
    • Yandex Search API
    • SpeechSense
    • SpeechKit
    • DataSphere
    • Vision OCR
    • Translate
    • VibeCraft
    • Yandex Cloud Detection and Response
    • Yandex Identity Hub
    • Key Management Service
    • Certificate Manager
    • Yandex Lockbox
    • Audit Trails
    • SmartCaptcha
    • GOST Gateway
    • Yandex SIEM
    • SourceCraft Code Assistant
    • Container Registry
    • Managed Service for GitLab
    • SourceCraft
    • Managed Service for Prometheus®
    • Cloud Functions
    • API Gateway
    • Yandex Cloud Postbox
    • Message Queue
    • IoT Core
    • Data Streams
    • Serverless Containers
    • Cloud Notification Service
    • Identity and Access Management
    • Yandex Cloud Console
    • Resource Manager
    • Yandex Cloud Billing
    • Yandex Cloud Quota Manager
    • Cloud Apps
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Yandex Cloud Trust
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
  • Кейсы
  • Документация
  • Блог
Сделано на Gravity UI
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Yandex Managed Service for Sharded PostgreSQL
  • Начало работы
    • Все инструкции
    • Получение информации об имеющихся кластерах
    • Создание кластера
    • Изменение кластера
    • Управление хостами кластера
    • Управление шардами
    • Подключение к базе данных
    • Управление доступом к кластеру
    • Управление резервными копиями
    • Техническое обслуживание
    • Просмотр логов кластера
    • Мониторинг состояния кластера и хостов
    • Управление пользователями
    • Управление базами данных
    • Удаление кластера
    • Обновление цепочки TLS-сертификатов
  • Управление доступом
  • Инспекции и рекомендации
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений

В этой статье:

  • Роли для создания кластера
  • Создать кластер
  • Примеры
  • Создание кластера со стандартным шардированием
  • Создание кластера с расширенным шардированием
  1. Пошаговые инструкции
  2. Создание кластера

Создание кластера Sharded PostgreSQL

Статья создана
Yandex Cloud
Открыть в Markdown
  • Роли для создания кластера
  • Создать кластер
  • Примеры
    • Создание кластера со стандартным шардированием
    • Создание кластера с расширенным шардированием

Роли для создания кластераРоли для создания кластера

Для создания кластера Managed Service for Sharded PostgreSQL и работы с ним вашему аккаунту в Yandex Cloud нужны роли:

  • managed-spqr.editor или выше — чтобы создать кластер;

  • vpc.user — чтобы работать с сетью кластера;

  • mdb.viewer — чтобы просматривать кластеры управляемых баз данных (MDB) на дашборде в консоли управления.

О назначении ролей читайте в документации Yandex Identity and Access Management.

Создать кластерСоздать кластер

Консоль управления
CLI
Terraform
REST API
gRPC API
  1. В консоли управления выберите каталог, в котором нужно создать кластер Sharded PostgreSQL.

  2. Перейдите в сервис Yandex Managed Service for Sharded PostgreSQL.

  3. Нажмите кнопку Создать кластер.

  4. В блоке Базовые параметры:

    1. Задайте имя кластера. Имя должно быть уникальным в рамках каталога.

    2. (Опционально) Введите описание кластера.

    3. (Опционально) Создайте метки:

      1. Нажмите кнопку Добавить метку.
      2. Введите метку в формате ключ: значение.
      3. Нажмите Enter.
    4. Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):

      • PRODUCTION — для стабильных версий ваших приложений.
      • PRESTABLE — для тестирования. Prestable-окружение аналогично Production-окружению, и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
    5. Выберите тип шардирования:

      • Стандартное — кластер будет состоять только из инфраструктурных хостов.
      • Расширенное — кластер будет состоять только из хостов-роутеров и хостов-координаторов.
  5. В блоке Сетевые настройки выберите сеть и группы безопасности для кластера.

    Важно

    Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт 6432.

  6. Задайте конфигурацию вычислительных ресурсов:

    • Для стандартного шардирования задайте в блоке Инфраструктура конфигурацию инфраструктурных хостов.

    • Для расширенного шардирования задайте в блоке Роутер конфигурацию хостов-роутеров.

      В блоке Координатор задайте конфигурацию хостов-координаторов.

    Чтобы задать конфигурацию вычислительных ресурсов:

    1. В поле Платформа выберите платформу.

    2. Укажите Тип виртуальной машины, на которой будут развернуты хосты.

    3. Выберите Класс хоста.

    4. В блоке Хранилище выберите тип диска и укажите размер хранилища.

    5. В блоке Хосты:

      1. Нажмите кнопку Добавить хост, чтобы добавить нужное количество хостов, создаваемых вместе с кластером Sharded PostgreSQL.

      2. Нажмите на значок и укажите для каждого хоста:

        • Зону доступности.
        • Подсеть — по умолчанию каждый хост создается в отдельной подсети.
        • Опцию Публичный доступ, если хост должен быть доступен извне Yandex Cloud.

      После создания кластера Sharded PostgreSQL в него можно добавить дополнительные хосты, если для этого достаточно ресурсов каталога.

  7. В блоке База данных укажите параметры БД, в которой можно выполнять запросы к таблицам на шардах. Подробнее о подключении к БД.

    • Имя БД. Допустимая длина — от 1 до 63 символов. Может содержать строчные и прописные буквы латинского алфавита, цифры, нижние подчеркивания и дефисы.

    • Имя пользователя. Допустимая длина — от 1 до 63 символов. Может содержать строчные и прописные буквы латинского алфавита, цифры, нижние подчеркивания и дефисы, но не может начинаться с дефиса.

    • Пароль пользователя. Допустимая длина — от 8 до 128 символов.

  8. Задайте дополнительные настройки кластера:

    • Минимальный уровень логирования — в журнал выполнения будут записываться логи указанного уровня и выше. Доступные уровни — DEBUG, INFO, WARN, ERROR, FATAL и PANIC. Уровень по умолчанию — INFO.

    • Начало резервного копирования (UTC) — промежуток времени, в течение которого начинается резервное копирование кластера. Время указывается по UTC в 24-часовом формате. По умолчанию — 22:00 - 23:00 UTC.

    • Срок хранения автоматических резервных копий, дней — автоматические резервные копии будут храниться указанное количество дней. По умолчанию — 7 дней.

    • Обслуживание — настройки времени технического обслуживания:

      • Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт В любое время (по умолчанию).
      • Чтобы указать предпочтительное время начала обслуживания, выберите пункт По расписанию и укажите день недели и интервал времени по UTC. Например, можно выбрать время, когда кластер наименее загружен.

      Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать обновление СУБД, применение патчей и т. д.

    • Защита от удаления — управляет защитой кластера от непреднамеренного удаления.

      После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.

      Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

  9. Чтобы задать настройки СУБД уровня кластера, в блоке Настройки СУБД нажмите кнопку Настроить.

  10. Нажмите кнопку Создать кластер.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

Чтобы создать кластер Managed Service for Sharded PostgreSQL:

  1. Посмотрите описание команды CLI для создания кластера:

    yc managed-sharded-postgresql cluster create --help
    
  2. Укажите параметры кластера в команде создания (в примере приведены не все параметры):

    Для кластера со стандартным шардированием
    yc managed-sharded-postgresql cluster create \
       --name <имя_кластера> \
       --environment <окружение> \
       --network-name <имя_сети> \
       --security-group-ids <идентификаторы_групп_безопасности> \
       --host type=infra,`
             `zone-id=<зона_доступности>,`
             `subnet-id=<идентификатор_подсети>,`
             `assign-public-ip=<разрешить_публичный_доступ_к_хосту> \
       --infra-resource-preset <класс_хостов_INFRA> \
       --infra-disk-size <размер_хранилища_ГБ> \
       --infra-disk-type <тип_диска> \
       --database name=<имя_БД> \
       --user name=<имя_пользователя>,`
             `password=<пароль>,`
             `permission=<имя_БД>,`
             `connection-limit=<количество_подключений_для_пользователя>,`
             `connection-retries=<количество_повторных_попыток_соединения> \
       --deletion-protection=<защитить_кластер_от_удаления>
    
    Для кластера с расширенным шардированием
    yc managed-sharded-postgresql cluster create \
       --name <имя_кластера> \
       --environment <окружение> \
       --network-name <имя_сети> \
       --security-group-ids <идентификаторы_групп_безопасности> \
       --host type=router,`
             `zone-id=<зона_доступности>,`
             `subnet-id=<идентификатор_подсети>,`
             `assign-public-ip=<разрешить_публичный_доступ_к_хосту> \
       --router-resource-preset <класс_хостов_роутера> \
       --router-disk-size <размер_хранилища_ГБ> \
       --router-disk-type <тип_диска> \
       --host type=coordinator,`
             `zone-id=<зона_доступности>,`
             `subnet-id=<идентификатор_подсети>,`
             `assign-public-ip=<разрешить_публичный_доступ_к_хосту> \
       --coordinator-resource-preset <класс_хостов_координатора> \
       --coordinator-disk-size <размер_хранилища_ГБ> \
       --coordinator-disk-type <тип_диска> \
       --database name=<имя_БД> \
       --user name=<имя_пользователя>,`
             `password=<пароль>,`
             `permission=<имя_БД>,`
             `connection-limit=<количество_подключений_для_пользователя>,`
             `connection-retries=<количество_повторных_попыток_соединения> \
       --deletion-protection=<защитить_кластер_от_удаления>
    

    Где:

    • --name — имя кластера.

    • --environment — окружение кластера: production или prestable.

    • --network-name — имя сети, в которой будет размещен кластер.

      Важно

      Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.

    • --security-group-ids — идентификаторы групп безопасности через запятую.

      Важно

      Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт 6432.

    • --host — настройки хоста кластера. Параметр задается для каждого хоста отдельно и имеет следующую структуру:

      • type — тип хоста. Возможные значения:

        • router — роутер в кластере с расширенным шардированием;
        • coordinator — координатор в кластере с расширенным шардированием;
        • infra — хост INFRA в кластере со стандартным шардированием.
      • zone-id — зона доступности.

      • subnet-id — идентификатор подсети.

      • assign-public-ip — доступность хоста из интернета по публичному IP-адресу: true или false.

    • --router-resource-preset — класс хостов роутера.

    • --router-disk-size — размер диска роутера в гигабайтах.

    • --router-disk-type — тип диска роутера.

    • --coordinator-resource-preset — класс хостов координатора.

    • --coordinator-disk-size — размер диска координатора в гигабайтах.

    • --coordinator-disk-type — тип диска координатора.

    • --infra-resource-preset — класс хостов INFRA.

    • --infra-disk-size — размер диска INFRA в гигабайтах.

    • --infra-disk-type — тип диска INFRA.

    • --database — настройки базы данных:

      • name — имя базы данных.

      Для каждой базы данных задайте отдельный параметр --database.

    • --user — настройки пользователя. Параметр задается для каждого пользователя отдельно и имеет следующую структуру:

      • name — имя пользователя.

        Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы (кроме сочетания pg_), цифры или подчеркивания. Максимальная длина имени 63 символа.

        Имена admin, repl, monitor, postgres, mdb_admin, mdb_monitor, mdb_replication зарезервированы. Создать пользователей с этими именами нельзя.

      • password — пароль пользователя. Длина пароля — от 8 до 128 символов.

      • permission — имя базы данных, к которой пользователь получает доступ.

        Для каждой базы данных, к которой пользователю нужно предоставить доступ, передайте отдельный параметр permission.

      • connection-limit — максимальное количество одновременных подключений для пользователя.

      • connection-retries — максимальное количество повторных попыток соединения.

    • --deletion-protection — защита кластера от непреднамеренного удаления: true или false.

      После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.

      Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

    1. Чтобы настроить окно резервного копирования, передайте следующие параметры:

      yc managed-sharded-postgresql cluster create \
         ...
         --backup-window-start <время_начала_резервного_копирования> \
         --backup-retain-period-days <срок_хранения_автоматических_резервных_копий_в_днях> \
         ...
      

      Где:

      • --backup-window-start — время начала резервного копирования кластера по UTC в формате HH:MM:SS.
      • --backup-retain-period-days — срок хранения автоматических резервных копий. Возможные значения: от 7 до 60 дней. Значение по умолчанию — 7 дней.

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробная информация о ресурсах провайдера в документации на сайте Terraform или в зеркале.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.

Чтобы создать кластер Managed Service for Sharded PostgreSQL:

  1. Опишите в конфигурационном файле параметры следующих ресурсов:

    • Кластер Managed Service for Sharded PostgreSQL.
    • База данных кластера.
    • Пользователь кластера.
    • Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.

    • Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.

    Пример структуры конфигурационного файла:

    Для кластера со стандартным шардированием
    resource "yandex_mdb_sharded_postgresql_cluster" "<локальное_имя_кластера>" {
      name                = "<имя_кластера>"
      environment         = "<окружение>"
      network_id          = yandex_vpc_network.<локальное_имя_сети>.id
      security_group_ids  = ["<идентификаторы_групп_безопасности>"]
      deletion_protection = <защитить_кластер_от_удаления>
    
      config = {
        sharded_postgresql_config = {
          infra = {
            resources = {
              resource_preset_id = "<класс_хостов_INFRA>"
              disk_size          = <размер_хранилища_ГБ>
              disk_type_id       = "<тип_диска>"
            }
          }
        }
      }
    
      hosts = {
        <имя_хоста> = {
          type             = "INFRA"
          zone             = "<зона_доступности>"
          subnet_id        = yandex_vpc_subnet.<локальное_имя_подсети>.id
          assign_public_ip = <разрешить_публичный_доступ_к_хосту>
        }
      } 
    }
    
    resource "yandex_mdb_sharded_postgresql_database" "<локальное_имя_БД>" {
      cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id
      name       = "<имя_БД>"
    }
    
    resource "yandex_mdb_sharded_postgresql_user" "<локальное_имя_пользователя>" {
      cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id
      name       = "<имя_пользователя>"
      password   = "<пароль>"
    
      permissions {
        database = yandex_mdb_sharded_postgresql_database.<локальное_имя_БД>.name
      }
    
      settings = {
        connection_limit   = <количество_подключений_для_пользователя>
        connection_retries = <количество_повторных_попыток_соединения>
      }
    }
    
    resource "yandex_vpc_network" "<локальное_имя_сети>" {
      name = "<имя_сети>"
    }
    
    resource "yandex_vpc_subnet" "<локальное_имя_подсети>" {
      name           = "<имя_подсети>"
      zone           = "<зона_доступности>"
      network_id     = yandex_vpc_network.<локальное_имя_сети>.id
      v4_cidr_blocks = ["<диапазон_IP-адресов>"]
    }
    
    Для кластера с расширенным шардированием
    resource "yandex_mdb_sharded_postgresql_cluster" "<локальное_имя_кластера>" {
      name                = "<имя_кластера>"
      environment         = "<окружение>"
      network_id          = yandex_vpc_network.<локальное_имя_сети>.id
      security_group_ids  = ["<идентификаторы_групп_безопасности>"]
      deletion_protection = <защитить_кластер_от_удаления>
    
      config = {
        sharded_postgresql_config = {
          router = {
            resources = {
              resource_preset_id = "<класс_хостов_роутера>"
              disk_size          = <размер_хранилища_ГБ>
              disk_type_id       = "<тип_диска>"
            }
          }
          
          coordinator = {
            resources = {
              resource_preset_id = "<класс_хостов_координатора>"
              disk_size          = <размер_хранилища_ГБ>
              disk_type_id       = "<тип_диска>"
            }
          }
        }
      }
    
      hosts = {
        <имя_хоста_1> = {
          type             = "ROUTER"
          zone             = "<зона_доступности>"
          subnet_id        = yandex_vpc_subnet.<локальное_имя_подсети>.id
          assign_public_ip = <разрешить_публичный_доступ_к_хосту>
        }
    
        <имя_хоста_2> = {
          type             = "COORDINATOR"
          zone             = "<зона_доступности>"
          subnet_id        = yandex_vpc_subnet.<локальное_имя_подсети>.id
          assign_public_ip = <разрешить_публичный_доступ_к_хосту>
        }
      } 
    }
    
    resource "yandex_mdb_sharded_postgresql_database" "<локальное_имя_БД>" {
      cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id
      name       = "<имя_БД>"
    }
    
    resource "yandex_mdb_sharded_postgresql_user" "<локальное_имя_пользователя>" {
      cluster_id = yandex_mdb_sharded_postgresql_cluster.<локальное_имя_кластера>.id
      name       = "<имя_пользователя>"
      password   = "<пароль>"
    
      permissions {
        database = yandex_mdb_sharded_postgresql_database.<локальное_имя_БД>.name
      }
    
      settings = {
        connection_limit   = <количество_пользовательских_подключений>
        connection_retries = <количество_повторов_при_подключении>
      }
    }
    
    resource "yandex_vpc_network" "<локальное_имя_сети>" {
      name = "<имя_сети>"
    }
    
    resource "yandex_vpc_subnet" "<локальное_имя_подсети>" {
      name           = "<имя_подсети>"
      zone           = "<зона_доступности>"
      network_id     = yandex_vpc_network.<локальное_имя_сети>.id
      v4_cidr_blocks = ["<диапазон_IP-адресов>"]
    }
    

    Где:

    • name — имя кластера.

    • environment — окружение кластера: PRODUCTION или PRESTABLE.

    • network_id — идентификатор сети, в которой будет размещен кластер.

      Важно

      Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.

    • security_group_ids — список идентификаторов групп безопасности.

      Важно

      Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт 6432.

    • deletion_protection — защита кластера от непреднамеренного удаления: true или false.

      После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.

      Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

    • hosts — хосты кластера в виде ассоциативного массива элементов. Ключ задает имя хоста, а значение — параметры хоста. Каждый элемент имеет следующую структуру:

      • type — тип хоста. Возможные значения:

        • ROUTER — роутер в кластере с расширенным шардированием;
        • COORDINATOR — координатор в кластере с расширенным шардированием;
        • INFRA — хост INFRA в кластере со стандартным шардированием.
      • zone — зона доступности.

      • subnet_id — идентификатор подсети.

      • assign_public_ip — доступность хоста из интернета по публичному IP-адресу: true или false.

    • config.sharded_postgresql_config.router.resources — параметры ресурсов роутера в кластере с расширенным шардированием:

      • resource_preset_id — класс хостов.
      • disk_size — размер диска в гигабайтах.
      • disk_type_id — тип диска.
    • config.sharded_postgresql_config.coordinator.resources — параметры ресурсов координатора в кластере с расширенным шардированием:

      • resource_preset_id — класс хостов.
      • disk_size — размер диска в гигабайтах.
      • disk_type_id — тип диска.
    • config.sharded_postgresql_config.infra.resources — параметры ресурсов INFRA в кластере со стандартным шардированием:

      • resource_preset_id — класс хостов.
      • disk_size — размер диска в гигабайтах.
      • disk_type_id — тип диска.
    1. Чтобы настроить окно резервного копирования, добавьте в блок config следующие параметры:

      resource "yandex_mdb_sharded_postgresql_cluster" "<локальное_имя_кластера>" {
        ...
        config = {
          backup_window_start = {
            hours   = <часы>
            minutes = <минуты>
          }
      
          backup_retain_period_days = <срок_хранения_автоматических_резервных_копий_в_днях>
          ...
        }
        ...
      }
      

      Где:

      • backup_window_start — время начала резервного копирования кластера по UTC:

        • hours — от 0 до 23 часов.
        • minutes — от 0 до 59 минут.
      • backup_retain_period_days — срок хранения автоматических резервных копий. Возможные значения: от 7 до 60 дней. Значение по умолчанию — 7 дней.

    2. Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок maintenance_window:

      resource "yandex_mdb_sharded_postgresql_cluster" "<имя_кластера>" {
        ...
        maintenance_window {
          type = "<тип_технического_обслуживания>"
          day  = "<день_недели>"
          hour = <порядковый_номер_часового_интервала>
        }
        ...
      }
      

      Где:

      • type — тип технического обслуживания. Принимает значения:

        • ANYTIME (по умолчанию) — в любое время.
        • WEEKLY — по расписанию.
      • day — день недели для типа WEEKLY: MON, TUE, WED, THU, FRI, SAT или SUN.

      • hour — порядковый номер часового интервала по UTC для типа WEEKLY: от 1 до 24.

        Например, 1 соответствует интервалу с 00:00 до 01:00, 5 — с 04:00 до 05:00.

    Подробнее о ресурсе yandex_mdb_sharded_postgresql_cluster в документации провайдера Terraform.

  2. Проверьте корректность файлов конфигурации Terraform:

    1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

    2. Выполните команду:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  3. Создайте кластер:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

    Ограничения по времени

    Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for Sharded PostgreSQL:

    • создание, в том числе путем восстановления из резервной копии, — 30 минут;
    • изменение — 60 минут;
    • удаление — 15 минут.

    Операции, длящиеся дольше указанного времени, прерываются.

    Как изменить эти ограничения?

    Добавьте к описанию кластера блок timeouts, например:

    resource "yandex_mdb_sharded_postgresql_cluster" "<имя_кластера>" {
      ...
      timeouts {
        create = "1h30m" # Полтора часа
        update = "2h"    # 2 часа
        delete = "30m"   # 30 минут
      }
    }
    
  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      "folderId": "<идентификатор_каталога>",
      "name": "<имя_кластера>",
      "description": "<описание>",
      "environment": "<окружение>",
      "securityGroupIds": [
        "<идентификатор_группы_безопасности_1>",
        "<идентификатор_группы_безопасности_2>",
        ...
        "<идентификатор_группы_безопасности_N>"
      ],
      "networkId": "<идентификатор_сети>",
      "deletionProtection": <защитить_кластер_от_удаления>,
      "configSpec": {
        "spqrSpec": {
          "router": {
            "config": {
              "showNoticeMessages": <показывать_информационные_уведомления>,
              "timeQuantiles": [
                <список_квантилей_времени_для_отображения_статистики>
              ],
              "defaultRouteBehavior": "<разрешать_мультишардовые_запросы>",
              "preferSameAvailabilityZone": <приоритет_маршрутизации_в_зону_доступности_роутера>
            },
            "resources": {
              "resourcePresetId": "<класс_хостов_роутера>",
              "diskSize": "<размер_хранилища_в_байтах>",
              "diskTypeId": "<тип_диска>"
            }
          },
          "coordinator": {
            "resources": {
              "resourcePresetId": "<класс_хостов_координатора>",
              "diskSize": "<размер_хранилища_в_байтах>",
              "diskTypeId": "<тип_диска>"
            }
          },
          "infra": {
            "router": {
              "showNoticeMessages": <показывать_информационные_уведомления>,
              "time_quantiles": [
                <список_квантилей_времени_для_отображения_статистики>
              ],
              "defaultRouteBehavior": "<разрешать_мультишардовые_запросы>",
              "preferSameAvailabilityZone": <приоритет_маршрутизации_в_зону_доступности_роутера>
            },
            "resources": {
              "resourcePresetId": "<класс_хостов_INFRA>",
              "diskSize": "<размер_хранилища_в_байтах>",
              "diskTypeId": "<тип_диска>"
            }
          },
          "consolePassword": "<пароль_консоли_Sharded_PostgreSQL>",
          "logLevel": "<уровень_логирования>"
        },
        "backupWindowStart": {
          "hours": "<часы>",
          "minutes": "<минуты>",
          "seconds": "<секунды>",
          "nanos": "<наносекунды>"
        },
        "backupRetainPeriodDays": "<количество_дней>",
      },
      "databaseSpecs": [
        {
          "name": "<имя_БД>"
        },
        { <аналогичный_набор_настроек_для_БД_2> },
        { ... },
        { <аналогичный_набор_настроек_для_БД_N> }
      ],
      "userSpecs": [
        {
          "name": "<имя_пользователя>",
          "password": "<пароль_пользователя>",
          "permissions": [
            {
              "databaseName": "<имя_БД>"
            },
            { <имя_БД_2> },
            { ... },
            { <имя_БД_N> }
          ],
          "settings": {
            "connectionLimit": "<количество_пользовательских_соединений>",
            "connectionRetries": "<количество_повторов_при_подключении>"
          },
          "grants": [
            "привилегия_1",
            ...,
            "привилегия_N"
          ]
        },
        { <аналогичный_набор_настроек_для_пользователя_2> },
        { ... },
        { <аналогичный_набор_настроек_для_пользователя_N> }
      ],
      "hostSpecs": [
        {
          "zoneId": "<зона_доступности>",
          "subnetId": "<идентификатор_подсети>",
          "assignPublicIp": <разрешить_публичный_доступ_к_хосту>,
          "type": "<тип_хоста>"
        },
        { <аналогичный_набор_настроек_для_хоста_2> },
        { ... },
        { <аналогичный_набор_настроек_для_хоста_N> }
      ],
      "shardSpecs": [
        {
          "shardName": "<имя_шарда>",
          "mdbPostgresql": {
            "clusterId": "<идентификатор_кластера>"
          }
        },
        { <аналогичный_набор_настроек_для_шарда_2> },
        { ... },
        { <аналогичный_набор_настроек_для_шарда_N> }
      ],
      "maintenanceWindow": {
        "weeklyMaintenanceWindow": {
          "day": "<день_недели>",
          "hour": "<порядковый_номер_часового_интервала>"
        }
      }
    }
    

    Где:

    • folderId — идентификатор каталога. Его можно запросить со списком каталогов в облаке.

    • name — имя кластера.

    • environment — окружение кластера: PRODUCTION или PRESTABLE.

    • networkId — идентификатор сети, в которой будет размещен кластер.

      Важно

      Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.

    • securityGroupIds — идентификаторы групп безопасности.

      Важно

      Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт 6432.

    • deletionProtection — защита кластера от удаления: true или false.

      После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.

      Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

    • configSpec — настройки кластера:

      • spqrSpec — настройки сервиса Sharded PostgreSQL:

        • router — при расширенном шардировании задайте настройки роутера:

          • config — конфигурация роутера:

            • showNoticeMessages — показывать информационные уведомления: true или false.
            • timeQuantiles — массив строк временных квантилей для отображения статистики. По умолчанию используются значения "0.5", "0.75", "0.9", "0.95", "0.99", "0.999", "0.9999".
            • defaultRouteBehavior — политика выполнения мультишардовых запросов роутером. Возможные значения: BLOCK — блокировать, ALLOW — разрешать.
            • preferSameAvailabilityZone — включить приоритет маршрутизации запросов на чтение в зону доступности роутера: true или false.
          • resources — параметры ресурсов хостов ROUTER:

            • resourcePresetId — класс хостов;
            • diskSize — размер диска в байтах;
            • diskTypeId — тип диска.
        • coordinator – при расширенном шардировании задайте параметры ресурсов координатора:

          • resourcePresetId — класс хостов;
          • diskSize — размер диска в байтах;
          • diskTypeId — тип диска.
        • infra – при стандартном шардировании задайте настройки хостов INFRA:

          • resources — параметры ресурсов:

            • resourcePresetId — класс хостов;
            • diskSize — размер диска в байтах;
            • diskTypeId — тип диска.
          • router — конфигурация роутера:

            • showNoticeMessages — показывать информационные уведомления: true или false.
            • timeQuantiles — массив временных квантилей для отображения статистики. По умолчанию используются значения 0.5, 0.75, 0.9, 0.95, 0.99, 0.999, 0.9999.
            • defaultRouteBehavior — политика выполнения мультишардовых запросов роутером. Возможные значения: BLOCK — блокировать, ALLOW — разрешать.
            • preferSameAvailabilityZone — включить приоритет маршрутизации запросов на чтение в зону доступности роутера: true или false.
          • consolePassword — пароль консоли Sharded PostgreSQL.

          • logLevel — уровень логирования запросов: DEBUG, INFO, WARNING, ERROR, FATAL, PANIC.

      • backupWindowStart — настройки окна резервного копирования.

        В параметре укажите время, когда начинать резервное копирование. Возможные значения параметров:

        • hours — от 0 до 23 часов;
        • minutes — от 0 до 59 минут;
        • seconds — от 0 до 59 секунд;
        • nanos — от 0 до 999999999 наносекунд.
      • backupRetainPeriodDays — сколько дней хранить резервную копию кластера. Возможные значения: от 7 до 60 дней.

    • databaseSpecs — настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:

      • name — имя БД.
    • userSpecs — настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:

      • name — имя пользователя.

      • password — пароль пользователя. Длина пароля — от 8 до 128 символов.

      • permissions.databaseName — имя базы данных, к которой пользователь получает доступ.

      • settings — параметры пользовательских подключений к БД:

        • connectionLimit — лимит подключений.
        • connectionRetries — количество повторных попыток подключения.
      • grants – привилегии пользователя в виде массива строк. Возможные значения: reader, writer, admin, transfer.

    • hostSpecs — настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:

      • zoneId — зона доступности;

      • subnetId — идентификатор подсети;

      • assignPublicIp — разрешение на подключение к хосту из интернета: true или false;

      • type — тип хоста. Возможные значения:

        • ROUTER — роутер в кластере с расширенным шардированием;
        • COORDINATOR — координатор в кластере с расширенным шардированием;
        • INFRA — хост INFRA в кластере со стандартным шардированием.
    • shardSpecs — настройки шардов в виде массива элементов. Каждый элемент соответствует отдельному шарду и имеет следующую структуру:

      • shardName — имя шарда.
      • mdbPostgresql.clusterId — идентификатор кластера Managed Service for PostgreSQL в составе шарда.
    • maintenanceWindow — настройки расписания окна технического обслуживания (в т. ч. для выключенных кластеров). Передайте один из двух параметров:

      • anytime — техническое обслуживание проводится в любое время.

      • weeklyMaintenanceWindow — техническое обслуживание проводится раз в неделю в указанное время:

        • day — день недели: MON, TUE, WED, THU, FRI, SAT или SUN.

        • hour — порядковый номер часового интервала по UTC: от 1 до 24.

          Например, 1 соответствует интервалу с 00:00 до 01:00, 5 — с 04:00 до 05:00.

  3. Воспользуйтесь методом Cluster.Create и выполните запрос, например с помощью cURL:

    curl \
      --request POST \
      --header "Authorization: Bearer $IAM_TOKEN" \
      --header "Content-Type: application/json" \
      --url 'https://mdb.api.cloud.yandex.net/managed-spqr/v1/clusters' \
      --data "@body.json"
    
  4. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

  1. Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:

    export IAM_TOKEN="<IAM-токен>"
    
  2. Клонируйте репозиторий cloudapi:

    cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
    

    Далее предполагается, что содержимое репозитория находится в директории ~/cloudapi/.

  3. Создайте файл body.json и добавьте в него следующее содержимое:

    {
      "folder_id": "<идентификатор_каталога>",
      "name": "<имя_кластера>",
      "description": "<описание>",
      "environment": "<окружение>",
      "security_group_ids": [
        "<идентификатор_группы_безопасности_1>",
        "<идентификатор_группы_безопасности_2>",
        ...
        "<идентификатор_группы_безопасности_N>"
      ],
      "network_id": "<идентификатор_сети>",
      "deletion_protection": <защитить_кластер_от_удаления>,
      "config_spec": {
        "spqr_spec": {
          "router": {
            "config": {
              "show_notice_messages": {
                "value": <показывать_информационные_уведомления>
              },
              "time_quantiles": [
                <список_квантилей_времени_для_отображения_статистики>
              ],
              "default_route_behavior": "<разрешать_мультишардовые_запросы>",
              "prefer_same_availability_zone": {
                "value": <приоритет_маршрутизации_в_зону_доступности_роутера>
              }
            },
            "resources": {
              "resource_preset_id": "<класс_хостов_роутера>",
              "disk_size": "<размер_хранилища_в_байтах>",
              "disk_type_id": "<тип_диска>" }
          },
          "coordinator": {
            "resources": {
              "resource_preset_id": "<класс_хостов_координатора>",
              "disk_size": "<размер_хранилища_в_байтах>",
              "disk_type_id": "<тип_диска>"
            }
          },
          "infra": {
            "resources": {
              "resource_preset_id": "класс_хостов_INFRA",
              "disk_size": "<размер_хранилища_в_байтах>",
              "disk_type_id": "<тип_диска>"
            },
            "router": {
              "show_notice_messages": {
                "value": <показывать_информационные_уведомления>
              },
              "time_quantiles": [
                <список_квантилей_времени_для_отображения_статистики>
              ],
              "default_route_behavior": "<разрешать_мультишардовые_запросы>",
              "prefer_same_availability_zone": {
                "value": <приоритет_маршрутизации_в_зону_доступности_роутера>
              }
            },
          },
          "console_password": "<пароль_консоли_Sharded_PostgreSQL>",
          "log_level": "<уровень_логирования>"
        },
        "backup_window_start": {
          "hours": "<часы>",
          "minutes": "<минуты>",
          "seconds": "<секунды>",
          "nanos": "<наносекунды>"
        },
        "backup_retain_period_days": "<количество_дней>"
      },
      "database_specs": [
        {
          "name": "<имя_БД>"
        },
        { <аналогичный_набор_настроек_для_БД_2> },
        { ... },
        { <аналогичный_набор_настроек_для_БД_N> }
      ],
      "user_specs": [
        {
          "name": "<имя_пользователя>",
          "password": "<пароль_пользователя>",
          "permissions": [
            {
              "database_name": "<имя_БД>"
            },
            { <имя_БД_2> },
            { ... },
            { <имя_БД_N> }
          ],
          "settings": {
            "connection_limit": {
              "value": <количество_пользовательских_соединений>
            },
            "connection_retries": {
              "value": <количество_повторов_при_подключении>
            }
          },
          "grants": [
            "привилегия_1",
            ...,
            "привилегия_N"
          ]
        },
        { <аналогичный_набор_настроек_для_пользователя_2> },
        { ... },
        { <аналогичный_набор_настроек_для_пользователя_N> }
      ],
      "host_specs": [
        {
          "zone_id": "<зона_доступности>",
          "subnet_id": "<идентификатор_подсети>",
          "assign_public_ip": <разрешить_публичный_доступ_к_хосту>,
          "type": "<тип_хоста>"
        },
        { <аналогичный_набор_настроек_для_хоста_2> },
        { ... },
        { <аналогичный_набор_настроек_для_хоста_N> }
      ],
      "shard_specs": [
        {
          "shard_name": "<имя_шарда>",
          "mdb_postgresql": {
            "cluster_id": "<идентификатор_кластера>"
          }
        },
        { <аналогичный_набор_настроек_для_шарда_2> },
        { ... },
        { <аналогичный_набор_настроек_для_шарда_N> }
      ],
      "maintenance_window": {
        "weekly_maintenance_window": {
          "day": "<день_недели>",
          "hour": "<порядковый_номер_часового_интервала>"
        }
      }
    }
    

    Где:

    • folder_id — идентификатор каталога. Его можно запросить со списком каталогов в облаке.

    • name — имя кластера.

    • environment — окружение кластера: PRODUCTION или PRESTABLE.

    • network_id — идентификатор сети, в которой будет размещен кластер.

      Важно

      Выбранную для размещения кластера облачную сеть нельзя будет изменить. Если в дальнейшем вам потребуется переместить кластер в другую облачную сеть, воспользуйтесь функцией восстановления из резервной копии и укажите необходимую сеть для копии кластера.

    • security_group_ids — идентификаторы групп безопасности.

      Важно

      Чтобы роутер мог подключаться к хостам шарда, кластер Managed Service for Sharded PostgreSQL и шарды должны находиться в одной группе безопасности, разрешающей входящие и исходящие TCP-подключения на порт 6432.

    • deletion_protection — защита кластера от удаления: true или false.

      После включения защиты от удаления кластера она также применяется ко всем новым и существующим базам данных и пользователям, для которых защита от удаления не задана явно. Если для базы данных или пользователя задано собственное значение настройки защиты от удаления, оно имеет приоритет над значением настройки кластера.

      Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

    • config_spec — настройки кластера:

      • spqr_spec — настройки сервиса Sharded PostgreSQL:

        • router — при расширенном шардировании задайте настройки роутера:

          • config — конфигурация роутера:

            • show_notice_messages — показывать информационные уведомления: true или false.
            • time_quantiles — массив временных квантилей для отображения статистики. По умолчанию используются значения 0.5, 0.75, 0.9, 0.95, 0.99, 0.999, 0.9999.
            • default_route_behavior — политика выполнения мультишардовых запросов роутером. Возможные значения: BLOCK — блокировать, ALLOW — разрешать.
            • prefer_same_availability_zone — включить приоритет маршрутизации запросов на чтение в зону доступности роутера: true или false.
          • resources — параметры ресурсов хостов ROUTER:

            • resource_preset_id — класс хостов;
            • disk_size — размер диска в байтах;
            • disk_type_id — тип диска.
        • coordinator – при расширенном шардировании задайте параметры ресурсов координатора:

          • resource_preset_id — класс хостов;
          • disk_size — размер диска в байтах;
          • disk_type_id — тип диска.
        • infra – при стандартном шардировании задайте настройки хостов INFRA:

          • resources — параметры ресурсов:

            • resource_preset_id — класс хостов;
            • disk_size — размер диска в байтах;
            • disk_type_id — тип диска.
          • router — конфигурация роутера:

            • default_route_behavior — поведение роутера по умолчанию. Возможные значения: BLOCK — блокировать запрос, ALLOW — разрешать.
            • prefer_same_availability_zone — включить приоритет маршрутизации в зону доступности роутера: true или false.
          • console_password — пароль консоли Sharded PostgreSQL.

          • log_level — уровень логирования запросов: DEBUG, INFO, WARNING, ERROR, FATAL, PANIC.

      • backup_window_start — настройки окна резервного копирования.

        В параметре укажите время, когда начинать резервное копирование. Возможные значения параметров:

        • hours — от 0 до 23 часов;
        • minutes — от 0 до 59 минут;
        • seconds — от 0 до 59 секунд;
        • nanos — от 0 до 999999999 наносекунд.
      • backup_retain_period_days — сколько дней хранить резервную копию кластера. Возможные значения: от 7 до 60 дней.

    • database_specs — настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:

      • name — имя БД.
    • user_specs — настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:

      • name — имя пользователя.

      • password — пароль пользователя. Длина пароля — от 8 до 128 символов.

      • permissions.database_name — имя базы данных, к которой пользователь получает доступ.

      • settings — параметры пользовательских подключений к БД:

        • connection_limit — лимит подключений.
        • connection_retries — количество повторных попыток подключения.
      • grants – привилегии пользователя в виде массива строк. Возможные значения: reader, writer, admin, transfer.

    • host_specs — настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:

      • zone_id — зона доступности;

      • subnet_id — идентификатор подсети;

      • assign_public_ip — разрешение на подключение к хосту из интернета: true или false;

      • type — тип хоста. Возможные значения:

        • ROUTER — роутер в кластере с расширенным шардированием;
        • COORDINATOR — координатор в кластере с расширенным шардированием;
        • INFRA — хост INFRA в кластере со стандартным шардированием.
    • shard_specs — настройки шардов в виде массива элементов. Каждый элемент соответствует отдельному шарду и имеет следующую структуру:

      • shard_name — имя шарда.
      • mdb_postgresql.cluster_id — идентификатор кластера Managed Service for PostgreSQL в составе шарда.
    • maintenance_window — настройки расписания окна технического обслуживания (в т. ч. для выключенных кластеров). Передайте один из двух параметров:

      • anytime — техническое обслуживание проводится в любое время.

      • weekly_maintenance_window — техническое обслуживание проводится раз в неделю в указанное время:

        • day — день недели: MON, TUE, WED, THU, FRI, SAT или SUN.

        • hour — порядковый номер часового интервала по UTC: от 1 до 24.

          Например, 1 соответствует интервалу с 00:00 до 01:00, 5 — с 04:00 до 05:00.

  4. Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например с помощью gRPCurl:

    grpcurl \
      -format json \
      -import-path ~/cloudapi/ \
      -import-path ~/cloudapi/third_party/googleapis/ \
      -proto ~/cloudapi/yandex/cloud/mdb/spqr/v1/cluster_service.proto \
      -rpc-header "Authorization: Bearer $IAM_TOKEN" \
      -d @ \
      mdb.api.cloud.yandex.net:443 \
      yandex.cloud.mdb.spqr.v1.ClusterService.Create \
      < body.json
    
  5. Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.

ПримерыПримеры

Создание кластера со стандартным шардированиемСоздание кластера со стандартным шардированием

CLI
Terraform

Создайте кластер Managed Service for Sharded PostgreSQL с тестовыми характеристиками:

  • Имя spqr-std.

  • Окружение production.

  • Сеть default.

  • Группа безопасности enpjfvd3f34c********.

  • Один хост infra в зоне доступности ru-central1-a в подсети с идентификатором e9bhbia2scnk********.

  • Класс хоста s2.micro.

  • Хранилище на сетевых SSD-дисках (network-ssd) размером 10 ГБ.

  • База данных db1.

  • Пользователь user1 с паролем Password123 и доступом к базе данных db1.

  • Защита от непреднамеренного удаления кластера включена.

Выполните следующую команду:

yc managed-sharded-postgresql cluster create \
   --name spqr-std \
   --environment production \
   --network-name default \
   --security-group-ids enpjfvd3f34c******** \
   --host type=infra,zone-id=ru-central1-a,subnet-id=e9bhbia2scnk******** \
   --infra-resource-preset s2.micro \
   --infra-disk-size 10 \
   --infra-disk-type network-ssd \
   --database name=db1 \
   --user name=user1,password=Password123,permission=db1 \
   --deletion-protection=true

Создайте кластер Managed Service for Sharded PostgreSQL, а также сеть, подсеть и группу безопасности для него, используя следующие тестовые характеристики:

  • Имя spqr-std.

  • Окружение PRODUCTION.

  • Сеть spqr-network.

  • Группа безопасности spqr-sg с правилами, которые разрешают входящие и исходящие TCP-подключения на порт 6432.

    Эти правила нужны для подключения роутера к хостам шарда, а также для подключения к кластеру через интернет. Для подключения к кластеру через интернет также включите публичный доступ к хосту. Подробнее о подключении к кластеру.

  • Один хост INFRA в зоне доступности ru-central1-a в подсети spqr-network-ru-central1-a с диапазоном IP-адресов 10.128.0.0/24.

  • Класс хоста s2.micro.

  • Хранилище на сетевых SSD-дисках (network-ssd) размером 10 ГБ.

  • База данных db1.

  • Пользователь user1 с паролем Password123 и доступом к базе данных db1.

  • Защита от непреднамеренного удаления кластера включена.

Конфигурационный файл для создания этих ресурсов выглядит так:

resource "yandex_vpc_network" "spqr_network" {
  description = "Network for the Managed Service for Sharded PostgreSQL"
  name        = "spqr-network"
}

resource "yandex_vpc_subnet" "subnet_a" {
  description    = "Subnet in the ru-central1-a availability zone"
  name           = "spqr-network-ru-central1-a"
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.spqr_network.id
  v4_cidr_blocks = ["10.128.0.0/24"]
}

resource "yandex_vpc_security_group" "spqr_sg" {
  description = "Security group for the Managed Service for Sharded PostgreSQL"
  name        = "spqr-sg"
  network_id  = yandex_vpc_network.spqr_network.id

  ingress {
    description    = "Allow connections from the Internet and between cluster components"
    port           = 6432
    protocol       = "TCP"
    v4_cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    description    = "Allow connections between cluster components"
    port           = 6432
    protocol       = "TCP"
    v4_cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "yandex_mdb_sharded_postgresql_cluster" "spqr_cluster" {
  description         = "Managed Service for Sharded PostgreSQL cluster with standard sharding"
  name                = "spqr-std"
  environment         = "PRODUCTION"
  network_id          = yandex_vpc_network.spqr_network.id
  security_group_ids  = [yandex_vpc_security_group.spqr_sg.id]
  deletion_protection = true

  config = {
    sharded_postgresql_config = {
      infra = {
        resources = {
          disk_size          = 10
          disk_type_id       = "network-ssd"
          resource_preset_id = "s2.micro"
        }
      }
    }
  }

  hosts = {
    infra1 = {
      type      = "INFRA"
      zone      = "ru-central1-a"
      subnet_id = yandex_vpc_subnet.subnet_a.id
    }
  } 
}

resource "yandex_mdb_sharded_postgresql_database" "spqr_cluster_db" {
  cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
  name       = "db1"
}

resource "yandex_mdb_sharded_postgresql_user" "spqr_cluster_user" {
  cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
  name       = "user1"
  password   = "Password123"
  
  permissions {
    database = yandex_mdb_sharded_postgresql_database.spqr_cluster_db.name
  }
}

Создание кластера с расширенным шардированиемСоздание кластера с расширенным шардированием

CLI
Terraform

Создайте кластер Managed Service for Sharded PostgreSQL с тестовыми характеристиками:

  • Имя spqr-adv.

  • Окружение production.

  • Сеть default.

  • Группа безопасности enpjfvd3f34c********.

  • Три хоста router класса s2.micro по одному в каждой зоне доступности:

    • в зоне доступности ru-central1-a в подсети с идентификатором e9bhbia2scnk********;
    • в зоне доступности ru-central1-b в подсети с идентификатором e2lfqbm5nt9r********;
    • в зоне доступности ru-central1-d в подсети с идентификатором fl8beqmjckv8********.
  • Три хоста coordinator класса s2.micro по одному в каждой зоне доступности:

    • в зоне доступности ru-central1-a в подсети с идентификатором e9bhbia2scnk********;
    • в зоне доступности ru-central1-b в подсети с идентификатором e2lfqbm5nt9r********;
    • в зоне доступности ru-central1-d в подсети с идентификатором fl8beqmjckv8********.
  • Хранилище на сетевых SSD-дисках (network-ssd) размером 10 ГБ для каждого хоста router.

  • Хранилище на сетевых SSD-дисках (network-ssd) размером 10 ГБ для каждого хоста coordinator.

  • База данных db1.

  • Пользователь user1 с паролем Password123 и доступом к базе данных db1.

  • Защита от непреднамеренного удаления кластера включена.

Выполните следующую команду:

yc managed-sharded-postgresql cluster create \
   --name spqr-adv \
   --environment production \
   --network-name default \
   --security-group-ids enpjfvd3f34c******** \
   --host type=router,zone-id=ru-central1-a,subnet-id=e9bhbia2scnk******** \
   --host type=router,zone-id=ru-central1-b,subnet-id=e2lfqbm5nt9r******** \
   --host type=router,zone-id=ru-central1-d,subnet-id=fl8beqmjckv8******** \
   --host type=coordinator,zone-id=ru-central1-a,subnet-id=e9bhbia2scnk******** \
   --host type=coordinator,zone-id=ru-central1-b,subnet-id=e2lfqbm5nt9r******** \
   --host type=coordinator,zone-id=ru-central1-d,subnet-id=fl8beqmjckv8******** \
   --router-resource-preset s2.micro \
   --router-disk-size 10 \
   --router-disk-type network-ssd \
   --coordinator-resource-preset s2.micro \
   --coordinator-disk-size 10 \
   --coordinator-disk-type network-ssd \
   --database name=db1 \
   --user name=user1,password=Password123,permission=db1 \
   --deletion-protection=true

Создайте кластер Managed Service for Sharded PostgreSQL, а также сеть, подсеть и группу безопасности для него, используя следующие тестовые характеристики:

  • Имя spqr-adv.

  • Окружение PRODUCTION.

  • Сеть spqr-network.

  • Группа безопасности spqr-sg с правилами, которые разрешают входящие и исходящие TCP-подключения на порт 6432.

    Эти правила нужны для подключения роутера к хостам шарда, а также для подключения к кластеру через интернет. Для подключения к кластеру через интернет также включите публичный доступ к хостам. Подробнее о подключении к кластеру.

  • Три хоста ROUTER класса s2.micro по одному в каждой зоне доступности:

    • в зоне доступности ru-central1-a в подсети spqr-network-ru-central1-a с диапазоном IP-адресов 10.128.0.0/24;
    • в зоне доступности ru-central1-b в подсети spqr-network-ru-central1-b с диапазоном IP-адресов 10.128.1.0/24;
    • в зоне доступности ru-central1-d в подсети spqr-network-ru-central1-d с диапазоном IP-адресов 10.128.2.0/24.
  • Три хоста COORDINATOR класса s2.micro по одному в каждой зоне доступности:

    • в зоне доступности ru-central1-a в подсети spqr-network-ru-central1-a с диапазоном IP-адресов 10.128.0.0/24;
    • в зоне доступности ru-central1-b в подсети spqr-network-ru-central1-b с диапазоном IP-адресов 10.128.1.0/24;
    • в зоне доступности ru-central1-d в подсети spqr-network-ru-central1-d с диапазоном IP-адресов 10.128.2.0/24.
  • Хранилище на сетевых SSD-дисках (network-ssd) размером 10 ГБ для каждого хоста ROUTER.

  • Хранилище на сетевых SSD-дисках (network-ssd) размером 10 ГБ для каждого хоста COORDINATOR.

  • База данных db1.

  • Пользователь user1 с паролем Password123 и доступом к базе данных db1.

  • Защита от непреднамеренного удаления кластера включена.

Конфигурационный файл для создания этих ресурсов выглядит так:

resource "yandex_vpc_network" "spqr_network" {
  description = "Network for the Managed Service for Sharded PostgreSQL"
  name        = "spqr-network"
}

resource "yandex_vpc_subnet" "subnet_a" {
  description    = "Subnet in the ru-central1-a availability zone"
  name           = "spqr-network-ru-central1-a"
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.spqr_network.id
  v4_cidr_blocks = ["10.128.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_b" {
  description    = "Subnet in the ru-central1-b availability zone"
  name           = "spqr-network-ru-central1-b"
  zone           = "ru-central1-b"
  network_id     = yandex_vpc_network.spqr_network.id
  v4_cidr_blocks = ["10.128.1.0/24"]
}

resource "yandex_vpc_subnet" "subnet_d" {
  description    = "Subnet in the ru-central1-d availability zone"
  name           = "spqr-network-ru-central1-d"
  zone           = "ru-central1-d"
  network_id     = yandex_vpc_network.spqr_network.id
  v4_cidr_blocks = ["10.128.2.0/24"]
}

resource "yandex_vpc_security_group" "spqr_sg" {
  description = "Security group for the Managed Service for Sharded PostgreSQL"
  name        = "spqr-sg"
  network_id  = yandex_vpc_network.spqr_network.id

  ingress {
    description    = "Allow connections from the Internet and between cluster components"
    port           = 6432
    protocol       = "TCP"
    v4_cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    description    = "Allow connections between cluster components"
    port           = 6432
    protocol       = "TCP"
    v4_cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "yandex_mdb_sharded_postgresql_cluster" "spqr_cluster" {
  description         = "Managed Service for Sharded PostgreSQL cluster with advanced sharding"
  name                = "spqr-adv"
  environment         = "PRODUCTION"
  network_id          = yandex_vpc_network.spqr_network.id
  security_group_ids  = [yandex_vpc_security_group.spqr_sg.id]
  deletion_protection = true

  config = {
    sharded_postgresql_config = {
      router = {
        resources = {
          disk_size          = 10
          disk_type_id       = "network-ssd"
          resource_preset_id = "s2.micro"
        }
      }
      coordinator = {
        resources = {
          disk_size          = 10
          disk_type_id       = "network-ssd"
          resource_preset_id = "s2.micro"
        }
      }
    }
  }

  hosts = {
    router1 = {
      type      = "ROUTER"
      zone      = "ru-central1-a"
      subnet_id = yandex_vpc_subnet.subnet_a.id
    }

    router2 = {
      type      = "ROUTER"
      zone      = "ru-central1-b"
      subnet_id = yandex_vpc_subnet.subnet_b.id
    }
  
    router3 = {
      type      = "ROUTER"
      zone      = "ru-central1-d"
      subnet_id = yandex_vpc_subnet.subnet_d.id
    }

    coordinator1 = {
      type      = "COORDINATOR"
      zone      = "ru-central1-a"
      subnet_id = yandex_vpc_subnet.subnet_a.id
    }

    coordinator2 = {
      type      = "COORDINATOR"
      zone      = "ru-central1-b"
      subnet_id = yandex_vpc_subnet.subnet_b.id
    }
  
    coordinator3 = {
      type      = "COORDINATOR"
      zone      = "ru-central1-d"
      subnet_id = yandex_vpc_subnet.subnet_d.id
    }
  } 
}

resource "yandex_mdb_sharded_postgresql_database" "spqr_cluster_db" {
  cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
  name       = "db1"
}

resource "yandex_mdb_sharded_postgresql_user" "spqr_cluster_user" {
  cluster_id = yandex_mdb_sharded_postgresql_cluster.spqr_cluster.id
  name       = "user1"
  password   = "Password123"

  permissions {
    database = yandex_mdb_sharded_postgresql_database.spqr_cluster_db.name
  }
}

Была ли статья полезна?

Предыдущая
Получение информации об имеющихся кластерах
Следующая
Изменение кластера
Сделано на Gravity UI
Проект Яндекса
© 2026 ООО «Яндекс.Облако»