Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Справочник по Terraform для ClickHouse Managed Postgres

Бета

Сервисы ClickHouse Managed Postgres можно создавать и управлять ими с помощью ресурса clickhouse_postgres_service в Terraform-провайдере ClickHouse. На этой странице описаны настройка провайдера и примеры конфигурации для этого ресурса и связанных с ним источников данных.

Настройка провайдера

Добавьте провайдер ClickHouse в конфигурацию Terraform:

terraform {
  required_providers {
    clickhouse = {
      source  = "ClickHouse/clickhouse"
      version = ">= 3.21.0"
    }
  }
}

provider "clickhouse" {
  organization_id = var.organization_id
  token_key       = var.token_key
  token_secret    = var.token_secret
}

См. Управление ключами API, чтобы узнать, как создать ключ API для работы с провайдером.

Обзор ресурса

Ресурс clickhouse_postgres_service поддерживает следующие аргументы:

Аргумент Обязательный Описание
name Да Понятное человеку имя сервиса. Неизменяемо — при изменении сервис удаляется и создаётся заново.
cloud_provider Только при обычном создании Облачный провайдер, в котором размещён экземпляр. Сейчас поддерживается только aws. Не указывайте для реплики для чтения или восстановления на определённый момент времени (значение наследуется от источника).
region Только при обычном создании Облачный регион (например, us-east-1). Не указывайте для реплики для чтения или восстановления на определённый момент времени (значение наследуется от источника).
size Только при обычном создании Размер экземпляра (VM SKU), например m6gd.large. Можно изменять без пересоздания. Не указывайте для восстановления на определённый момент времени (восстановленный экземпляр будет создан с размером из резервной копии).
postgres_version Нет Основная версия Postgres (например, 18). Изменение основной версии приводит к удалению и повторному созданию сервиса.
ha_type Нет Режим высокой доступности: none, async или sync. См. Высокая доступность.
password Только при обычном создании, если не задан password_wo Пароль superuser, управляемый из вашей конфигурации. Terraform никогда не считывает его обратно через API. Хранится в состоянии Terraform как чувствительные данные. Не указывайте для реплики для чтения (наследуется) или восстановления на определённый момент времени (сохраняется из резервной копии источника).
password_wo Только при обычном создании, если не задан password Пароль superuser только для записи: применяется к сервису, но никогда не сохраняется в состоянии Terraform. Требует password_wo_version; требует Terraform 1.11 или новее.
password_wo_version С password_wo Номер версии для password_wo. Измените его, чтобы выполнить ротацию и применить текущее значение password_wo.
pg_config Нет Параметры сервера Postgres в виде map ключ-значение.
pgbouncer_config Нет Параметры пулера соединений PgBouncer в виде map ключ-значение.
tags Нет Теги ресурса в виде map ключ-значение.
read_replica_of Нет ID основного сервиса, от которого нужно реплицировать данные. См. Реплики для чтения. Взаимоисключаемо с restore_to_point_in_time.
restore_to_point_in_time Нет Создаёт сервис путём восстановления другого сервиса на определённый момент времени. См. Восстановление на определённый момент времени. Взаимоисключаемо с read_replica_of.

Следующие атрибуты доступны только для чтения и заполняются ClickHouse Cloud после создания: id, state, created_at, is_primary, hostname, port и username. Атрибут connection_string отсутствует: формируйте URI подключения из hostname, port, username и объявленного вами пароля, например postgres://${username}:${password}@${hostname}:${port}/postgres?sslmode=require.

Создайте сервис

resource "clickhouse_postgres_service" "example" {
  name           = "my-postgres"
  cloud_provider = "aws"
  region         = "us-east-1"
  size           = "m6gd.large"
  password       = var.postgres_password

  # High-availability mode — number of standby replicas:
  #   "none"  – primary only, no standby (default)
  #   "async" – 1 standby, asynchronous replication
  #   "sync"  – 2 standbys, synchronous replication
  ha_type = "async"

  tags = {
    environment = "production"
    team        = "data"
  }
}

Стандартный сервис должен объявлять password или password_wo. Значение должно содержать не менее 12 символов, включая как минимум одну строчную букву, одну заглавную букву и одну цифру. password_wo (вместе с password_wo_version) подчиняется тем же правилам для пароля, но никогда не сохраняется в состоянии Terraform; для ротации измените password_wo_version. Поскольку API не возвращает учетные данные, Terraform должен оставаться единственным средством записи пароля: ротация пароля вне Terraform (в консоли или через API) не обнаруживается, и следующая ротация через Terraform повторно применит объявленное значение.

Высокая доступность

Аргумент ha_type определяет количество резервных реплик:

ha_type Резервные реплики Репликация
none нет (только основной)
async 1 резервная реплика Асинхронная — запись завершается без ожидания резервной реплики
sync 2 резервные реплики Синхронная — основной ожидает подтверждения как минимум от одной резервной реплики

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

Реплики для чтения

Задайте read_replica_of равным id основного сервиса, чтобы создать стриминговую реплику для чтения. Реплика наследует cloud_provider, region, postgres_version и superuser основного сервиса — не указывайте эти параметры (и password):

resource "clickhouse_postgres_service" "replica" {
  name            = "my-postgres-replica"
  size            = "m6gd.large"
  read_replica_of = clickhouse_postgres_service.example.id
}

Подробнее см. в разделе реплики для чтения.

Восстановление на определённый момент времени

Задайте restore_to_point_in_time, чтобы создать сервис, восстановив резервную копию другого сервиса на указанный момент времени. Параметры cloud_provider, region и postgres_version наследуются от исходного сервиса, поэтому их указывать не нужно; size и ha_type также следует опустить:

resource "clickhouse_postgres_service" "restored" {
  name = "my-postgres-restored"

  restore_to_point_in_time = {
    source_id      = clickhouse_postgres_service.example.id
    restore_target = "2026-06-01T12:00:00Z"
  }
}

Весь этот блок используется только на этапе создания: изменение source_id или restore_target, а также удаление блока приводят к удалению и повторному созданию сервиса. Подробности см. в разделе Резервное копирование и восстановление.

Источники данных

Три дополнительных источника данных позволяют найти существующие сервисы:

# A single service by ID.
data "clickhouse_postgres_service" "example" {
  id = clickhouse_postgres_service.example.id
}

# All ClickHouse Managed Postgres services in the organization.
data "clickhouse_postgres_services" "all" {}

# The CA certificates for a service, for TLS connections.
data "clickhouse_postgres_service_ca_certificates" "certs" {
  service_id = clickhouse_postgres_service.example.id
}

Импорт существующих сервисов

Существующие сервисы ClickHouse Managed Postgres можно импортировать в состояние Terraform по идентификатору сервиса:

terraform import clickhouse_postgres_service.example xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

При импорте пароль не восстанавливается (API его не возвращает). После импорта при первом apply для сервиса используется password или password_wo, указанный в вашей конфигурации.

Неподдерживаемые операции

Следующее намеренно не включено в схему ресурса:

  • Операционные команды (restart, promote, switchover).
  • Списки разрешённых IP-адресов, частные конечные точки, конфигурация резервного копирования, окна обслуживания, управляемые клиентом ключи шифрования и BYOC.
  • Настраиваемые тайм-ауты жизненного цикла — блока timeouts {} нет.
Navigation