Сервисы 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 {}нет.