Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for PostgreSQL
  • Начало работы
    • Все инструкции
      • Получение информации об имеющихся кластерах
      • Создание кластера
      • Изменение настроек кластера
      • Остановка и запуск кластера
      • Управление хостами PostgreSQL
      • Миграция хостов в другую зону доступности
      • Управление слотами репликации
      • Управление резервными копиями
      • Управление политиками резервного копирования
      • Управление дисковым пространством
      • Техническое обслуживание
      • Обновление версии PostgreSQL
      • Удаление кластера
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

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

  • Создать кластер
  • Connection Manager
  • Создать копию кластера
  • Примеры
  • Создание кластера с одним хостом
  1. Пошаговые инструкции
  2. Кластеры
  3. Создание кластера

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

Статья создана
Yandex Cloud
Улучшена
Обновлена 2 июня 2025 г.
  • Создать кластер
    • Connection Manager
  • Создать копию кластера
  • Примеры
    • Создание кластера с одним хостом

Кластер PostgreSQL — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем одного хоста: хост-мастер принимает запросы на запись и дублирует изменения в репликах. Транзакция подтверждается, если данные записаны на диск и на хосте-мастере, и на определенном числе реплик, достаточном для формирования кворума.

Примечание

  • Количество хостов, которые можно создать вместе с кластером PostgreSQL, зависит от выбранного типа диска и класса хостов.
  • Доступные типы диска зависят от выбранного класса хостов.
  • Если хранилище БД заполнится на 97%, кластер перейдет в режим только чтения. Рассчитывайте и увеличивайте необходимый размер хранилища заранее или настройте автоматическое увеличение его размера.

По умолчанию Managed Service for PostgreSQL выставляет максимально возможное количество подключений к каждому хосту кластера PostgreSQL. Этот максимум не может быть больше значения настройки Max connections.

Важно

Managed Service for PostgreSQL резервирует 15 подключений для служебных пользователей на каждом PostgreSQL-хосте. Например, если для кластера выставлено значение настройки Max connections 100, то вы можете зарезервировать не больше 85 подключений для пользователей кластера.

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

Для создания кластера Managed Service for PostgreSQL нужна роль vpc.user и роль managed-postgresql.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.

Connection ManagerConnection Manager

Подключениями к БД кластера управляет сервис Connection Manager.

Вместе с кластером автоматически создаются:

  • Подключение Connection Manager с информацией о соединении с БД.

  • Секрет Yandex Lockbox, в котором хранится пароль пользователя — владельца БД. Хранение паролей в сервисе Yandex Lockbox обеспечивает их безопасность.

Подключение и секрет создаются для каждого нового пользователя БД. Чтобы увидеть все подключения, на странице кластера выберите вкладку Подключения.

Для просмотра информации о подключении требуется роль connection-manager.viewer. Вы можете настраивать доступ к подключениям в Connection Manager.

Использование сервиса Connection Manager и секретов, созданных с его помощью, не тарифицируется.

Консоль управления
CLI
Terraform
REST API
gRPC API

Смотреть видео на YouTube.

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

  1. В консоли управления выберите каталог, в котором нужно создать кластер БД.

  2. Выберите сервис Managed Service for PostgreSQL.

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

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

  5. Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):

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

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

  8. В блоке Размер хранилища:

    • Выберите тип диска.

      От выбранного типа зависит, с каким шагом можно будет изменить размер диска:

      • Сетевые HDD- и SSD-диски — с шагом 1 ГБ.
      • Локальные SSD-диски:
        • для платформ Intel Broadwell и Intel Cascade Lake — с шагом 100 ГБ;
        • для платформы Intel Ice Lake — с шагом 368 ГБ.
      • Нереплицируемые SSD-диски и cверхбыстрые сетевые SSD-диски с тремя репликами — с шагом 93 ГБ.
    • Выберите размер хранилища, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. раздел Резервные копии.

  9. (Опционально) В блоке Автоматическое увеличение размера хранилища укажите желаемые настройки:

    • В поле Увеличивать размер задайте соответствующие условия, чтобы:

      • Размер хранилища увеличился в следующее окно обслуживания, когда хранилище окажется заполнено более чем на указанную долю (%).
      • Размер хранилища увеличился незамедлительно, когда хранилище окажется заполнено более чем на указанную долю (%).

      Можно задать оба условия, но порог для незамедлительного увеличения должен быть выше порога для увеличения в окно обслуживания.

    • В поле Максимальный размер хранилища укажите максимальный размер хранилища, который может быть установлен при автоматическом увеличении размера хранилища.

    Если заданный порог достигнут, размер хранилища увеличивается по-разному в зависимости от типа диска:

    • Для сетевых HDD- и SSD-дисков — на большее из двух значений: 20 ГБ или 20% от текущего размера диска.

    • Для нереплицируемых SSD-дисков и сверхбыстрых сетевых SSD-дисков с тремя репликами — на 93 ГБ.

    • Для локальных SSD-дисков:

      • В кластере на платформе Intel Broadwell или Intel Cascade Lake — на 100 ГБ.
      • В кластере на платформе Intel Ice Lake — на 368 ГБ.

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

    Важно

    • Размер хранилища нельзя уменьшить.
    • Во время изменения размера хранилища хосты кластера будут недоступны.

    Примечание

    Некоторые настройки PostgreSQL зависят от размера хранилища.

    Если настроено увеличение хранилища в окно обслуживания, настройте расписание окна обслуживания.

  10. В блоке База данных укажите атрибуты БД:

    • Имя БД. Это имя должно быть уникальным в рамках каталога.

      Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена postgres, template0, template1 зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя.

    • Имя пользователя — владельца БД. По умолчанию новому пользователю выделяется 50 подключений к каждому хосту кластера. Изменить допустимое количество подключений можно с помощью настройки Conn limit.

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

      Имена admin, repl, monitor, postgres, mdb_superuser, mdb_admin, mdb_monitor, mdb_replication зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать пользователей с этими именами нельзя.

    • Пароль:

      • Ввести вручную — выберите, чтобы ввести свой пароль. Длина пароля — от 8 до 128 символов.

      • Сгенерировать — выберите, чтобы сгенерировать пароль с помощью сервиса Connection Manager.

      Чтобы увидеть пароль, после создания кластера выберите вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется роль lockbox.payloadViewer.

    • Локаль сортировки и локаль набора символов. Эти настройки определяют правила, по которым производится сортировка строк (LC_COLLATE) и классификация символов (LC_CTYPE). В Managed Service for PostgreSQL настройки локали действуют на уровне отдельно взятой БД.

      PostgreSQL использует локали для поддержки различных языковых стандартов. Выбор локали влияет на:

      • Порядок сортировки в запросах с использованием оператора ORDER BY или стандартных операторов сравнения текстовых данных.
      • Функции upper, lower, initcap, а также семейство функций to_char.
      • Операторы поиска по шаблону (LIKE, ILIKE, SIMILAR TO, регулярные выражения).
      • Возможность использовать индексы с оператором LIKE.

      По умолчанию используется локаль C. При использовании кодировки C для текстовых данных с нелатинскими (например, кириллическими) символами возможны ошибки в порядке сортировки данных и отображении данных при поиске по шаблону. Если эта локаль не подходит для корректной обработки таблиц в базе данных, выберите другую из списка. Однако учитывайте, что использование нестандартной локали может снизить скорость выполнения запросов к базе данных.

      Подробнее о настройках локали см. в документации PostgreSQL.

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

  11. В блоке Сетевые настройки выберите:

    • Облачную сеть для размещения кластера. Если сети нет, нажмите Создать сеть и создайте ее:

      1. В открывшемся окне укажите имя сети и выберите каталог, в котором она будет создана.
      2. (Опционально) Выберите опцию Создать подсети, чтобы автоматически создать подсети во всех зонах доступности.
      3. Нажмите кнопку Создать сеть.

      Важно

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

    • Группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.

  12. В блоке Хосты выберите параметры хостов БД, создаваемых вместе с кластером. По умолчанию каждый хост создается в отдельной подсети. Чтобы выбрать для хоста конкретную подсеть, в строке этого хоста нажмите значок .

    При настройке параметров хостов обратите внимание, что если в блоке Размер хранилища выбран local-ssd или network-ssd-nonreplicated, необходимо добавить не менее трех хостов в кластер.

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

  13. При необходимости задайте дополнительные настройки кластера:

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

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

      Изменение срока хранения затрагивает как новые автоматические резервные копии, так и уже существующие. Например, изначальный срок хранения был 7 дней. Оставшееся время жизни отдельной автоматической резервной копии при таком сроке — 1 день. При увеличении срока хранения до 9 дней оставшееся время жизни этой резервной копии будет уже 3 дня.

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

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

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

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

    • Доступ из DataLens — опция разрешает анализировать данные из кластера в сервисе Yandex DataLens.

    • Доступ из WebSQL — опция разрешает выполнять SQL-запросы к базам данных кластера из консоли управления Yandex Cloud с помощью сервиса Yandex WebSQL.

    • Доступ из Yandex Query — опция разрешает выполнять YQL-запросы к базам данных кластера из сервиса Yandex Query.

    • Доступ из Serverless — включите эту опцию, чтобы разрешить доступ к кластеру из сервиса Yandex Cloud Functions. Подробнее о настройке доступа см. в документации Cloud Functions.

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

    • Автоматическое переключение мастера — если эта опция включена, при смене мастера источник репликации для всех хостов-реплик автоматически переключится на новый хост-мастер. Подробнее см. в разделе Репликация.

      При удалении хоста-мастера новый мастер будет выбран автоматически независимо от значения этой опции.

      Внимание

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

    • Режим работы менеджера подключений — выберите один из режимов работы менеджера подключений.

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

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

      Если параметр изменен на работающем кластере, новое значение унаследуют только пользователи и БД с защитой Как у кластера.

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

  14. При необходимости задайте настройки СУБД уровня кластера.

    Примечание

    Некоторые настройки PostgreSQL зависят от выбранного класса хостов или от размера хранилища.

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

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

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

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

  1. Проверьте, есть ли в каталоге подсети для хостов кластера:

    yc vpc subnet list
    

    Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе Yandex Virtual Private Cloud.

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

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

    yc managed-postgresql cluster create \
      --name <имя_кластера> \
      --environment <окружение> \
      --network-name <имя_сети> \
      --host zone-id=<зона_доступности>,`
               `subnet-id=<идентификатор_подсети>,`
               `assign-public-ip=<доступ_к_хосту_из_интернета> \
      --resource-preset <класс_хоста> \
      --user name=<имя_пользователя>,password=<пароль_пользователя> \
      --database name=<имя_БД>,owner=<имя_владельца_БД> \
      --disk-size <размер_хранилища_ГБ> \
      --disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \
      --security-group-ids <список_идентификаторов_групп_безопасности> \
      --connection-pooling-mode=<режим_работы_менеджера_подключений> \
      --deletion-protection
    

    Где:

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

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

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

    • deletion-protection — защита от удаления кластера, его баз данных и пользователей.

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

      Если параметр изменен на работающем кластере, новое значение унаследуют только пользователи и БД с защитой Как у кластера.

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

    Идентификатор подсети subnet-id необходимо указывать, если в выбранной зоне доступности создано две и больше подсетей.

    Важно

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

    Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена postgres, template0, template1 зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя.

    Длина пароля — от 8 до 128 символов.

    Примечание

    Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого измените команду и задайте параметры пользователя таким образом:

      --user name=<имя_пользователя>,generate-password=true
    

    Чтобы увидеть пароль, в консоли управления выберите созданный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется роль lockbox.payloadViewer.

    Доступные режимы работы менеджера подключений: SESSION, TRANSACTION или STATEMENT.

    Также вы можете указать дополнительную опцию replication-source в параметре --host для того, чтобы вручную управлять потоками репликации.

    Чтобы разрешить доступ к кластеру из сервиса Yandex Cloud Functions, передайте параметр --serverless-access. Подробнее о настройке доступа см. в документации Cloud Functions.

    Чтобы разрешить доступ к кластеру из сервиса Yandex Query, передайте параметр --yandexquery-access=true. Функциональность находится на стадии Preview и предоставляется по запросу.

    Примечание

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

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

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

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

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

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

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

    • Кластер БД — описание кластера и его хостов.

    • База данных — описание БД кластера.

    • Пользователь — описание пользователя кластера.

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

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

    Важно

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

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

    resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
      name                = "<имя_кластера>"
      environment         = "<окружение>"
      network_id          = "<идентификатор_сети>"
      security_group_ids  = [ "<список_идентификаторов_групп_безопасности>" ]
      deletion_protection = <защита_от_удаления>
    
      config {
        version = "<версия_PostgreSQL>"
        resources {
          resource_preset_id = "<класс_хоста>"
          disk_type_id       = "<тип_диска>"
          disk_size          = <размер_хранилища_ГБ>
        }
        pooler_config {
          pool_discard = <параметр_Odyssey>
          pooling_mode = "<режим_работы>"
        }
        ...
      }
    
      host {
        zone             = "<зона_доступности>"
        name             = "<имя_хоста>"
        subnet_id        = "<идентификатор_подсети>"
        assign_public_ip = <доступ_к_хосту_из_интернета>
      }
    }
    
    resource "yandex_mdb_postgresql_database" "<имя_БД>" {
      cluster_id = "<идентификатор_кластера>"
      name       = "<имя_БД>"
      owner      = "<имя_владельца_БД>"
      depends_on = [
        yandex_mdb_postgresql_user.<имя_пользователя>
      ]
    }
    
    resource "yandex_mdb_postgresql_user" "<имя_пользователя>" {
      cluster_id = "<идентификатор_кластера>"
      name       = "<имя_пользователя>"
      password   = "<пароль_пользователя>"
    }
    
    resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" }
    
    resource "yandex_vpc_subnet" "<имя_подсети>" {
      name           = "<имя_подсети>"
      zone           = "<зона_доступности>"
      network_id     = "<идентификатор_сети>"
      v4_cidr_blocks = ["<диапазон>"]
    }
    

    Где:

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

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

    • deletion_protection — защита от удаления кластера, его баз данных и пользователей: true или false.

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

      Если параметр изменен на работающем кластере, новое значение унаследуют только пользователи и БД с защитой Как у кластера.

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

    • version — версия PostgreSQL: 13, 13-1c, 14, 14-1c, 15, 15-1c, 16, 16-1c, 17 и 17-1c.

    • pool_discard — параметр Odyssey pool_discard: true или false.

    • pooling_mode — режим работы: SESSION, TRANSACTION или STATEMENT.

    Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена postgres, template0, template1 зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя.

    Длина пароля — от 8 до 128 символов.

    Примечание

    Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо password = "<пароль_пользователя>" укажите generate_password = true.

    Чтобы увидеть пароль, в консоли управления выберите созданный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется роль lockbox.payloadViewer.

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

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

    Где:

    • type — тип технического обслуживания. Принимает значения:
      • ANYTIME — в любое время.
      • WEEKLY — по расписанию.
    • day — день недели для типа WEEKLY в формате DDD. Например, MON.
    • hour — час дня по UTC для типа WEEKLY в формате HH. Например, 21.

    Чтобы настроить сбор статистики, добавьте в блок config блок performance_diagnostics:

    resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
      ...
      config {
        ...
        performance_diagnostics {
          enabled                      = <активация_сбора_статистики>
          sessions_sampling_interval   = <интервал_сбора_сессий>
          statements_sampling_interval = <интервала_сбора_запросов>
        }
        ...
      }
      ...
    }
    

    Где:

    • enabled — активация сбора статистики: true или false.
    • sessions_sampling_interval — интервал сбора сессий от 1 до 86400 секунд.
    • statements_sampling_interval — интервала сбора запросов от 60 до 86400 секунд.

    Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.

  2. Проверьте корректность настроек.

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

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

      terraform validate
      

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

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

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

      terraform plan
      

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

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

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

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

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

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

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

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

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

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

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

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

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

    {
      "folderId": "<идентификатор_каталога>",
      "name": "<имя_кластера>",
      "environment": "<окружение>",
      "networkId": "<идентификатор_сети>",
      "securityGroupIds": [
        "<идентификатор_группы_безопасности_1>",
        "<идентификатор_группы_безопасности_2>",
        ...
        "<идентификатор_группы_безопасности_N>"
      ],
      "deletionProtection": <защита_от_удаления:_true_или_false>,
      "configSpec": {
        "version": "<версия_PostgreSQL>",
        "resources": {
          "resourcePresetId": "<класс_хостов>",
          "diskSize": "<размер_хранилища_в_байтах>",
          "diskTypeId": "<тип_диска>"
        },
        "access": {
          "dataLens": <доступ_к_DataLens:_true_или_false>,
          "webSql": <доступ_к_WebSQL:_true_или_false>,
          "serverless": <доступ_к_Cloud_Functions:_true_или_false>,
          "dataTransfer": <доступ_к_Data_Transfer:_true_или_false>,
          "yandexQuery": <доступ_к_Query:_true_или_false>
        },
        "performanceDiagnostics": {
          "enabled": <активация_сбора_статистики:_true_или_false>,
          "sessionsSamplingInterval": "<интервал_сбора_сессий>",
          "statementsSamplingInterval": "<интервал_сбора_запросов>"
        }
      },
      "databaseSpecs": [
        {
          "name": "<имя_БД>",
          "owner": "<имя_владельца_БД>"
        },
        { <аналогичный_набор_настроек_для_БД_2> },
        { ... },
        { <аналогичный_набор_настроек_для_БД_N> }
      ],
      "userSpecs": [
        {
          "name": "<имя_пользователя>",
          "password": "<пароль_пользователя>",
          "permissions": [
            {
              "databaseName": "<имя_БД>"
            }
          ],
          "login": <разрешение_для_пользователя_на_подключение_к_БД:_true_или_false>
        },
        { <аналогичный_набор_настроек_для_пользователя_2> },
        { ... },
        { <аналогичный_набор_настроек_для_пользователя_N> }
      ],
      "hostSpecs": [
        {
          "zoneId": "<зона_доступности>",
          "subnetId": "<идентификатор_подсети>",
          "assignPublicIp": <публичный_адрес_хоста:_true_или_false>
        },
        { <аналогичный_набор_настроек_для_хоста_2> },
        { ... },
        { <аналогичный_набор_настроек_для_хоста_N> }
      ]
    }
    

    Где:

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

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

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

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

      Важно

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

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

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

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

      Если параметр изменен на работающем кластере, новое значение унаследуют только пользователи и БД с защитой Как у кластера.

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

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

      • version — версия PostgreSQL.

      • resources — ресурсы кластера:

        • resourcePresetId — класс хостов;
        • diskSize — размер диска в байтах;
        • diskTypeId — тип диска.
      • access — настройки доступа кластера к следующим сервисам Yandex Cloud:

        • dataLens — Yandex DataLens;
        • webSql — Yandex WebSQL;
        • serverless — Yandex Cloud Functions;
        • dataTransfer — Yandex Data Transfer;
        • yandexQuery — Yandex Query.
      • performanceDiagnostics — настройки для сбора статистики:

        • enabled — активация сбора статистики.
        • sessionsSamplingInterval — интервал сбора сессий. Возможные значения: от 1 до 86400 секунд.
        • statementsSamplingInterval — интервал сбора запросов. Возможные значения: от 60 до 86400 секунд.
    • databaseSpecs — настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:

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

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

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

        Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо "password": "<пароль_пользователя>" укажите "generatePassword": true.

        Чтобы увидеть пароль, в консоли управления выберите созданный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется роль lockbox.payloadViewer.

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

      • login — разрешение для пользователя на подключение к БД.

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

      • zoneId — зона доступности;
      • subnetId — идентификатор подсети;
      • assignPublicIp — разрешение на подключение к хосту из интернета.
  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-postgresql/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": "<имя_кластера>",
      "environment": "<окружение>",
      "network_id": "<идентификатор_сети>",
      "security_group_ids": [
        "<идентификатор_группы_безопасности_1>",
        "<идентификатор_группы_безопасности_2>",
        ...
        "<идентификатор_группы_безопасности_N>"
      ],
      "deletion_protection": <защита_от_удаления:_true_или_false>,
      "config_spec": {
        "version": "<версия_PostgreSQL>",
        "resources": {
          "resource_preset_id": "<класс_хостов>",
          "disk_size": "<размер_хранилища_в_байтах>",
          "disk_type_id": "<тип_диска>"
        },
        "access": {
          "data_lens": <доступ_к_DataLens:_true_или_false>,
          "web_sql": <доступ_к_WebSQL:_true_или_false>,
          "serverless": <доступ_к_Cloud_Functions:_true_или_false>,
          "data_transfer": <доступ_к_Data_Transfer:_true_или_false>,
          "yandex_query": <доступ_к_Query:_true_или_false>
        },
        "performance_diagnostics": {
          "enabled": <активация_сбора_статистики:_true_или_false>,
          "sessions_sampling_interval": "<интервал_сбора_сессий>",
          "statements_sampling_interval": "<интервал_сбора_запросов>"
        }
      },
      "database_specs": [
        {
          "name": "<имя_БД>",
          "owner": "<имя_владельца_БД>"
        },
        { <аналогичный_набор_настроек_для_БД_2> },
        { ... },
        { <аналогичный_набор_настроек_для_БД_N> }
      ],
      "user_specs": [
        {
          "name": "<имя_пользователя>",
          "password": "<пароль_пользователя>",
          "permissions": [
            {
              "database_name": "<имя_БД>"
            }
          ],
          "login": <разрешение_для_пользователя_на_подключение_к_БД:_true_или_false>
        },
        { <аналогичный_набор_настроек_для_пользователя_2> },
        { ... },
        { <аналогичный_набор_настроек_для_пользователя_N> }
      ],
      "host_specs": [
        {
          "zone_id": "<зона_доступности>",
          "subnet_id": "<идентификатор_подсети>",
          "assign_public_ip": <публичный_адрес_хоста:_true_или_false>
        },
        { <аналогичный_набор_настроек_для_хоста_2> },
        { ... },
        { <аналогичный_набор_настроек_для_хоста_N> }
      ]
    }
    

    Где:

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

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

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

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

      Важно

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

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

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

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

      Если параметр изменен на работающем кластере, новое значение унаследуют только пользователи и БД с защитой Как у кластера.

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

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

      • version — версия PostgreSQL.

      • resources — ресурсы кластера:

        • resource_preset_id — класс хостов;
        • disk_size — размер диска в байтах;
        • disk_type_id — тип диска.
      • access — настройки доступа кластера к следующим сервисам Yandex Cloud:

        • data_lens — Yandex DataLens;
        • web_sql — Yandex WebSQL;
        • serverless — Yandex Cloud Functions;
        • data_transfer — Yandex Data Transfer;
        • yandex_query — Yandex Query.
      • performance_diagnostics — настройки для сбора статистики:

        • enabled — активация сбора статистики.
        • sessions_sampling_interval — интервал сбора сессий. Возможные значения: от 1 до 86400 секунд.
        • statements_sampling_interval — интервал сбора запросов. Возможные значения: от 60 до 86400 секунд.
    • database_specs — настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и имеет следующую структуру:

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

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

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

        Пароль также можно сгенерировать с помощью сервиса Connection Manager. Для этого вместо "password": "<пароль_пользователя>" укажите "generate_password": true.

        Чтобы увидеть пароль, в консоли управления выберите созданный кластер, перейдите на вкладку Пользователи и нажмите Посмотреть пароль в строке нужного пользователя. Откроется страница секрета Yandex Lockbox, в котором хранится пароль. Для просмотра паролей требуется роль lockbox.payloadViewer.

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

      • login — разрешение для пользователя на подключение к БД.

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

      • zone_id — зона доступности;
      • subnet_id — идентификатор подсети;
      • assign_public_ip — разрешение на подключение к хосту из интернета.
  4. Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например, с помощью gRPCurl:

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

Важно

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

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

Вы можете создать кластер PostgreSQL, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера PostgreSQL импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер PostgreSQL обладает множеством настроек и нужно создать похожий на него кластер.

Чтобы создать копию кластера PostgreSQL:

Terraform
  1. Если у вас еще нет Terraform, установите его.

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

  3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

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

  5. В той же рабочей директории разместите файл с расширением .tf и содержимым:

    resource "yandex_mdb_postgresql_cluster" "old" { }
    
  6. Запишите идентификатор первоначального кластера PostgreSQL в переменную окружения:

    export POSTGRESQL_CLUSTER_ID=<идентификатор_кластера>
    

    Идентификатор можно запросить вместе со списком кластеров в каталоге.

  7. Импортируйте настройки первоначального кластера PostgreSQL в конфигурацию Terraform:

    terraform import yandex_mdb_postgresql_cluster.old ${POSTGRESQL_CLUSTER_ID}
    
  8. Получите импортированную конфигурацию:

    terraform show
    
  9. Скопируйте ее из терминала и вставьте в файл с расширением .tf.

  10. Расположите файл в новой директории imported-cluster.

  11. Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:

    • Укажите новое имя кластера в строке resource и параметре name.
    • Удалите параметры created_at, health, id и status.
    • В блоках host удалите параметры fqdn и role.
    • Если в блоке disk_size_autoscaling указано значение параметра disk_size_limit = 0, удалите этот блок.
    • Если в блоке maintenance_window указано значение параметра type = "ANYTIME", удалите параметр hour.
    • (Опционально) Внесите дополнительные изменения, если вам нужна не идентичная, а кастомизированная копия.
  12. В директории imported-cluster получите данные для аутентификации.

  13. В этой же директории настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

  14. Поместите конфигурационный файл в директорию imported-cluster и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

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

    terraform validate
    

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

  16. Создайте необходимую инфраструктуру:

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

      terraform plan
      

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

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

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

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

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

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

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

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

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

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

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

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

resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
  ...
  timeouts {
    create = "1h30m" # Полтора часа
    update = "2h"    # 2 часа
    delete = "30m"   # 30 минут
  }
}

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

Создание кластера с одним хостомСоздание кластера с одним хостом

CLI
Terraform

Чтобы создать кластер с одним хостом, передайте один параметр --host.

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

  • С именем mypg.
  • В окружении production.
  • В сети default.
  • В группе безопасности enp6saqnq4ie********.
  • С одним хостом класса s2.micro в подсети b0rcctk2rvtr********, в зоне доступности ru-central1-a.
  • С хранилищем на сетевых SSD-дисках (network-ssd) размером 20 ГБ.
  • С одним пользователем (user1), с паролем user1user1.
  • С одной БД db1, принадлежащей пользователю user1.
  • С защитой от случайного удаления кластера, его баз данных и пользователей.

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

yc managed-postgresql cluster create \
   --name mypg \
   --environment production \
   --network-name default \
   --resource-preset s2.micro \
   --host zone-id=ru-central1-a,subnet-id=b0rcctk2rvtr******** \
   --disk-type network-ssd \
   --disk-size 20 \
   --user name=user1,password=user1user1 \
   --database name=db1,owner=user1 \
   --security-group-ids enp6saqnq4ie******** \
   --deletion-protection

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

  • С именем mypg.

  • Версии 17.

  • В окружении PRESTABLE.

  • В облаке с идентификатором b1gq90dgh25********.

  • В каталоге с идентификатором b1gia87mbaom********.

  • В новой сети mynet.

  • В новой группе безопасности pgsql-sg, разрешающей подключение к кластеру из интернета через порт 6432.

  • С одним хостом класса s2.micro в новой подсети mysubnet, в зоне доступности ru-central1-a. Подсеть mysubnet будет иметь диапазон 10.5.0.0/24.

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

  • С одним пользователем (user1), с паролем user1user1.

  • С одной БД db1, принадлежащей пользователю user1.

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

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

resource "yandex_mdb_postgresql_cluster" "mypg" {
  name                = "mypg"
  environment         = "PRESTABLE"
  network_id          = yandex_vpc_network.mynet.id
  security_group_ids  = [ yandex_vpc_security_group.pgsql-sg.id ]
  deletion_protection = true

  config {
    version = 17
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = "20"
    }
  }

  host {
    zone      = "ru-central1-a"
    name      = "mypg-host-a"
    subnet_id = yandex_vpc_subnet.mysubnet.id
  }
}

resource "yandex_mdb_postgresql_database" "db1" {
  cluster_id = yandex_mdb_postgresql_cluster.mypg.id
  name       = "db1"
  owner      = "user1"
}

resource "yandex_mdb_postgresql_user" "user1" {
  cluster_id = yandex_mdb_postgresql_cluster.mypg.id
  name       = "user1"
  password   = "user1user1"
}

resource "yandex_vpc_network" "mynet" {
  name = "mynet"
}

resource "yandex_vpc_subnet" "mysubnet" {
  name           = "mysubnet"
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.mynet.id
  v4_cidr_blocks = ["10.5.0.0/24"]
}

resource "yandex_vpc_security_group" "pgsql-sg" {
  name       = "pgsql-sg"
  network_id = yandex_vpc_network.mynet.id

  ingress {
    description    = "PostgreSQL"
    port           = 6432
    protocol       = "TCP"
    v4_cidr_blocks = [ "0.0.0.0/0" ]
  }
}

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

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