Les services ClickHouse Managed Postgres peuvent être créés et gérés à l’aide de la ressource clickhouse_postgres_service du fournisseur Terraform ClickHouse. Cette page présente la configuration du fournisseur ainsi que des exemples de configuration pour cette ressource et les sources de données associées.
Configuration du fournisseur
Ajoutez le fournisseur ClickHouse à votre configuration 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
}Consultez Gérer les clés API pour savoir comment créer une clé API à utiliser avec le fournisseur.
Aperçu de la ressource
La ressource clickhouse_postgres_service accepte les arguments suivants :
| Argument | Requis | Description |
|---|---|---|
name |
Oui | Nom du service lisible par un humain. Immuable — le modifier détruit et recrée le service. |
cloud_provider |
Pour une création standard | Fournisseur Cloud hébergeant l’instance. Actuellement, seul aws est pris en charge. À omettre pour une réplique de lecture ou une restauration à un instant donné (hérité de la source). |
region |
Pour une création standard | Région Cloud (par exemple, us-east-1). À omettre pour une réplique de lecture ou une restauration à un instant donné (hérité de la source). |
size |
Pour une création standard | Taille de l’instance (SKU de VM), par exemple m6gd.large. Redimensionnable sur place. À omettre pour une restauration à un instant donné (l’instance restaurée démarre avec la taille de la sauvegarde). |
postgres_version |
Non | Version majeure de Postgres (par exemple, 18). Modifier la version majeure détruit et recrée le service. |
ha_type |
Non | Mode de haute disponibilité : none, async ou sync. Voir Haute disponibilité. |
password |
Pour une création standard, sauf si password_wo est défini |
Mot de passe du superutilisateur, géré depuis votre configuration. Terraform ne le relit jamais depuis l’API. Stocké dans l’état (sensible). À omettre pour une réplique de lecture (hérité) ou une restauration à un instant donné (conservé à partir de la sauvegarde source). |
password_wo |
Pour une création standard, sauf si password est défini |
Mot de passe du superutilisateur en écriture seule : appliqué au service, mais jamais stocké dans l’état. Nécessite password_wo_version ; nécessite Terraform 1.11 ou une version ultérieure. |
password_wo_version |
Avec password_wo |
Numéro de version de password_wo. Modifiez-le pour faire pivoter la valeur actuelle de password_wo. |
pg_config |
Non | Paramètres du serveur Postgres sous forme de mappage clé-valeur. |
pgbouncer_config |
Non | Paramètres du pooler de connexions PgBouncer sous forme de mappage clé-valeur. |
tags |
Non | Tags de la ressource sous forme de mappage clé-valeur. |
read_replica_of |
Non | ID d’un service principal à répliquer. Voir Répliques de lecture. Mutuellement exclusif avec restore_to_point_in_time. |
restore_to_point_in_time |
Non | Crée le service en restaurant un autre service à un instant donné. Voir Restauration à un instant donné. Mutuellement exclusif avec read_replica_of. |
Les attributs suivants sont en lecture seule et sont renseignés par ClickHouse Cloud après la création : id, state, created_at, is_primary, hostname, port et username. Il n’existe pas d’attribut connection_string : construisez les URI de connexion à partir de hostname, port, username et du mot de passe que vous déclarez, par exemple postgres://${username}:${password}@${hostname}:${port}/postgres?sslmode=require.
Créer un service
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"
}
}Un service standard doit déclarer password ou password_wo. La valeur doit contenir au moins 12 caractères, dont au moins une lettre minuscule, une lettre majuscule et un chiffre. password_wo (avec password_wo_version) applique les mêmes règles de mot de passe, mais n’est jamais stocké dans l’état ; modifiez password_wo_version pour effectuer la rotation. Comme l’API ne renvoie pas les identifiants, Terraform doit rester le seul à définir le mot de passe : un mot de passe dont la rotation est effectuée en dehors de Terraform (console ou API) n’est pas détecté, et la rotation suivante pilotée par Terraform réapplique la valeur déclarée.
Haute disponibilité
L’argument ha_type détermine le nombre de répliques de secours :
ha_type |
Instances de secours | Réplication |
|---|---|---|
none |
Aucune (primaire uniquement) | — |
async |
1 instance de secours | Asynchrone — les écritures sont validées sans attendre l’instance de secours |
sync |
2 instances de secours | Synchrone — l’instance primaire attend un accusé de réception d’au moins une instance de secours |
ha_type peut être modifié après la création ; le changer déclenche une transition de haute disponibilité. Voir Haute disponibilité pour plus de détails.
Répliques de lecture
Définissez read_replica_of sur l’id d’un service principal pour créer une réplique de lecture en streaming. Une réplique hérite du cloud_provider, de la région, de la postgres_version et du superutilisateur du principal — ne les indiquez donc pas (ni le password) :
resource "clickhouse_postgres_service" "replica" {
name = "my-postgres-replica"
size = "m6gd.large"
read_replica_of = clickhouse_postgres_service.example.id
}Consultez les répliques en lecture pour en savoir plus.
Restauration à un instant donné
Définissez restore_to_point_in_time pour créer un service en restaurant la sauvegarde d'un autre service à un instant donné. cloud_provider, region et postgres_version sont hérités du service source (ne les indiquez pas) ; size et ha_type doivent être omis :
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"
}
}L’ensemble du bloc s’applique uniquement à la création : modifier source_id ou restore_target, ou supprimer le bloc, détruit puis recrée le service. Consultez Sauvegarde et restauration pour plus de détails.
Sources de données
Trois sources de données associées vous permettent de retrouver des services existants :
# 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
}Importation de services existants
Les services ClickHouse Managed Postgres existants peuvent être importés dans l’état Terraform à l’aide de l’ID du service :
terraform import clickhouse_postgres_service.example xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxL’importation ne restaure pas le mot de passe (l’API ne le renvoie pas). Après l’importation, le premier apply fait passer le service au password ou password_wo déclaré dans votre configuration.
Opérations non prises en charge
Les éléments suivants sont volontairement absents du schéma de ressource :
- Commandes opérationnelles (
restart,promote,switchover). - Listes d’autorisation d’IP, points de terminaison privés, configuration des sauvegardes, fenêtres de maintenance, clés de chiffrement gérées par le client et BYOC.
- Délais d’expiration du cycle de vie configurables — il n’existe pas de bloc
timeouts {}.